1:- module(logicmoo_planner,[load_planner_api/0]).    2
    3
    4:- style_check(-singleton).    5
    6:- use_module(library(prolog_pack)).    7
    8:- if( \+ prolog_pack:current_pack(logicmoo_ec)).    9:- add_absolute_search_folder(pack,'../../').   10:- attach_packs.   11:- initialization(attach_packs).   12:- endif.   13
   14%:-  add_absolute_search_folder(ext,('../ext/')).
   15:-  add_absolute_search_folder(ext,library('../ext/')).   16%:-  add_absolute_search_folder(pack,library('../prolog/../..')).
   17
   18:- if( \+  user:file_search_path(pddl,_) ).   19
   20:-  add_absolute_search_folder(pddl,library('../test/pddl_tests/')),
   21    add_absolute_search_folder(pddl,library('../test/pddl_reader/')),
   22    add_absolute_search_folder(pddl,library('../test/uw-yale-pddl/strict-domains/')),
   23    add_absolute_search_folder(pddl,library('../test/uw-yale-pddl/domains/')),
   24    !.   25         
   26:- endif.   27
   28
   29:- module_transparent(export_transparent/1).   30export_transparent(P):-
   31  export(P),
   32  module_transparent(P).
   33
   34% [Required] Load the Logicmoo Library Utils
   35% :- ensure_loaded(library(logicmoo_hyhtn)).
   36% 
   37% load_planner_api:- ensure_loaded(library(rsasak_forward_wa_star_h_add)).
   38%:- initialization(load_planner, program).
   39load_planner_api.
   40
   41test_all:-test_all(7).
   42
   43test_all(N):- must_filematch_list(pddl('orig_pddl_parser/test/?*?/domain*.pddl'),RList),RList\=[],!,reverse(RList,List),
   44  forall(member(E,List),once(test_domain(E,N))).
   45
   46test_all(N):- 
   47  must_filematch(pddl('orig_pddl_parser/test/?*?/domain*.pddl'),_),!,
   48  (forall(must_filematch(pddl('orig_pddl_parser/test/?*?/domain*.pddl'),E),
   49                                                 once(test_domain(E,N)))).
   50
   51:- thread_local(t_l:loading_files/0).   52
   53test_domain(DP):- t_l:loading_files,!,must(test_domain(DP)).
   54test_domain(DP):- test_domain(DP,12).
   55
   56min_sas(A,B,A):-A =< B,!.
   57min_sas(_,A,A).
   58
   59test_domain(DP,Num):- \+ atom(DP),forall((filematch_smart(DP,FOUND),exists_file(FOUND)),test_domain(FOUND,Num)),!.
   60test_domain(DP,Num):- \+ exists_file(DP),!, forall(must_filematch(DP,MATCH),(exists_file(MATCH),test_domain(MATCH,Num))).
   61test_domain(DP,Num):-
   62   format('~q.~n',[test_domain(DP)]),
   63  directory_file_path(D,_,DP),directory_files(D,RList),reverse(RList,ListR),
   64   sort(ListR,ListS),length(ListR,PosNum),min_sas(PosNum,Num,MinNum),length(List,MinNum),append(List,_,ListS),!,
   65   test_domain_num(DP,List,Num).
   66
   67test_domain_num(DP,List,Num):-
   68  directory_file_path(D,_,DP),
   69  forall(member(T,List),ignore((directory_file_path(D,T,TP),exists_file(TP),not(same_file(DP,TP)),
   70  planner_solve_files(DP,TP)))).
   71
   72
   73                                            
   74
   75% planner_solve_files(+DomainFile, +ProblemFile)
   76%
   77%   Reads files and set timelimit for planner
   78%
   79planner_solve_files(DomainFile, ProblemFile):- 
   80 forall(must(must_filematch(DomainFile,DomainFile0)),
   81   forall(must(must_filematch(ProblemFile,ProblemFile0)),
   82     (time(show_call(planner_solve_abs_file(DomainFile0, ProblemFile0)))))),!.
   83
   84
   85% Reads files and set timelimit for planner
   86planner_solve_abs_file(DomainFile, ProblemFile):- 
   87       update_changed_files,
   88       directory_file_path(_,File,ProblemFile),
   89       wdmsg(planner_solve_files(DomainFile, ProblemFile)),
   90       planner_solve_abs_file(DomainFile, ProblemFile, File),!.
   91
   92planner_solve_abs_file(DomainFile, ProblemFile, File):- slow_on(File),!,wdmsg(slow_on(DomainFile, ProblemFile)).
   93planner_solve_abs_file(DomainFile, ProblemFile, File):-
   94                nop(time((test_solve_files(DomainFile, ProblemFile)))),
   95                nop(time(show_call(solve_files_w_ocl(DomainFile, ProblemFile)))),
   96                call(time(show_call(solve_files_w_lps(DomainFile, ProblemFile)))),
   97                !.
   98
   99test_solve_files(D,P):- call(call,solve_files,D,P).
  100
  101test_dir_sas(DirIn):-forall(must_filematch(DirIn,DirInM),test_dir_m(DirInM)).
  102test_dir_m(DIR):-
  103  working_directory(WAS,WAS),
  104     call_cleanup(( 
  105        cd(DIR),
  106        wdmsg(test_dir_files_sas(DIR)),
  107	%write('Testing ':DIR), nl,
  108	test_dir_files_sas(DIR)),
  109        cd(WAS)).
  110
  111test_dir_files_sas(PDDLDir,D,P):- filematch_smart(PDDLDir,Dir), 
  112        directory_file_path(Dir,D,DF),
  113        directory_file_path(Dir,P,PF),
  114        nop((test_parse_file(DF),test_parse_file(PF))),
  115        planner_solve_files(DF,PF),!.
  116
  117
  118test_dir_files_sas(Dir):-   
  119	test_dir_files_sas(Dir,'p01-domain.pddl','p01.pddl'),
  120	test_dir_files_sas(Dir,'p02-domain.pddl','p02.pddl'),
  121	test_dir_files_sas(Dir,'p03-domain.pddl','p03.pddl'),
  122	test_dir_files_sas(Dir,'p04-domain.pddl','p04.pddl'),
  123	test_dir_files_sas(Dir,'p05-domain.pddl','p05.pddl'),
  124	test_dir_files_sas(Dir,'p06-domain.pddl','p06.pddl'),
  125	test_dir_files_sas(Dir,'p07-domain.pddl','p07.pddl'),
  126	test_dir_files_sas(Dir,'p08-domain.pddl','p08.pddl'),
  127	test_dir_files_sas(Dir,'p09-domain.pddl','p09.pddl'),
  128	test_dir_files_sas(Dir,'p10-domain.pddl','p10.pddl'),
  129	test_dir_files_sas(Dir,'p11-domain.pddl','p11.pddl'),
  130	test_dir_files_sas(Dir,'p12-domain.pddl','p12.pddl'),
  131	test_dir_files_sas(Dir,'p13-domain.pddl','p13.pddl'),
  132	test_dir_files_sas(Dir,'p14-domain.pddl','p14.pddl'),
  133	test_dir_files_sas(Dir,'p15-domain.pddl','p15.pddl'),
  134	test_dir_files_sas(Dir,'p16-domain.pddl','p16.pddl'),
  135	test_dir_files_sas(Dir,'p17-domain.pddl','p17.pddl'),
  136	test_dir_files_sas(Dir,'p18-domain.pddl','p18.pddl'),
  137	test_dir_files_sas(Dir,'p19-domain.pddl','p19.pddl'),
  138	test_dir_files_sas(Dir,'p20-domain.pddl','p20.pddl'),
  139	test_dir_files_sas(Dir,'p21-domain.pddl','p21.pddl'),
  140	test_dir_files_sas(Dir,'p22-domain.pddl','p22.pddl'),
  141	test_dir_files_sas(Dir,'p23-domain.pddl','p23.pddl'),
  142	test_dir_files_sas(Dir,'p24-domain.pddl','p24.pddl'),
  143	test_dir_files_sas(Dir,'p25-domain.pddl','p25.pddl'),
  144	test_dir_files_sas(Dir,'p26-domain.pddl','p26.pddl'),
  145	test_dir_files_sas(Dir,'p27-domain.pddl','p27.pddl'),
  146	test_dir_files_sas(Dir,'p28-domain.pddl','p28.pddl'),
  147	test_dir_files_sas(Dir,'p29-domain.pddl','p29.pddl'),
  148	test_dir_files_sas(Dir,'p30-domain.pddl','p30.pddl').
  149
  150twhy
  151  :- show_call(record_time(forall(between(1,1000000,_),forall(get_action_bb(_),true)),_Time1)),
  152   show_call(record_time(forall(between(1,1000000,_),forall(actn(_,_),true)),_Time2)).
  153
  154slow_on('blocks-07-0.pddl').
  155slow_on('blocks-08-0.pddl').
  156slow_on('blocks-09-0.pddl').
  157slow_on('hanoi7.pddl').
  158slow_on('hanoi8.pddl').
  159
  160test_blocks:- time(notrace(test_blocks0)).
  161
  162test_blocks0:- planner_solve_files(pddl('orig_pddl_parser/test/blocks/domain-blocks.pddl'), 
  163   pddl('orig_pddl_parser/test/blocks/blocks-03-0.pddl')), fail.
  164test_blocks0:- fail, must_filematch_list(pddl('orig_pddl_parser/test/blocks/domain*.pddl'),RList),reverse(RList,List),
  165        forall(member(E,List),once(test_domain(E))),fail.
  166test_blocks0:- must_filematch_list(pddl('orig_pddl_parser/test/?*?/domain*.pddl'),RList),reverse(RList,List),
  167        forall(member(E,List),once(test_domain(E))),fail.
  168test_blocks0:- !.
  169
  170:- dynamic(pddl_test_unit/1).  171:- multifile(pddl_test_unit/1).  172:- discontiguous(pddl_test_unit/1).  173pddl_test_unit(blocks) :- test_blocks.
  174
  175:- fixup_exports.  176
  177pddl_test_unit(test_sas):- 
  178      test_dir_sas('ipc2008-no-cybersec/seq-sat/elevators-strips/'),!, % NO FIRST ANSWER
  179      !.
  180
  181pddl_test_unit(test_sas_sanity):- 
  182      test_dir_sas('ipc2008-no-cybersec/seq-opt/openstacks-strips/'), %PASSES BUT RUNS SLOW
  183       test_dir_sas('ipc2008-no-cybersec/seq-opt/transport-strips/'), %PASSES BUT RUNS
  184      test_dir_sas('ipc2008-no-cybersec/netben-opt/elevators-strips/'), % FAIL ALL
  185      !.
  186
  187
  188pddl_test_unit(test_rest):-	
  189	test_dir_sas('ipc2008-no-cybersec/seq-opt/parcprinter-strips/'),
  190	test_dir_sas('ipc2008-no-cybersec/seq-opt/pegsol-strips/'),
  191	test_dir_sas('ipc2008-no-cybersec/seq-opt/scanalyzer-strips/'),
  192	test_dir_sas('ipc2008-no-cybersec/seq-opt/sokoban-strips/'),  % NO FIRST ANSWER
  193       
  194	test_dir_sas('ipc2008-no-cybersec/seq-opt/woodworking-strips/'),
  195	
  196        
  197        expand_file_name('ipc2008-no-cybersec/?*?/*/',O),
  198        forall(member(E,O),test_dir_sas(E)).
  199
  200
  201pddl_test_unit(frolog) :- test_dir_files_sas('frolog','p02-domain.pddl','p02.pddl'),
  202    test_dir_files_sas('frolog','tPddlAgent01-domain.pddl','tPddlAgent01.pddl'),
  203    !. % test_dir_files_sas('frolog','tPddlAgent02-domain.pddl','tPddlAgent02.pddl').
  204
  205pddl_test_unit(mystery) :- planner_solve_files(pddl('benchmarks/mystery/domain.pddl'),pddl('benchmarks/mystery/prob01.pddl')).
  206pddl_test_unit(driverlog) :- test_domain(pddl('benchmarks/driverlog/domain.pddl'),4).
  207pddl_test_unit(woac) :- planner_solve_files(pddl('hsp2_1_0_pddl/parcprinter-strips/p01-domain-woac.pddl'),
  208               pddl('hsp2_1_0_pddl/parcprinter-strips/p01-woac.pddl')).
  209
  210pddl_test_unit(chameleonWorld) :- test_domain(pddl('../domains_ocl/chameleonWorld/domain*')).
  211
  212/*
  213:- if(current_predicate(pce_show_profile/0)).
  214:- pce_show_profile.
  215:- endif.
  216*/
  217
  218% :- twhy.
  219
  220% BAD 
  221pddl_test_unit(elearning) :- test_domain(pddl('elearning/domain.pddl')).
  222
  223pddl_test_unit(sat11) :- planner_solve_files(pddl('benchmarks/nomystery-sat11-strips/domain.pddl'),pddl('benchmarks/nomystery-sat11-strips/p01.pddl')).
  224pddl_test_unit(sat11_2) :- test_domain(pddl('benchmarks/nomystery-sat11-strips/domain.pddl')).
  225pddl_test_unit(toasterWorldv2) :- test_domain(pddl('../domains_ocl/toasterWorldv2/domain*')).
  226pddl_test_unit(rover) :- forall(must_filematch(pddl('rover/?*?/?*domain*.*'),E),once(test_domain(E))).
  227pddl_test_unit(hsp_pddl) :- forall(must_filematch(pddl('hsp-planners-master/?*?/pddl/?*?/?*domain*.*'),E),once(test_domain(E))).
  228pddl_test_unit(hsp_examples) :- forall(must_filematch(pddl('hsp-planners-master/?*?/examples/?*?/?*domain*.*'),E),once(test_domain(E))).
  229pddl_test_unit(primaryobjects_strips) :- forall(must_filematch(pddl('primaryobjects_strips/?*?/?*domain*.*'),E),once(test_domain(E))).
  230pddl_test_unit(monkey) :- planner_solve_files(pddl('hakank-pddl/monkey-domain.pddl'),pddl('hakank-pddl/monkey-prob01.pddl')).
  231
  232:- fixup_exports.  233
  234:-thread_local(t_l:hyhtn_solve/1).  235% t_l:other_planner(hyhtn_solve).
  236
  237
  238:- flag(time_used,_,0).  239:- flag(time_used_other,_,0).  240
  241:- if(gethostname(c3po);gethostname(ubuntu);gethostname(titan)).  242% :- debug,(must(test_blocks)).
  243% :- test_all(5). % should be 7
  244% :- test_all(7).
  245:- endif.  246%:- show_call(flag(time_used_other,W,W)).
  247%:- show_call(flag(time_used,W,W)).
  248
  249
  250
  251
  252:- fixup_exports.