Algorithm-Search
view release on metacpan or search on metacpan
if (!($puzzle->distance_to_final_state)) {
# print "s1 in final\n";
}
else {
# print "s1 not in final\n";
}
$puzzle->set_position(
'1 2 3 4
5 6 7 8
9 10 11 12
13 14 0 15');
# print "pvalue is ".$puzzle->value."\n";
if (!($puzzle->distance_to_final_state)) {
# print "s2 in final\n";
}
else {
# print "s2 not in final\n";
}
my $fifteen_search = new Algorithm::Search();
$fifteen_search->search({search_this=>$puzzle,
solutions_to_find=>1,
search_type => 'bfs',
});
# print "Solution found :\n";
is_deeply ($fifteen_search->path,
[
[
3,
3
]
], 'one move problem');
# $puzzle->set_position(
#'10 12 7 3
#5 13 8 4
#9 11 2 0
#15 14 1 6');
#
# my ($ic,undef) = $puzzle->distance_to_final_state;
## print STDERR "pvalue is ".$puzzle->value."\n";
# $fifteen_search->search({search_this=>$puzzle,
# solutions_to_find=>1,
# search_type => 'cost',
# initial_cost => $ic,
# do_not_repeat_values => 1,
## stop_search => sub {
## my $self = shift;
## my $steps = shift;
## if ($steps % 5000 == 0) {
## print STDERR "steps is $steps and self is ".$self->value."\n";
## }
## return 0;
## },
# max_steps => 200000
# });
# print "NSolution found :\n";
## use Data::Dumper;
## print STDERR Dumper($fifteen_search->path)."\n";
# is_deeply($fifteen_search->path,
# [
# [
# 2,
# 2
# ],
# [
# 3,
# 2
# ],
# [
# 3,
# 3
# ],
# [
# 2,
# 3
# ],
# [
# 1,
# 3
# ],
# [
# 1,
# 2
# ],
# [
# 0,
# 2
# ],
# [
# 0,
# 1
# ],
# [
# 1,
# 1
# ],
# [
# 2,
# 1
# ],
# [
# 2,
# 2
# ],
# [
# 3,
# 2
# ],
# [
# 3,
# 3
# ],
# [
# 2,
# 3
# ],
# [
5 0 6 8
9 11 2 12
13 7 3 15');
# print "pvalue is ".$puzzle->value."\n";
if (!($puzzle->distance_to_final_state)) {
# print "s2 in final\n";
}
else {
# print "s2 not in final\n";
}
# $fifteen_search->search({search_this=>$puzzle,
# max_steps => 200000,
# solutions_to_find=>1,
# search_type => 'bfs',
# do_not_repeat_values => 1,
## stop_search => sub {
## my $self = shift;
## my $steps = shift;
## if ($steps % 5000 == 0) {
## print STDERR "steps is $steps and self is ".$self->value."\n";
## print STDERR " distance, commit ".join(" ", $self->distance_to_final_state)."\n";
## }
## return 0;
## },
# });
# is($fifteen_search->{steps}, 25211, 'number of steps');
$fifteen_search->search({search_this=>$puzzle,
max_steps => 20000,
solutions_to_find=>1,
search_type => 'bfs',
do_not_repeat_values => 1,
});
is($fifteen_search->{steps}, 20000, 'number of steps 2');
$fifteen_search->continue_search({additional_steps => 2000});
is($fifteen_search->{steps}, 22000, 'number of steps 3');
is($fifteen_search->{search_completed},0,'search not completed yet');
$fifteen_search->continue_search({additional_steps => 310});
is($fifteen_search->{steps}, 22310, 'number of steps 4');
is($fifteen_search->{search_completed},0,'search not completed ');
$fifteen_search->continue_search({additional_steps => 2});
is($fifteen_search->{steps}, 22312, 'number of steps 5');
$fifteen_search->continue_search({additional_steps =>2898});
is($fifteen_search->{steps}, 25210, 'number of steps 6');
is($fifteen_search->{search_completed},0,'search still not completed ');
$fifteen_search->continue_search({additional_steps =>2});
is($fifteen_search->{steps}, 25211, 'number of steps 7');
is($fifteen_search->{search_completed},1,'search completed ');
# use Data::Dumper;
# print STDERR Dumper($fifteen_search->path)."\n";
is_deeply ( $fifteen_search->path,
[
[
1,
2
],
[
2,
2
],
[
2,
1
],
[
1,
1
],
[
0,
1
],
[
0,
2
],
[
1,
2
],
[
1,
1
],
[
0,
1
],
[
0,
2
],
[
1,
2
],
[
2,
2
],
[
3,
2
],
[
3,
1
],
[
( run in 1.171 second using v1.01-cache-2.11-cpan-39bf76dae61 )