Hi,
The current implementation of the SPEA2
algorithm provided with the ECJ package suffers the following problem:
In the SPEA2MultiObjectiveFitness class,
the method betterThan is implemented and it tests whether an individual
dominates another individual whose fitness is passed in the parameters of the
method. Problem is, this same function is used in the tournament selection.
Since, in the SPEA2, breeding happens between archive individuals only, and
almost all of them are non-dominated, hence using the betterThan method is not
suitable, and leads to a rather random behavior.
The SPEA2 algorithm performs its tournament
selection based on the totatlFitness value of the individuals (RAW + density
information). Hence another method needs to be added to the
SPEA2MultiObjectiveFitness class, to be used in the tournament selection.
The following is suggested:
////////////////////////////////////////////////////////////////////////////////
* Implementation of Zitzler paper
selection criteria
* Judges better than based on a
comparison of the total fitness value.
* USED in tournament selection */
////////////////////////////////////////////////////////////////////////////////
public boolean zBetterThan(Fitness
_fitness)
{
boolean
IamBetter = false;
if
(SPEA2Fitness < ((SPEA2MultiObjectiveFitness)_fitness).SPEA2Fitness)
IamBetter
= true;
return
(IamBetter);
}
////////////////////////////////////////////////////////////////////////////////
Best reagrds
Ghada