Primera página Regresar Siguiente Última página Resumen Imagen
Canonical Evolutionary Algorithm
for ( 1..$generations ) {
my @newPop, @rates;
for ( @population ) { push @rates, 1/$_->{_fitness}; }
my $popWheel=new Algorithm::Evolutionary::Wheel @rates;
for ( my $i = 0; $i < $popSize/2; $i ++ ) {
my $chr1 = $population[$popWheel->spin()];
my $chr2 = $population[$popWheel->spin()];
my $clone1 = { _str => $chr1->{_str}, _fitness => 0 };
my $clone2 = { _str => $chr2->{_str}, _fitness => 0 };
mutate( $clone1, \@alphabet ); mutate( $clone2, \@alphabet );
crossover( $clone1, $clone2 );
$clone1->{_fitness} = fitness( $clone1->{_str} );
$clone2->{_fitness} = fitness( $clone2->{_str} );
push @newPop, $clone1, $clone2;
}
@population = sort { $a->{_fitness} <=> $b->{_fitness} } @newPop;
Notas: