Algorithm-MasterMind
view release on metacpan or search on metacpan
lib/Algorithm/MasterMind/EDA.pm view on Meta::CPAN
package Algorithm::MasterMind::EDA;
use warnings;
use strict;
use Carp;
use lib qw(../../lib
../../../lib
../../../../Algorithm-Evolutionary/lib
../../../Algorithm-Evolutionary/lib
../../Algorithm-Evolutionary/lib);
our $VERSION = sprintf "%d.%03d", q$Revision: 1.13 $ =~ /(\d+)\.(\d+)/g;
use base 'Algorithm::MasterMind::Evolutionary_Base';
use Algorithm::MasterMind qw(entropy);
use Algorithm::Evolutionary qw( Individual::BitString
Op::EDA_step );
sub fitness {
my $self = shift;
my $object = shift;
my $combination = $object->{'_str'};
my $matches = $self->matches( $combination );
$object->{'_matches'} = $matches->{'matches'};
my $blacks_and_whites = 1;
for my $r (@{$matches->{'result'}} ) {
$blacks_and_whites += $r->{'blacks'} + $r->{'whites'}+ $self->{'_length'}*$r->{'match'};
}
return $blacks_and_whites;
}
sub initialize {
my $self = shift;
my $options = shift;
for my $o ( keys %$options ) {
$self->{"_$o"} = $options->{$o};
}
$self->{'_fitness'} = 'orig' if !$self->{'_fitness'};
$self->{'_first'} = 'orig' if !$self->{'_first'};
my $length = $options->{'length'};
#----------------------------------------------------------#
# #
my $fitness;
if ( $self->{'_fitness'} eq 'orig' ) {
$fitness = sub { $self->fitness_orig(@_) };
} elsif ( $self->{'_fitness'} eq 'naive' ) {
$fitness = sub { $self->fitness(@_) };
} elsif ( $self->{'_fitness'} eq 'compress' ) {
$fitness = sub { $self->fitness_compress(@_) };
}
#EDA itself
my $eda = new Algorithm::Evolutionary::Op::EDA_step( $fitness,
$options->{'replacement_rate'},
$options->{'pop_size'},
$self->{'_alphabet'});
$self->{'_fitness'} = $fitness;
$self->{'_eda'} = $eda;
}
( run in 0.665 second using v1.01-cache-2.11-cpan-97f6503c9c8 )