NAME

Algorithm::Evolutionary::Op::GeneralGeneration - Customizable single generation for an evolutionary algorithm.

SYNOPSIS

 #Taken from the t/general.t file, verbatim
 my $m = new Algorithm::Evolutionary::Op::Bitflip; #Changes a single bit
 my $c = new Algorithm::Evolutionary::Op::Crossover; #Classical 2-point crossover
 my $replacementRate = 0.3; #Replacement rate
 use Algorithm::Evolutionary::Op::RouletteWheel;
 my $popSize = 20;
 my $selector = new Algorithm::Evolutionary::Op::RouletteWheel $popSize; #One of the possible selectors
 use Algorithm::Evolutionary::Op::GeneralGeneration;
 my $onemax = sub { 
   my $indi = shift;
   my $total = 0;
   for ( my $i = 0; $i < $indi->length(); $i ++ ) {
     $total += substr( $indi->{_str}, $i, 1 );
   }
   return $total;
 };
 my @pop;
 my $numBits = 10;
 for ( 0..$popSize ) {
   my $indi = new Algorithm::Evolutionary::Individual::BitString $numBits ; #Creates random individual
   my $fitness = $onemax->( $indi );
   $indi->Fitness( $fitness );
   push( @pop, $indi );
 }
 my $generation = 
   new Algorithm::Evolutionary::Op::GeneralGeneration( $onemax, $selector, [$m, $c], $replacementRate );
 my @sortPop = sort { $a->Fitness() <=> $b->Fitness() } @pop;
 my $bestIndi = $sortPop[0];
 $generation->apply( \@sortPop );

Base Class

Algorithm::Evolutionary::Op::Base

DESCRIPTION

Genetic algorithm that uses the other component. Must take as input the operators thar are going to be used, along with its priorities

METHODS

new( $evaluation_function, $selector, $ref_to_operator_array, $replacement_rate )

Creates an algorithm, with the usual operators. Includes a default mutation and crossover, in case they are not passed as parameters

set( $ref_to_params_hash, $ref_to_code_hash, $ref_to_operators_hash )

Sets the instance variables. Takes a ref-to-hash as input

apply( $population )

Applies the algorithm to the population, which should have been evaluated first; checks that it receives a ref-to-array as input, croaks if it does not. Returns a sorted, culled, evaluated population for next generation.

SEE ALSO

Copyright

This file is released under the GPL. See the LICENSE file included in this distribution, or go to http://www.fsf.org/licenses/gpl.txt