planningpddl

Difference between PDDL Online Planner vs POPF Planner


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)
))

)


Solution

  • I believe that the online planner used is some version of Fast Downward. I think you can get some hints from the output log that you can see by clicking on the output link.

    POPF does not guarantee optimality. It is only a satisficing planner. That is, its generated plan is guaranteed to be sound, but not necessarily the best plan.

    POPF is a temporal-numeric planner, while Fast Downward is not. Internally it uses a slightly different heuristic called a Temporal Relaxed Planning Graph, which is a version of the MetricFF RPG, but has time-stamped layers and also additional temporal and numeric logic, and uses enforced hill-climbing. It also prunes out unhelpful actions more aggressively. Fast Downward uses a slightly different approach, with landmarks in addition to delete-relaxation and an Iterative-Width search.

    There could be various reasons why POPF is preferring to go through dropzone1 rather than loc1. It could be that it is something trivially simple and coincidental, such as the fact that "dropzone1" lexicographically comes before "loc1", so it is explored first in the search. It could be that the relaxed plan extraction is somehow (arbitrarily) choosing that path.

    POPF has some options to debug its search tree and generate a graphviz visualisation in dot format if I remember well. Since your problem is very small, you might be able to figure out what search space it is exploring and why it is not going down the optimal route.