Algorithm-MasterMind
view release on metacpan or search on metacpan
lib/Algorithm/MasterMind/CGA_Partitions.pm view on Meta::CPAN
# print "After GA combinations ", join( " ", keys %consistent ), "\n";
$self->{'_consistent'} = \%consistent; #This mainly for outside info
if ( $number_of_consistent > 1 ) {
# print "Consistent ", scalar keys %consistent, "\n";
#Use whatever we've got to compute number of partitions
my $partitions = partitions( keys %consistent );
my $max_partitions = 0;
my %max_c;
for my $c ( keys %$partitions ) {
my $this_max = keys %{$partitions->{$c}};
$max_c{$c} = $this_max;
if ( $this_max > $max_partitions ) {
$max_partitions = $this_max;
}
}
# Find all partitions with that max
my @max_c = grep( $max_c{$_} == $max_partitions, keys %max_c );
# Break ties
my $string = $max_c[ rand( @max_c )];
# Obtain next
return $self->{'_last'} = $string;
} else {
return $self->{'_last'} = (keys %consistent)[0];
}
}
"Many blacks, 0 white"; # Magic true value required at end of module
__END__
=head1 NAME
Algorithm::MasterMind::CGA_Partitions - Solver using a Canonical GA
=head1 SYNOPSIS
use Algorithm::MasterMind::CGA_Partitions;
my $secret_code = 'EAFC';
my $population_size = 200;
my @alphabet = qw( A B C D E F );
my $solver = new Algorithm::MasterMind::CGA_Partitions { alphabet => \@alphabet,
length => length( $secret_code ),
pop_size => $population_size};
#The rest, same as the other solvers
=head1 DESCRIPTION
Uses L<Algorithm::Evolutionary> instance of canonical genetic algorithm to solve MM; as there
are two different fitness functions you can use; probably
C<fitness_orig> works better.
=head1 INTERFACE
=head2 initialize
Performs bookkeeping, and assigns flags depending on the
initialization values
=head2 new ( $options )
This function, and all the rest, are directly inherited from base
=head2 issue_next()
Issues the next combination
=head2 feedback()
Obtain the result to the last combination played
=head2 guesses()
Total number of guesses
=head2 evaluated()
Total number of combinations checked to issue result
=head2 number_of_rules ()
Returns the number of rules in the algorithm
=head2 rules()
Returns the rules (combinations, blacks, whites played so far) y a
reference to array
=head2 matches( $string )
Returns a hash with the number of matches, and whether it matches
every rule with the number of blacks and whites it obtains with each
of them
=head2 fitness( $individual )
Computes fitness summing the number of correct black and whites plus
the number of rules the combination meets times the length
=head2 fitness_orig( $individual )
Fitness proposed in the Applied and Soft Computing paper, difference
between the number of blacks/whites obtained by rules against the
secret code and by the combination against the combination in the
rule.
=head1 SEE ALSO
Other solvers: L<Algorithm::MasterMind::Sequential> and
L<Algorithm::MasterMind::Random>. Don't work as well, really.
=head1 AUTHOR
JJ Merelo C<< <jj@merelo.net> >>
( run in 1.258 second using v1.01-cache-2.11-cpan-5b529ec07f3 )