Print

Print


Is there a tutorial / example that demonstrates differential evolution setup?  I read the DE part of the manual, but I think my setup is still wrong.  If I had to guess, I think my breeding pipeline is setup incorrectly as I think the DEBreeder class is supposed to perform the crossover, not ec.vector.breed.VectorCrossoverPipeline.  However, replacing causes an error.  When running, the best individual in the population at end of run is best individual in population after 1st generation.

# Copyright 2006 by Sean Luke and George Mason University
# Licensed under the Academic Free License version 3.0
# See the file "LICENSE" for more information

# The parameters that were laid out in Tutorial 1 (see the documentation)

verbosity    = 0

breedthreads    = 1
evalthreads    = 1
seed.0        = 4357

state        = ec.simple.SimpleEvolutionState

pop        = ec.Population
init        = ec.simple.SimpleInitializer
finish        = ec.simple.SimpleFinisher
breed        = ec.de.DEBreeder
eval        = ec.de.DEEvaluator
stat        = ec.simple.SimpleStatistics
exch        = ec.simple.SimpleExchanger

generations        = 2000
quit-on-run-complete    = true
checkpoint        = false
prefix            = ec
checkpoint-modulo    = 1

breed.f = 0.1
breed.cr = 0.1
pop.subpop.0.species.mutation-bounded = true

stat.file        = $out.stat

pop.subpops        = 1
pop.subpop.0        = ec.Subpopulation

pop.subpop.0.size         = 100
pop.subpop.0.duplicate-retries     = 0
pop.subpop.0.species         = ec.vector.FloatVectorSpecies
pop.subpop.0.species.crossover-type    = one
pop.subpop.0.species.mutation-prob    = 0.5

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.select.TournamentSelection
pop.subpop.0.species.pipe.source.0.source.1    = ec.select.TournamentSelection
pop.subpop.0.species.max-gene = 10
pop.subpop.0.species.min-gene = 0

select.tournament.size        = 2

pop.subpop.0.species.fitness     = ec.simple.SimpleFitness
pop.subpop.0.species.ind    = ec.vector.DoubleVectorIndividual

pop.subpop.0.species.genome-size    = 4
eval.problem        = ec.app.evolvedm.ClosestToHalf

/*
  Copyright 2006 by Sean Luke
  Licensed under the Academic Free License version 3.0
  See the file "LICENSE" for more information
 */


package ec.app.evolvedm;
import ec.*;
import ec.simple.*;
import ec.vector.*;

public class ClosestToHalf extends Problem implements SimpleProblemForm
{
    public void evaluate(final EvolutionState state,
            final Individual ind,
            final int subpopulation,
            final int threadnum)
    {
        if (ind.evaluated) return;

        if (!(ind instanceof DoubleVectorIndividual))
            state.output.fatal("Whoa!  It's not a DoubleVectorIndividual!!!",null);

        double sum=0;
        DoubleVectorIndividual ind2 = (DoubleVectorIndividual)ind;

        for(int x=0; x<ind2.genome.length; x++)
            sum += Math.abs(0.5 - ind2.genome[x]);
        System.out.println(100-sum);

        if (!(ind2.fitness instanceof SimpleFitness))
            state.output.fatal("Whoa!  It's not a SimpleFitness!!!",null);
        ((SimpleFitness)ind2.fitness).setFitness(state,
                /// ...the fitness...
                (float)(100-sum),
                ///... is the individual ideal?  Indicate here...
                sum < 0.2);
        ind2.evaluated = true;
    }
}