-
Notifications
You must be signed in to change notification settings - Fork 10
Description
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.