Print

Print


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