idrave / FOND-ASP

5 stars 1 forks source link

Own variation of the planner? #5

Closed ssardina closed 3 years ago

ssardina commented 3 years ago

The readme says:

image

What does it mean "own variation" of the planner? Can we explain to the user what this means, and even give what an example would be of that?

In particular, are the specializations one such variations?

idrave commented 3 years ago

A variation of the planner could be any Clingo encoding, where we would expect it uses the state sample information to output atoms policy(State, Action). Then, the input to the encoding would be atoms:

state(S): S is a state
initialState(S): S is the initial state
goal(S): S is a goal state
action(A): A is an action
transition(S1, A, S2): S2 belongs to F(S1, A) (F being the transition function)
con_A(A, I): action A belongs to set of constraints A_I
con_B(A, I): action A belongs to set of constraints B_I

The specializations of the planner are examples of variations, and could be passed to the -planner option.

idrave commented 3 years ago

Added new section to the README explaining the requirements for variations of the Clingo encoding.

ssardina commented 3 years ago

ahh entiendo. OK no es una modificacion de el planner, sino la especificacion del problema de planning + fariness directamente y explicitamente en ASAP. O sea no desde un PDDL sino explicitamente como un sistema de transiciones, que es lo que usa el ASP planner.

Correcto?

ssardina commented 3 years ago

Ivan, genial, me gusto la seccion que agregaste al README, era necesaria.

Una pregunta, que tal el predicado id/2, no se necesita?

Hace pull que hize algunas mejoras pequeñas en el README (e.g., font, etc)

idrave commented 3 years ago

Sí puede ser una modificación del planner, solo que ponemos como especificación que debería tener dichos símbolos como expected inputs, pues es lo que recibirá el programa al traducir un PDDL y son los atoms que estamos usando para representar FOND+ problems. El predicado id/2 se usa solo para display final de la policy. El PDDL parser lo usa para asignar una descripción a los estados y acciones, que están representados con integer ids, y al encontrar un modelo se usan los id/2 para sacar un output más legible. Ej: policy("<n-gr0()>","pick-above-x()") policy("<n-gr0(),holding()>","putaway()") en vez de policy(0,0) policy(1,2) Para conseguir esto solo hace falta conservar una regla #show policy(State, Action): policy(IdS, IdA), id(state(State), IdS), id(action(Action), IdA), reach(IdS). %only for display purposes La lógica del programa no usa los id/2, pero sí añadiré algún comentario al README.

ssardina commented 3 years ago

mmm a ver dejame enterder bien esto:

Sí puede ser una modificación del planner, solo que ponemos como especificación que debería tener dichos símbolos como expected inputs, pues es lo que recibirá el programa al traducir un PDDL y son los atoms que estamos usando para representar FOND+ problems.

Claro, entonces el planner en si queda igual, lo que cambia es la forma en que especificas el problema. En vez de dar el PDDL, lo que das es la representacion en ASP format already; lo que el traductor generaria de un PDDL.

Pero el planner solver no lo tocas, queda igual. Correcto? Pregunto porque decis "Sí puede ser una modificación del planner" y el comando dice:

image

suguiriendo que uno puede dar su propio planner, cuando en realidad lo que da es el problema en ASP encoding en vez de en PDDL. Es correcto lo que digo?

Seria bueno decir como seria exactamente una llamada de esta forma, usando uno de los varios ejemplos que ya tenemos en el repo. Como seria la llamada?

Perfecto lo de id/2.

idrave commented 3 years ago

No no, el input [PLANNER] en el comando arriba puede ser un clingo encoding que exprese reglas para buscar una policy, ej: nuestro planer base, o los planners especializados para strong/strong cyclic FONDs. Lo que quiero decir en la sección es que si se quiere probar un encoding diferente del planner, se debería tomar en cuenta que estos átomos serán el input a recibir. Pero entiendo la confusión, porque esto al mismo tiempo expresa cómo alguien debería escribir un FOND+ domain en un clingo file para pasarselo al planner. De hecho, hay una opción "-clingo ..." a la que se le puede pasar un domain expresado en clingo directamente al planner Digamos que tenemos:

Quizás se puede expresar de una forma más clara. Avísame si aun tienes dudas.

ssardina commented 3 years ago

mm si es un poco confuso todo, pero lo vamos a arreglar juntos :-)

  1. Si [PLANNER] puede ser otro planner cualqueira entonces lo unico que ofrecemos es cierto API para encodear un PDDl problem? Vos decis que puede ser uno de nuestros especializados, pero yo veo que lo llamamos con la opcion --strongcyclic. Como seria el ejemplo para usar strong specialization por ejemplo? 2.Me podes dar ejemplos de todos los casos? O sea como uso mi sistema sobre una especificacion usando los atomos que decimos usando --clingo? Y como uso usando --planner

Tenemos que hacer bien claro las opciones porque por lo que veo para usar el especializado strong, usamos directamente --strong, y no --planner strong, o me equivoco?

Todo esto es facil, solo tenemos que homogenizarlo y ponerlo claro en el README. Si me das ejemplos concretos que pueda correr yo lo armo facil.

Gracias Ivan!

idrave commented 3 years ago

