I need some help/guidance related to the Online PDDL planner available at http://solver.planning.domains/ and Planners from the KCL Planning group (mainly POPF). I tested a simple pick-and-drop example (moving objects from places) with both planning.domain and POPF planners (also MARVIN from KCL), and all planners are generating valid plans.
The planning.domain planner is generating plan as:
(move bot startloc loc1)
(pick bot ball loc1)
(move bot loc1 dropzone)
(drop bot ball dropzone)
But on the other hand, both POPF and MARVIN from the KCL Planning group results in the plan:
(move bot startloc dropzone)
(move bot dropzone loc1)
(pick bot ball loc1)
(move bot loc1 dropzone)
(drop bot ball dropzone)
The plan generated by POPF and MARVIN is still a logically valid plan but is not an optimal solution. The optimal solution is generated by online planning service at solver.planning.domains.
I need help to figure out why the POPF planner is planning additional move
action resulting in a detour to reach loc1
, i.e. item's location via dropZone
.
Also, I would like to know the planning strategy/planner used by the online planning services at http://solver.planning.domains/ to solve the problem.
Here I am attaching the domain and problem used:
domain.pddl
(define (domain drop)
(:requirements :strips :typing)
(:types
robot
location
item
)
(:predicates
(robotAt ?r - robot ?l - location)
(gripperEmpty ?r - robot)
(itemAt ?i - item ?l - location)
(itemPicked ?r - robot ?i - item)
)
;define actions here
(:action move
:parameters (?r - robot ?from ?to - location)
:precondition (and (robotAt ?r ?from))
:effect (and (robotAt ?r ?to)
(not (robotAt ?r ?from)))
)
(:action pick
:parameters (?r - robot ?item - item ?itemLocation - location)
:precondition (and (gripperEmpty ?r)
(robotAt ?r ?itemLocation)
(itemAt ?item ?itemLocation))
:effect (and (itemPicked ?r ?item)
(not (gripperEmpty ?r))
)
)
(:action drop
:parameters (?r - robot ?item - item ?dropLocation - location)
:precondition (and (itemPicked ?r ?item)
(robotAt ?r ?dropLocation) )
:effect (and (not (itemPicked ?r ?item))
(gripperEmpty ?r)
(itemAt ?item ?dropLocation))
)
)
problem.pddl
(define (problem single_drop) (:domain drop)
(:objects
bot - robot
startLoc - location
loc1 - location
dropZone - location
ball - item
)
(:init
(robotAt bot startLoc)
(gripperEmpty bot)
(itemAt ball loc1)
)
(:goal (and (itemAt ball dropZone)
))
)