Algorithm-Search

 view release on metacpan or  search on metacpan

t/n15.t  view on Meta::CPAN


  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
#          ],
#          [

t/n15.t  view on Meta::CPAN

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 )