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
|