idrave / FOND-ASP

5 stars 1 forks source link

fondplus_show.lp vs fondplus.lp #9

Closed ssardina closed 3 years ago

ssardina commented 3 years ago

Hay dos planners que son casi iguales:

la diferencais son minimas y related to #show:

 diff fcfond/planner_clingo/fondplus_show.lp fcfond/planner_clingo/fondplus.lp 
8a9
> 
10d10
< #program show.
13d12
< #program solve.
62,70c61
< :-  not terminating(S), reach(S).
< 
< #script(python).
< def main(prg):
<     prg.ground([('base', []),('solve', [])])
<     prg.solve()
<     prg.ground([('show', [])])
<     prg.solve()
< #end.
\ No newline at end of file
---
> :-  not terminating(S), reach(S).
\ No newline at end of file

Lo que no entiendo es que ambos solvers dejan el mismo stdout.txt. Por ejemplo cuando solucionan fcfond/domains/clingo/clear.lp dejan ambos estos:

❯ cat output/stdout.txt 
clear
clingo version 5.4.0
Reading from fcfond/planner_clingo/fondplus_show.lp ...
Solving...
Answer: 1

Solving...
Answer: 1
policy("<n-gr0()>","pick-above-x()") policy("<n-gr0(),holding()>","putaway()")
SATISFIABLE

Models       : 2+
Calls        : 2
Time         : 0.018s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)
CPU Time     : 0.018s

la version _show.lp tambien incluye un Python procedure main en el Clingo code; donde lo usamos?

Se puede factoriazar todo el codigo que es comun a ambos en un archivo especial y que ambos "importen" ese codigo?

ssardina commented 3 years ago

Ahh en otro post habias comentado:

@ssardina Se estaba usando un path antiguo por ahí que causaba este bug. Ahora ya debería de funcionar bien. El fondplus_show es como el fondplus, solo que hace grounding de las directivas show aparte del policy search, lo cual a veces parece hacerlo más eficiente.

ahh interesante.... se puede modularizar el codigo en común?

De hecho ahora veo que hay 3 porque esta tambien fondplus_noshow.lp

Al menos que sea imposible, deberiamos factorizar esto no?

ssardina commented 3 years ago

@idrave , creo que ahi hice factoring out del codigo CORE que comparten varias variantes, show, no_show, etc..

Incluso puse uno donde se muestra como mostrar la policy como rules. Mira:

$ python -m fcfond.main -planner fcfond/planner_clingo/fondplus_show_pretty.lp -pddl fcfond/domains/pddl/fond-sat/doors/domain.pddl fcfond/domains/pddl/fond-sat/doors/p01.pddl

$ cat output/stdout.txt                                           
p01
clingo version 5.4.0
Reading from ...planner_clingo/fondplus_show_pretty.lp ...
Solving...
Reporting on a model.....
=======================================
Solution 1 - Size: 6 - Cost: [] - Optimal? False
<player-at(l1),initial-location(l1),open(d2),open(d3),door-in(d2,l2),door-in(d3,l3),door-out(d2,l1),door-out(d3,l2),final-location(l3)> 
        ===> pick-key(l1)
<player-at(l1),initial-location(l1),open(d2),open(d3),door-in(d2,l2),door-in(d3,l3),door-out(d2,l1),door-out(d3,l2),final-location(l3),hold-key()> 
        ===> move-forward-door-open(l1,l2,d2,d3)
<player-at(l2),initial-location(l1),open(d2),open(d3),door-in(d2,l2),door-in(d3,l3),door-out(d2,l1),door-out(d3,l2),final-location(l3),hold-key()> 
        ===> move-forward-last-door-open(l2,l3,d3)
<player-at(l2),initial-location(l1),open(d2),door-in(d2,l2),door-in(d3,l3),door-out(d2,l1),door-out(d3,l2),final-location(l3),hold-key(),closed(d3)> 
        ===> move-forward-last-door-closed(l2,l3,d3)
<player-at(l2),initial-location(l1),open(d3),door-in(d2,l2),door-in(d3,l3),door-out(d2,l1),door-out(d3,l2),final-location(l3),hold-key(),closed(d2)> 
        ===> move-forward-last-door-open(l2,l3,d3)
<player-at(l2),initial-location(l1),door-in(d2,l2),door-in(d3,l3),door-out(d2,l1),door-out(d3,l2),final-location(l3),hold-key(),closed(d2),closed(d3)> 
        ===> move-forward-last-door-closed(l2,l3,d3)
=======================================

Esto es solo para "mostrar" como se podria hacer con codigo Python embedded en el encoding, es pretty powerful.

Lo mas importante que el FOND+ solver en si ahora esta solo una vez en el archivo fondplus_core.lp

No quise ponerlo en master sin que antes vos lo vieras, asi que esta en un branch. Ahora hago pull request...

idrave commented 3 years ago

Hola Sebastián, ya de vuelta con esto. Ví el refactoring, muy bueno! Y queda muy bien el output pretty, quizás podríamos dejarlo como el encoding que se llama por defecto y añadir opciones para usar el "no show" o el fondplus.lp. Me encargaré de hacer estos cambios. Aprovecharé de hacer un poco de refactoring de parte del código de python.