Exacto con --strong ya basta para llamar al specialized, pero también funcionaría usar --planner fcfond/planner_clingo/specialized/planner_strong.lp Que es el encoding para strong planning. Por otro lado, si no se especifica la opción --planner (ni --strong o --strongcyclic), se usa por defecto nuestro encoding general para resolver FOND+ problems. Por poner algunos ejemplos de las opciones:

Quizás una forma de distinguir mejor ambas cosas sería tener una sección donde se explique los input symbols así como lo tenemos ahora, pero sin mencionar que se puede pasar el planner, y esto comentarlo aparte. La idea de tener la opción --planner era más que nada poder probar cambios en el encoding cuando ibamos teniendo ideas, manteniendo cosas en files diferentes sobre los que se pudiera escoger por command line.

ssardina commented 3 years ago

Brillante Ivan, gracias por la explicación clara. Si entiendo ahora la idea atras de --planner.

Voy a ver hoy como dejar todo esto claro en el README, me diste todo el material.

Quizas tengas razon, quizas estaria bueno tener una seccion para el encoding mismo.

Hoy veo si lo empujo. Gracias!

ssardina commented 3 years ago

Hola @idrave . OK al fin pude ponerme con esto. Estoy mejorando el README y poniendo ejemplos concretos.

Mientras hacia eso encontre un par de "issues" pequeños, quizas porque no entiendo el sistema..

Ante todo quiero correr un ejemplo directamente. Entonces puse:

python -m fcfond.main -pddl fcfond/domains/pddl/fond-sat/blocksworld-ipc08/domain.pddl,fcfond/domains/pddl/fond-sat/blocksworld-ipc08/p01.pddl
Traceback (most recent call last):
  File "/usr/lib/python3.8/runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/home/ssardina/git/soft/planning/FOND/FOND-ASP.git/fcfond/main.py", line 70, in <module>
    main()
  File "/home/ssardina/git/soft/planning/FOND/FOND-ASP.git/fcfond/main.py", line 54, in main
    run_pddl(args.pddl, args.timeout, args.memout,
  File "/home/ssardina/git/soft/planning/FOND/FOND-ASP.git/fcfond/run.py", line 59, in run_pddl
    out_path = Path(output)
  File "/usr/lib/python3.8/pathlib.py", line 1038, in __new__
    self = cls._from_parts(args, init=False)
  File "/usr/lib/python3.8/pathlib.py", line 679, in _from_parts
    drv, root, parts = self._parse_args(args)
  File "/usr/lib/python3.8/pathlib.py", line 663, in _parse_args
    a = os.fspath(a)
TypeError: expected str, bytes or os.PathLike object, not NoneType

El problema es que run_pddl no tiene ningun output por defecto creo, que en el README no parece indicar que uno tenga que usar si o si -out. Lo arregle asi (hice push):

    out_path = Path(output) if output != None else Path(OUTPUT)

De todas formas, aun asi luego me da error:

python -m fcfond.main -pddl fcfond/domains/pddl/fond-sat/blocksworld-ipc08/domain.pddl,fcfond/domains/pddl/fond-sat/blocksworld-ipc08/p01.pddl 
['fcfond/domains/pddl/fond-sat/blocksworld-ipc08/domain.pddl,fcfond/domains/pddl/fond-sat/blocksworld-ipc08/p01.pddl']
Traceback (most recent call last):
  File "/usr/lib/python3.8/runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/home/ssardina/git/soft/planning/FOND/FOND-ASP.git/fcfond/main.py", line 70, in <module>
    main()
  File "/home/ssardina/git/soft/planning/FOND/FOND-ASP.git/fcfond/main.py", line 54, in main
    run_pddl(args.pddl, args.timeout, args.memout,
  File "/home/ssardina/git/soft/planning/FOND/FOND-ASP.git/fcfond/run.py", line 63, in run_pddl
    for domain, problem in pddl_files:
ValueError: too many values to unpack (expected 2)

claramente no puede hacer la linea

for domain, problem in pddl_files:

en run_pddl

La pregunta es: cual es el formato que esperas en -pddl? No es una lista de PDDL files?

ssardina commented 3 years ago

OK progrese bastante este issue. hice un refactoring del README importante y puse muchas cosas que charlamos aca.

Pero aun no me funcionan los comandos de ejemplo que quiero poner. Para cada caso quiero poner un ejemplo.

A ver @idrave si me ayudas aca; o hay un par de bugs dando vuelta, o mi laptop esta caprichosa! ;-)

Mira los issues #7 y #8 tambien..

Dame un ejemplo concreto de como usarlo con la opcion -pddl ;-)

idrave commented 3 years ago

Ví el update del README, genial! Sí habían un par de bugs pequeños por ahí. Cambié algunas cosas e hice pruebas y de momento me funcionan las diferentes combinaciones de opciones. Con la opción -pddl es como el ejemplo que añadiste al README, pero sin ,: $ python -m fcfond.main -pddl fcfond/domains/pddl/fond-sat/blocksworld-ipc08/domain.pddl fcfond/domains/pddl/fond-sat/blocksworld-ipc08/p01.pddl Si te da algún otro problema lo vemos.

ssardina commented 3 years ago

All good, I think all this has been resolved, bugs have been fixed, and everything is reflected in the README now!