Algorithm::Evolutionary::Op::FullAlgorithm - Skeleton class for a fully-featured
evolutionary algorithm
use Algorithm::Evolutionary qw( Op::Base Op::Bitflip Op::Crossover
Op::RouletteWheel Op::GeneralGeneration
Op::GenerationalTerm Op::FullAlgorithm );
# Using the base class as factory
my $easyEA = Algorithm::Evolutionary::Op::Base->fromXML( $ref->{$xml} );
$easyEA->apply(\@pop );
#Or using the constructor
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;
my $len = $indi->length();
my $i = 0;
while ($i < $len ) {
$total += substr($indi->{'_str'}, $i, 1);
$i++;
}
return $total;
};
my $generation =
new Algorithm::Evolutionary::Op::GeneralGeneration( $onemax, $selector, [$m, $c], $replacementRate );
my $g100 = new Algorithm::Evolutionary::Op::GenerationalTerm 10;
my $f = new Algorithm::Evolutionary::Op::FullAlgorithm $generation, $g100;
print $f->asXML();
$f->apply( $pop ); # Pop should be defined else where
Algorithm::Evolutionary::Op::Base
Class for a configurable evolutionary algoritm. It takes a single-generarion
object, and mixes it with a termination condition to create a full algorithm.
Includes a sensible default (100-generation generational algorithm) if it is
issued only an object of class Algorithm::Evolutionary::Op::GeneralGeneration.
Takes an already created algorithm and a terminator, and creates an object
Sets the instance variables. Takes hashes to the different options of
the algorithm: parameters, fitness functions and operators
Applies the algorithm to the population; checks that it receives a ref-to-array
as input, croaks if it does not. Returns a sorted, culled, evaluated
population for next generation.
More or less in the same ballpark, alternatives to this one
- Algorithm::Evolutionary::Op::CanonicalGA.
- Algorithm::Evolutionary::Op::Easy.
Classes you can use within FullAlgorithm:
- Algorithm::Evolutionary::Op::Convergence_Terminator
- Algorithm::Evolutionary::Op::GenerationalTerm
- Algorithm::Evolutionary::Op::Generation_Skeleton
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
CVS Info: $Date: 2009/07/24 08:46:59 $
$Header: /media/Backup/Repos/opeal/opeal/Algorithm-Evolutionary/lib/Algorithm/Evolutionary/Op/FullAlgorithm.pm,v 3.0 2009/07/24 08:46:59 jmerelo Exp $
$Author: jmerelo $