Spaces:
Running
Running
include("eureqa.jl") | |
println("Lets try to learn (x2^2 + cos(x3)) using regularized evolution from scratch") | |
const nthreads = Threads.nthreads() | |
println("Running with $nthreads threads") | |
const npop = 300 | |
const annealing = true | |
const ncyclesperiteration = 3000 | |
function fullRun(niterations::Integer) | |
# Generate random initial populations | |
allPops = [Population(npop, 3) for j=1:nthreads] | |
# Repeat this many evolutions; we collect and migrate the best | |
# each time. | |
for k=1:niterations | |
# Spawn threads to run indepdent evolutions, then gather them | |
@inbounds Threads.@threads for i=1:nthreads | |
allPops[i] = run(allPops[i], ncyclesperiteration, annealing, verbose=500) | |
end | |
# Get best 10 models from each evolution. Copy because we re-assign later. | |
bestPops = deepcopy(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 | |
println(bestCurScore, " is the score for ", stringTree(bestPops.members[bestCurScoreIdx].tree)) | |
# Migration | |
for j=1:nthreads | |
for k in rand(1:npop, Integer(npop/2)) | |
# Copy in case one gets used twice | |
allPops[j].members[k] = deepcopy(bestPops.members[rand(1:size(bestPops.members)[1])]) | |
end | |
end | |
end | |
end | |
fullRun(10) | |