panda-planner-dev / pandaPIparser

The parser of the pandaPI planning system
BSD 3-Clause "New" or "Revised" License
13 stars 10 forks source link

Domain and problem that cause parsing explosion #29

Open rpgoldman opened 10 months ago

rpgoldman commented 10 months ago

I thought this might be of interest, because it's a case where a 440 line domain file and a 131-line problem file combine to yield a parsed output file that is over 14 million lines and 285 megabytes. What's interesting is that this domain does not have conditional effects and that I ran the parser with the -k option.

The problem is in the following method for (achieve-goals) which checks that all goal facts (which are in the problem's initial state) have been achieved, and which involves both disjunction and quantification:

 (:method check-for-all-goals-done
   :parameters ()
   :task (achieve-goals)
  :precondition
  (and
    (forall (?w - waypoint)
      (imply
        (goal_communicated_soil_data ?w)
        (communicated_soil_data ?w)))
    (forall (?w - waypoint)
      (imply
        (goal_communicated_rock_data ?w)
        (communicated_rock_data ?w)))
    (forall (?m - mode ?o - objective)
      (imply
        (goal_communicated_image_data ?o ?m)
        (communicated_image_data ?o ?m))))
  :ordered-subtasks (and))

This method terminates a chain of recursive invocations of (achieve-goals).

If I delete this method (which makes the problem unsolvable), the parser output file is reduced to approximately 2700 lines.

There are only 10 facts of the goal_ predicates in the initial state, and they are static, so this explosion is not necessary.

Anyway, I thought this might be useful to you.