pddl4j icon indicating copy to clipboard operation
pddl4j copied to clipboard

HDDL - initial task network returns a list of null

Open o-fir opened this issue 1 year ago • 1 comments

Calling problem.getInitialTaskNetwork().getTasks() on Towers benchmark (IPC) returns a list with a null task.

Also, if original HTN was simply (task0 (shiftTower t1 t2 t3)) and I introduce an additional task (task1 (shiftTower t1 t2 t3)), getInitialTaskNetwork().getTasks() returns [null, null].

Domain file: `(define (domain towers)

(:requirements :negative-preconditions :hierarchy :typing :method-preconditions )

(:types RING - OBJ TOWER - OBJ)

(:predicates (on ?r - RING ?o - OBJ) (goal_on ?r - RING ?o - OBJ) (towerTop ?o - OBJ ?t - TOWER) (smallerThan ?r - RING ?o - OBJ)) (:task shiftTower :parameters (?t1 - TOWER ?t2 - TOWER ?t3 - TOWER)) (:task selectDirection :parameters (?r - RING ?t1 - TOWER ?t2 - TOWER ?t3 - TOWER)) (:task rotateTower :parameters (?t1 - TOWER ?T2 - TOWER ?t3 - TOWER)) (:task exchange :parameters (?t1 - TOWER ?t2 - TOWER ?t3 - TOWER)) (:task move_abstract :parameters (?t1 - TOWER ?t2 - TOWER))

(:method m-shiftTower ; shift tower from ?t1 to ?t3 using ?t2 :parameters (?r - RING ?t1 - TOWER ?t2 - TOWER ?t3 - TOWER) :task (shiftTower ?t1 ?t2 ?t3) :precondition (and (towerTop ?r ?t1)) :ordered-tasks (and (selectDirection ?r ?t1 ?t2 ?t3)))

(:method selectedDirection :parameters (?r - RING ?t1 - TOWER ?t2 - TOWER ?t3 - TOWER) :task (selectDirection ?r ?t1 ?t2 ?t3) :precondition (on ?r ?t1) :ordered-tasks (and (rotateTower ?t1 ?t3 ?t2)))

(:method m-selectDirection :parameters (?r - RING ?r1 - RING ?t1 - TOWER ?t2 - TOWER ?t3 - TOWER) :task (selectDirection ?r ?t1 ?t2 ?t3) :precondition (on ?r ?r1) :ordered-tasks (and (selectDirection ?r1 ?t1 ?t3 ?t2)))

(:method m-rotateTower :parameters (?t1 - TOWER ?t2 - TOWER ?t3 - TOWER) :task (rotateTower ?t1 ?t2 ?t3) :ordered-tasks (and (move_abstract ?t1 ?t2) (exchange ?t1 ?t2 ?t3)))

(:method exchangeClear :parameters (?t1 - TOWER ?t2 - TOWER ?t3 - TOWER) :task (exchange ?t1 ?t2 ?t3) :precondition (and (towerTop ?t1 ?t1) (towerTop ?t3 ?t3)) :ordered-subtasks (and) )

(:method exchangeLR :parameters (?r1 - RING ?o3 - OBJ ?t1 - TOWER ?t2 - TOWER ?t3 - TOWER) :task (exchange ?t1 ?t2 ?t3) :precondition (and (towerTop ?r1 ?t1) (towerTop ?o3 ?t3) (smallerThan ?r1 ?o3)) :ordered-tasks (and (move_abstract ?t1 ?t3) (rotateTower ?t2 ?t3 ?t1)))

(:method exchangeRL :parameters (?o1 - OBJ ?r3 - RING ?t1 - TOWER ?t2 - TOWER ?t3 - TOWER) :task (exchange ?t1 ?t2 ?t3) :precondition (and (towerTop ?o1 ?t1) (towerTop ?r3 ?t3) (smallerThan ?r3 ?o1)) :ordered-tasks (and (move_abstract ?t3 ?t1) (rotateTower ?t2 ?t3 ?t1)))

(:method newMethod21 :parameters (?r - RING ?o1 - OBJ ?t1 - TOWER ?o2 - OBJ ?t2 - TOWER) :task (move_abstract ?t1 ?t2) :ordered-subtasks (move ?r ?o1 ?t1 ?o2 ?t2))

(:action move :parameters (?r - RING ?o1 - OBJ ?t1 - TOWER ?o2 - OBJ ?t2 - TOWER) :precondition (and (towerTop ?r ?t1) (towerTop ?o2 ?t2) (on ?r ?o1) (smallerThan ?r ?o2)) :effect (and (not (on ?r ?o1)) (on ?r ?o2) (not (towerTop ?r ?t1)) (towerTop ?o1 ?t1) (not (towerTop ?o2 ?t2)) (towerTop ?r ?t2))) ) `

Problem file: `(define (problem tower_problem_1)

(:domain towers)

(:objects t1 t2 t3 - TOWER r1 - RING) (:htn :parameters () :ordered-tasks (and (task0 (shiftTower t1 t2 t3)) ) ) (:init (smallerThan r1 t1) (smallerThan r1 t2) (smallerThan r1 t3) (on r1 t1) (towerTop r1 t1) (towerTop t2 t2) (towerTop t3 t3) (goal_on r1 t3))

(:goal (and (on r1 t3) )) ) `

o-fir avatar Nov 30 '22 13:11 o-fir