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;