Algorithm-MasterMind
view release on metacpan or search on metacpan
lib/Algorithm/MasterMind/Canonical_GA.pm view on Meta::CPAN
my $length = $self->{'_length'};
my $pop = $self->{'_pop'};
my $ga = $self->{'_ga'};
map( $_->evaluate( $self->{'_fitness'}), @$pop );
my @ranked_pop = sort { $b->{_fitness} <=> $a->{_fitness}; } @$pop;
if ( $ranked_pop[0]->{'_matches'} == $rules ) { #Already found!
return $self->{'_last'} = $ranked_pop[0]->{'_str'};
} else {
my @pop_by_matches;
my $best;
do {
$ga->apply( $pop );
print "Población ", scalar @$pop, "\n";
map( $_->{'_matches'} = $_->{'_matches'}?$_->{'_matches'}:-1, @$pop ); #To avoid warnings
@pop_by_matches = sort { $b->{'_matches'} <=> $a->{'_matches'} } @$pop;
$best = $pop_by_matches[0];
} while ( $best->{'_matches'} < $rules );
return $self->{'_last'} = $best->{'_str'};
}
}
"some blacks, 0 white"; # Magic true value required at end of module
__END__
=head1 NAME
lib/Algorithm/MasterMind/EDA.pm view on Meta::CPAN
}
$self->{'_pop'}= \@pop;
return $self->{'_last'} = $string;
}
sub issue_next {
my $self = shift;
my $rules = $self->number_of_rules();
my ($match, $best);
my $pop = $self->{'_pop'};
my $eda = $self->{'_eda'};
map( $_->evaluate( $self->{'_fitness'}), @$pop );
my @ranked_pop = sort { $b->{_fitness} <=> $a->{_fitness}; } @$pop;
if ( $ranked_pop[0]->{'_matches'} == $rules ) { #Already found!
return $self->{'_last'} = $ranked_pop[0]->{'_str'};
} else {
my $generations_passed = 0;
my @pop_by_matches;
do {
$eda->apply( $pop );
map( $_->{'_matches'} = $_->{'_matches'}?$_->{'_matches'}:-1, @$pop ); #To avoid warnings
@pop_by_matches = sort { $b->{'_matches'} <=> $a->{'_matches'} } @$pop;
$generations_passed ++;
$best = $pop_by_matches[0];
if ($generations_passed == 15 ) {
$eda->reset( $pop );
$generations_passed = 0;
}
} while ( $best->{'_matches'} < $rules );
return $self->{'_last'} = $best->{'_str'};
}
}
"Many blacks, 0 white"; # Magic true value required at end of module
__END__
=head1 NAME
lib/Algorithm/MasterMind/Evolutionary.pm view on Meta::CPAN
my $length = $self->{'_length'};
my $pop = $self->{'_pop'};
my $ga = $self->{'_ga'};
map( $_->evaluate( $self->{'_fitness'}), @$pop );
my @ranked_pop = sort { $b->{_fitness} <=> $a->{_fitness}; } @$pop;
if ( $ranked_pop[0]->{'_matches'} == $rules ) { #Already found!
return $self->{'_last'} = $ranked_pop[0]->{'_str'};
} else {
my @pop_by_matches;
my $best;
do {
$ga->apply( $pop );
print "Población ", scalar @$pop, "\n";
map( $_->{'_matches'} = $_->{'_matches'}?$_->{'_matches'}:-1, @$pop ); #To avoid warnings
@pop_by_matches = sort { $b->{'_matches'} <=> $a->{'_matches'} } @$pop;
$best = $pop_by_matches[0];
} while ( $best->{'_matches'} < $rules );
return $self->{'_last'} = $best->{'_str'};
}
}
"some blacks, 0 white"; # Magic true value required at end of module
__END__
=head1 NAME
lib/Algorithm/MasterMind/Evolutionary_MO.pm view on Meta::CPAN
my $length = $self->{'_length'};
my $pop = $self->{'_pop'};
my $moga = $self->{'_moga'};
map( $_->evaluate( $self->{'_fitness'}), @$pop );
my @ranked_pop = sort { $a->{_fitness}[0] <=> $b->{_fitness}[0]; } @$pop;
if ( $ranked_pop[0]->{'_matches'} == $rules ) { #Already found!
return $self->{'_last'} = $ranked_pop[0]->{'_str'};
} else {
my @pop_by_matches;
my $best;
do {
$moga->apply( $pop );
# print "Población ", scalar @$pop, "\n";
map( $_->{'_matches'} = $_->{'_matches'}?$_->{'_matches'}:-1, @$pop ); #To avoid warnings
@pop_by_matches = sort { $b->{'_matches'} <=> $a->{'_matches'} } @$pop;
$best = $pop_by_matches[0];
} while ( $best->{'_matches'} < $rules );
return $self->{'_last'} = $best->{'_str'};
}
}
"some blacks, 0 white"; # Magic true value required at end of module
__END__
=head1 NAME
lib/Algorithm/MasterMind/MOGA.pm view on Meta::CPAN
}
$self->{'_pop'}= \@pop;
return $self->{'_last'} = $string;
}
sub issue_next {
my $self = shift;
my $rules = $self->number_of_rules();
my ($match, $best);
my $pop = $self->{'_pop'};
my $eda = $self->{'_eda'};
map( $_->evaluate( $self->{'_fitness'}), @$pop );
my @ranked_pop = sort { $b->{_fitness} <=> $a->{_fitness}; } @$pop;
if ( $ranked_pop[0]->{'_matches'} == $rules ) { #Already found!
return $self->{'_last'} = $ranked_pop[0]->{'_str'};
} else {
my $generations_passed = 0;
my @pop_by_matches;
do {
$eda->apply( $pop );
map( $_->{'_matches'} = $_->{'_matches'}?$_->{'_matches'}:-1, @$pop ); #To avoid warnings
@pop_by_matches = sort { $b->{'_matches'} <=> $a->{'_matches'} } @$pop;
$generations_passed ++;
$best = $pop_by_matches[0];
if ($generations_passed == 15 ) {
$eda->reset( $pop );
$generations_passed = 0;
}
} while ( $best->{'_matches'} < $rules );
return $self->{'_last'} = $best->{'_str'};
}
}
"Many blacks, 0 white"; # Magic true value required at end of module
__END__
=head1 NAME
lib/Algorithm/MasterMind/Partition/Most.pm view on Meta::CPAN
our $VERSION = sprintf "%d.%03d", q$Revision: 1.1 $ =~ /(\d+)\.(\d+)/g;
use base 'Algorithm::MasterMind::Partition';
use Algorithm::MasterMind qw( partitions );
sub compute_next_string {
my $self = shift;
my $partitions = shift || croak "No partitions";
# Obtain best
my %min_c;
my $max = 0;
for my $c ( keys %$partitions ) {
$min_c{$c} = keys %{$partitions->{$c}};
if ( $min_c{$c} > $max ) {
$max = $min_c{$c};
}
}
# Find all partitions with that max
lib/Algorithm/MasterMind/Partition_Worst.pm view on Meta::CPAN
}
}
#Eliminate null
@{$self->{'_consistent'}} = grep( $_, @{$self->{'_consistent'}} );
if ( @{$self->{'_consistent'}} > 1 ) {
# Compute partitions
my $partitions = partitions( @{$self->{'_consistent'}} );
# Obtain best
my %min_c;
my $min_max = keys %$partitions ;
for my $c ( keys %$partitions ) {
my $this_max = 0;
for my $p ( keys %{$partitions->{$c}} ) {
if ( $partitions->{$c}{$p} > $this_max ) {
$this_max = $partitions->{$c}{$p};
}
}
$min_c{ $c } = $this_max;
( run in 0.897 second using v1.01-cache-2.11-cpan-4e96b696675 )