On Oct 10, 2007, at 7:10 AM, David Robert White wrote: > Hi, > > Firstly - thanks to all those who have contributed to ECJ. I've > been using it for a while and have found it to be a great toolkit > to work with. > I've recently started using the SPEA2 classes with ECJ. I have two > queries that I need help with: > > 1. Which one of the following correctly describes the fitness > values held in multifitness within the SPEA2MultiObjectiveFitness > class, inherited from the MultiObjectiveFitness class: > > 0 (best) to infinity (worst) > 0 (worst) to infinity (best) > 0 (worst) to 1 (best) > > I know this is a basic question, but it seems to depend on where > you look as to which answer you receive. > > 2. Does anyone have an example that uses SPEA2, including their > parameter files, that they could possibly share? > > Thanks, > > David I have used SPEA2 for a few experiments. My parameter file does not differ much from the one included in the ECJ distribution in the file ec/multiobjective/spea2/spea2.params. I was using a population size of 3000 with an archive size of 500. I have not had much luck getting SPEA2 to work properly, probably due to some configuration error on my part. In my SPEA2 runs on a combinatorial problem (attacking a homophonic substitution cipher), my pareto fronts tended to converge on a small handful of distinct multiobjective fitness vectors. Within each cluster, the genotypes were all duplicates of each other, so there was no diversity. For example, one of my runs converged on the following set of multiobjective fitness vectors after only 100 generations: 424 33.0|4.0|23.0| 405 26.0|8.0|28.0| 397 34.0|0.0|18.0| 365 31.0|8.0|25.0| 358 27.0|10.0|23.0| 352 28.0|10.0|19.0| (the first number indicates the number of individuals related to the fitness vector). I know that there are very many more fitness vectors, particularly non-dominated ones, in my problem space, so I am not sure what I was doing wrong. Does anyone have any recommendations of what I should look for? For what it's worth, here's the parameter file I was using: #SPEA2 verbosity = 0 flush = true nostore = true breedthreads = 1 evalthreads = 1 seed.0 = time state = ec.simple.SimpleEvolutionState pop = ec.Population init = ec.simple.SimpleInitializer finish = ec.simple.SimpleFinisher breed = ec.multiobjective.spea2.SPEA2Breeder eval = ec.multiobjective.spea2.SPEA2Evaluator stat = org.oranchak.ZodiacESStatistics exch = ec.simple.SimpleExchanger exch.subpop.0.select = ec.select.TournamentSelection generations = 200000000 quit-on-run-complete = false checkpoint = true checkpoint-modulo = 50 prefix = experiment214 stat.file = $experiment214.txt stat.gather-full = true pop.subpops = 1 pop.subpop.0 = ec.multiobjective.spea2.SPEA2Subpopulation pop.subpop.0.archive-size = 500 pop.subpop.0.size = 3000 pop.subpop.0.duplicate-retries = 0 pop.subpop.0.species = ec.vector.IntegerVectorSpecies pop.subpop.0.species.min-gene = 0 pop.subpop.0.species.max-gene = 499 pop.subpop.0.species.fitness = ec.multiobjective.spea2.SPEA2MultiObjectiveFitness pop.subpop.0.species.fitness.numobjectives = 3 pop.subpop.0.species.ind = org.oranchak.CipherWordGene pop.subpop.0.species.genome-size = 50 pop.subpop.0.species.crossover-type = one pop.subpop.0.species.crossover-prob = 1.0 pop.subpop.0.species.mutation-prob = 0.05 pop.subpop.0.species.pipe = ec.vector.breed.VectorMutationPipeline pop.subpop.0.species.pipe.source.0 = ec.vector.breed.VectorCrossoverPipeline pop.subpop.0.species.pipe.source.0.source.0 = ec.multiobjective.spea2.SPEA2TournamentSelection pop.subpop.0.species.pipe.source.0.source.1 = same select.tournament.size = 2 eval.problem = org.oranchak.ZodiacWordProblem Regards, -Dave