It occurred to me that if you readjusted all the parameters to use
defaults rather than absolute parameter values, you could plausibly
run multiple simultaneous runs in parallel -- just put each one in a
different subpopulation. To do this required one modification of
Population.java, which is now on CVS, adding a new parameter
"pop.default-subpop".
Below is Artificial Ant with 10 simultaneous 512-individual
subpopulations running in parallel. Memory will no doubt be an
issue. But it runs, given enough bytes.
Sean
#### Basic ECJ parameters
verbosity = 0
evalthreads = 1
breedthreads = 1
seed.0 = time
checkpoint = false
checkpoint-modulo 1
prefix = ec
state = ec.simple.SimpleEvolutionState
init = ec.gp.GPInitializer
finish = ec.simple.SimpleFinisher
exch = ec.simple.SimpleExchanger
breed = ec.simple.SimpleBreeder
eval = ec.simple.SimpleEvaluator
stat = ec.gp.koza.KozaStatistics
stat.file $out.stat
generations = 51
quit-on-run-complete = true
##### Population parameters
pop = ec.Population
pop.subpops = 10
pop.default-subpop = ec.Subpopulation
##### Subpopulation parameters
ec.subpop.size = 512
ec.subpop.duplicate-retries = 100
ec.subpop.species = ec.gp.GPSpecies
gp.species.pipe = ec.breed.MultiBreedingPipeline
##### Species parameters
gp.species.fitness = ec.gp.koza.KozaFitness
gp.species.ind = ec.gp.GPIndividual
##### GPIndividual parameters
gp.individual.numtrees = 1
gp.individual.tree.0 = ec.gp.GPTree
##### GPTree parameters
gp.tree.tc = tc0
##### MultiBreedingPipeline parameters
breed.multibreed.generate-max = false
breed.multibreed.num-sources = 2
breed.multibreed.source.0 = ec.gp.koza.CrossoverPipeline
breed.multibreed.source.1 = ec.breed.ReproductionPipeline
##### Crossover parameters
gp.koza.xover.prob = 0.9
gp.koza.xover.source.0 = ec.select.TournamentSelection
gp.koza.xover.source.1 = same
gp.koza.xover.ns.0 = ec.gp.koza.KozaNodeSelector
gp.koza.xover.ns.1 = same
gp.koza.xover.maxdepth = 17
gp.koza.xover.tries = 1
##### Reproduction parameters
breed.reproduce.prob = 0.1
breed.reproduce.source.0 = ec.select.TournamentSelection
##### TournamentSelection parameters
select.tournament.size = 7
##### GPProblem parameters
eval.problem.stack = ec.gp.ADFStack
eval.problem.stack.context = ec.gp.ADFContext
##### KozaNodeSelector parameters
gp.koza.ns.terminals = 0.1
gp.koza.ns.nonterminals = 0.9
gp.koza.ns.root = 0.0
##### GPFunctionSet parameters
gp.fs.size = 1
gp.fs.0 = ec.gp.GPFunctionSet
gp.fs.0.name = f0
##### GPType parameters
gp.type.a.size = 1
gp.type.a.0.name = nil
gp.type.s.size = 0
##### GPTreeConstraints parameters
gp.tc.size = 1
gp.tc.0 = ec.gp.GPTreeConstraints
gp.tc.0.name = tc0
gp.tc.0.fset = f0
gp.tc.0.returns = nil
gp.tc.0.init = ec.gp.koza.HalfBuilder
##### HalfBuilder parameters
gp.koza.half.min-depth = 2
gp.koza.half.max-depth = 6
gp.koza.half.growp = 0.5
##### GPNodeConstraints parameters
gp.nc.size = 7
gp.nc.0 = ec.gp.GPNodeConstraints
gp.nc.0.name = nc0
gp.nc.0.returns = nil
gp.nc.0.size = 0
gp.nc.1 = ec.gp.GPNodeConstraints
gp.nc.1.name = nc1
gp.nc.1.returns = nil
gp.nc.1.size = 1
gp.nc.1.child.0 = nil
gp.nc.2 = ec.gp.GPNodeConstraints
gp.nc.2.name = nc2
gp.nc.2.returns = nil
gp.nc.2.size = 2
gp.nc.2.child.0 = nil
gp.nc.2.child.1 = nil
gp.nc.3 = ec.gp.GPNodeConstraints
gp.nc.3.name = nc3
gp.nc.3.returns = nil
gp.nc.3.size = 3
gp.nc.3.child.0 = nil
gp.nc.3.child.1 = nil
gp.nc.3.child.2 = nil
gp.nc.4 = ec.gp.GPNodeConstraints
gp.nc.4.name = nc4
gp.nc.4.returns = nil
gp.nc.4.size = 4
gp.nc.4.child.0 = nil
gp.nc.4.child.1 = nil
gp.nc.4.child.2 = nil
gp.nc.4.child.3 = nil
gp.nc.5 = ec.gp.GPNodeConstraints
gp.nc.5.name = nc5
gp.nc.5.returns = nil
gp.nc.5.size = 5
gp.nc.5.child.0 = nil
gp.nc.5.child.1 = nil
gp.nc.5.child.2 = nil
gp.nc.5.child.3 = nil
gp.nc.5.child.4 = nil
gp.nc.6 = ec.gp.GPNodeConstraints
gp.nc.6.name = nc6
gp.nc.6.returns = nil
gp.nc.6.size = 6
gp.nc.6.child.0 = nil
gp.nc.6.child.1 = nil
gp.nc.6.child.2 = nil
gp.nc.6.child.3 = nil
gp.nc.6.child.4 = nil
gp.nc.6.child.5 = nil
###### Artificial Ant #######
gp.fs.0.func.0 = ec.app.ant.func.Left
gp.fs.0.func.0.nc = nc0
gp.fs.0.func.1 = ec.app.ant.func.Right
gp.fs.0.func.1.nc = nc0
gp.fs.0.func.2 = ec.app.ant.func.Move
gp.fs.0.func.2.nc = nc0
gp.fs.0.func.3 = ec.app.ant.func.IfFoodAhead
gp.fs.0.func.3.nc = nc2
gp.fs.0.func.4 = ec.app.ant.func.Progn2
gp.fs.0.func.4.nc = nc2
gp.fs.0.func.5 = ec.app.ant.func.Progn3
gp.fs.0.func.5.nc = nc3
eval.problem = ec.app.ant.Ant
eval.problem.data = ec.app.ant.AntData
eval.problem.stack.context.data = ec.app.ant.AntData
gp.fs.0.size = 6
eval.problem.moves = 400
eval.problem.file = santafe.trl
|