Skip to content

Domain and problem that cause parsing explosion #29

@rpgoldman

Description

@rpgoldman

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions