Spaces:
Sleeping
Sleeping
File size: 1,476 Bytes
2a2a517 6e5f7ce d3b42d5 2a2a517 382662a 2a2a517 382662a a369299 382662a 6e5f7ce 382662a 2a2a517 382662a 9c27796 382662a b364345 6e5f7ce 9c27796 382662a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
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)
|