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
my
$popSize
= 20;
my
$selector
= new Algorithm::Evolutionary::Op::RouletteWheel
$popSize
;
#One of the possible selectors
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
A more modern and flexible version: Algorithm::Evolutionary::Op::Generation_Skeleton.
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