Documentation of 'org.jgap.impl.BulkFitnessOffsetRemover' Java class
BulkFitnessOffsetRemover
org.jgap.impl

Class BulkFitnessOffsetRemover

    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method and Description
      java.lang.Object clone()
      Override in your implementation if necessary.
      void evaluate(Population a_chromosomes)
      Calculates and sets the fitness values on each of the given Chromosomes via their setFitnessValue() method.
      double getAbsoluteFitness(IChromosome a_individuum)
      Using this instance to remove the fitness offset in the populations brings the advantage of getting a selection more sensitive to the differences of fitness of the chromosomes.
      • Methods inherited from class java.lang.Object

        equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • BulkFitnessOffsetRemover

        public BulkFitnessOffsetRemover(FitnessFunction a_ff)
    • Method Detail

      • evaluate

        public void evaluate(Population a_chromosomes)
        Description copied from class: BulkFitnessFunction
        Calculates and sets the fitness values on each of the given Chromosomes via their setFitnessValue() method.
        Specified by:
        evaluate in class BulkFitnessFunction
        Parameters:
        a_chromosomes - list of Chromosomes for which the fitness values must be computed and set
      • getAbsoluteFitness

        public double getAbsoluteFitness(IChromosome a_individuum)

        Using this instance to remove the fitness offset in the populations brings the advantage of getting a selection more sensitive to the differences of fitness of the chromosomes.

        The disadvantage is, that the fitness values are modified. The modification is good for jgap's selection method but bad for the guys that want to see the success of your work, or need a proof that a GA improves over time:
        The value of Genotype.getFittestChromosome() does not seem to increase over the generations. Most often it becomes worse. This is caused by the fact, that all Chromosomes are getting better over time (the fitness interval of all Chromosomes gets narrower) and the offset that may be cut becomes bigger.

        If you want to get an absolute value independant from the offset that is cut off from the chromosome's fitness value, this method has to be used.

        Stop reading here because a

        Mathematical Proof

        is following. How can it work to get the absolute value for all Chromosomes fitness values? Some Chromosomes may have lived for many generations and everytime their fitness was evaluated here, the old offset was added and a new one was calculated and subtracted from the fitness value.

        Each bulk fitness evaluation a Chromosome experiences, it's fitness value F get's an addition of the old offset O(n-1) and a substraction by the new offset On.
        n is the generation index.

         F1 = F0 + O0 - O1
         F2 = F1 + O1 - O2
         F3 = F2 + O2 - O3
        
         =>
        
         1) Fn = F(n-1)
         + O(n-1) - On
        
         2) F(n-1) = F(n-2)
         + O(n-2) - O(n-1)
        
         2 in 1)
            Fn = (F(n-2) + O(n-2)
         - O(n-1)) + O(n-1) - On
            Fn = F(n-2) + O(n-2) - On
        
         We made a step over 2 generations: With the current offset and the
         fitness & offset of the
         "preprevious" generation we can calculate the current fitness.
         We can assume that this generation stepping works for farer steps
         m (just continue step 2) until you have a generation step value
         high enough ;-))
        
         => Fn = F(n-m) + O(n-m) - On
        
         We want to get the original absolute value of fitness:
        
         3) m := n
        
         => Fn = F0 + O0 - On
        
         solved to F0 our original value:
        
         F0 = Fn + On - O0
        
         And our initial offset O0 is zero!
         

        This shows, that it is possible to compute the original fitness value of a Chromosome from it's current fitness value and the previous offset regardless of the amounts of generations between original evaluation and the current generation.

        Parameters:
        a_individuum - any Chromosome that is normally being evaluated by this BulkFitnessFunction
        Returns:
        the original fitness value as returned by the registered fitnessFunction instance.

DMelt 3.0 © DataMelt by jWork.ORG

You see the box below because you did not login.