Print

Print


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