Spaces:
Sleeping
Sleeping
using Distributed | |
const nthreads = 8 | |
addprocs(nthreads) | |
@everywhere include("eureqa.jl") | |
println("Lets try to learn (x2^2 + cos(x3) + 5) using regularized evolution from scratch") | |
const npop = 100 | |
const annealing = false | |
const niterations = 10 | |
const ncyclesperiteration = 1000 | |
# Generate random initial populations | |
# Create a mapping for running the algorithm on all processes | |
@everywhere f = (pop,)->run(pop, ncyclesperiteration, annealing) | |
function update(allPops::Array{Population, 1}, bestScore::Float64, pool::AbstractWorkerPool) | |
# Map it over our workers | |
#global allPops = deepcopy(pmap(f, deepcopy(allPops))) | |
curAllPops = deepcopy(pmap(f, allPops)) | |
for j=1:nthreads | |
allPops[j] = curAllPops[j] | |
end | |
# Get best 10 models for each processes | |
bestPops = Population([member for pop in allPops for member in bestSubPop(pop).members]) | |
bestCurScoreIdx = argmin([bestPops.members[member].score for member=1:bestPops.n]) | |
bestCurScore = bestPops.members[bestCurScoreIdx].score | |
if bestCurScore < bestScore | |
bestScore = bestCurScore | |
println(bestScore, " is the score for ", stringTree(bestPops.members[bestCurScoreIdx].tree)) | |
end | |
# Migration | |
for j=1:nthreads | |
allPops[j].members[1:50] = deepcopy(bestPops.members[rand(1:bestPops.n, 50)]) | |
end | |
return allPops, bestScore | |
end | |
function runExperiment() | |
# Do niterations cycles | |
allPops = [Population(npop, 3) for j=1:nthreads] | |
bestScore = Inf | |
#pool = CachingPool(workers()) | |
pool = WorkerPool(workers()) | |
for i=1:niterations | |
allPops, bestScore = update(allPops, bestScore, pool) | |
end | |
return bestScore | |
end | |
runExperiment() | |