├── examples ├── toy │ ├── .gitignore │ ├── ordering-problem.hpddl │ ├── ordering-problem2.hpddl │ ├── basic-problem.hpddl │ ├── basic-problem-ungrounded.hpddl │ ├── README.txt │ ├── ordering2.hpddl │ ├── ordering.hpddl │ └── basic.hpddl ├── .gitignore ├── towers │ ├── README.txt │ ├── problems │ │ ├── pfile_03.pddl │ │ ├── pfile_04.pddl │ │ ├── pfile_05.pddl │ │ ├── pfile_06.pddl │ │ ├── pfile_07.pddl │ │ ├── pfile_08.pddl │ │ ├── pfile_09.pddl │ │ ├── pfile_10.pddl │ │ ├── pfile_11.pddl │ │ ├── pfile_12.pddl │ │ ├── pfile_13.pddl │ │ ├── pfile_14.pddl │ │ └── pfile_15.pddl │ ├── domain.pddl │ ├── genTowers.hs │ └── domain.hpddl ├── robot │ ├── README.txt │ ├── domain.pddl │ ├── problems │ │ ├── pfile_10_10.pddl │ │ ├── pfile_10_30.pddl │ │ ├── pfile_30_10.pddl │ │ ├── pfile_10_50.pddl │ │ ├── pfile_30_30.pddl │ │ └── pfile_10_70.pddl │ ├── domain.hpddl │ ├── RandomUtils.hs │ ├── test.hpddl │ └── genRobot.hs ├── blocksworld │ ├── README.txt │ ├── problems │ │ ├── pfile_005.pddl │ │ ├── pfile_010.pddl │ │ ├── pfile_015.pddl │ │ ├── pfile_020.pddl │ │ ├── pfile_025.pddl │ │ ├── pfile_030.pddl │ │ ├── pfile_035.pddl │ │ ├── pfile_040.pddl │ │ ├── pfile_045.pddl │ │ ├── pfile_050.pddl │ │ ├── pfile_055.pddl │ │ ├── pfile_060.pddl │ │ ├── pfile_065.pddl │ │ ├── pfile_070.pddl │ │ ├── pfile_075.pddl │ │ └── pfile_080.pddl │ ├── domain.pddl │ └── domain.hpddl └── multiarm-blocksworld │ ├── problems │ ├── pfile_3_005.pddl │ ├── pfile_3_010.pddl │ ├── pfile_3_015.pddl │ ├── pfile_3_020.pddl │ ├── pfile_3_025.pddl │ ├── pfile_3_030.pddl │ ├── pfile_3_035.pddl │ ├── pfile_3_040.pddl │ ├── pfile_3_045.pddl │ ├── pfile_3_050.pddl │ ├── pfile_3_055.pddl │ ├── pfile_3_060.pddl │ ├── pfile_3_065.pddl │ ├── pfile_3_070.pddl │ └── pfile_3_075.pddl │ ├── README.txt │ ├── domain.pddl │ └── domain.hpddl ├── .gitignore ├── Setup.hs ├── LICENSE ├── stack.yaml ├── testsuite └── test-src │ └── HTNTranslation │ └── TranslationTest.hs ├── htn-translation.cabal ├── src └── HTNTranslation │ ├── Conjunctivitis.hs │ ├── ProgressionMin.hs │ └── ProblemLifter.hs └── README.md /examples/toy/.gitignore: -------------------------------------------------------------------------------- 1 | *.pddl 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | .dist-scion 3 | *.swp 4 | -------------------------------------------------------------------------------- /Setup.hs: -------------------------------------------------------------------------------- 1 | import Distribution.Simple 2 | main = defaultMain 3 | 4 | -------------------------------------------------------------------------------- /examples/.gitignore: -------------------------------------------------------------------------------- 1 | *.htn.pddl 2 | elapsed.time 3 | output 4 | output.sas 5 | sas_plan 6 | plan_numbers_and_cost 7 | -------------------------------------------------------------------------------- /examples/toy/ordering-problem.hpddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem ordering_problem) 3 | (:domain ordering) 4 | (:init 5 | (left)) 6 | (:tasks ((t0)))) 7 | -------------------------------------------------------------------------------- /examples/toy/ordering-problem2.hpddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem ordering_problem) 3 | (:domain ordering) 4 | (:init 5 | (left)) 6 | (:tasks ((t0))) 7 | (:tasks ((t0)))) 8 | -------------------------------------------------------------------------------- /examples/toy/basic-problem.hpddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem basic_problem) 3 | (:domain basic) 4 | (:objects 5 | banjo - OBJ viola - OBJ apple - OBJ) 6 | (:init 7 | (have banjo)) 8 | (:tasks ((swap apple banjo))) 9 | (:goal (and 10 | (have apple) 11 | ))) 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /examples/toy/basic-problem-ungrounded.hpddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem basic_problem) 3 | (:domain basic) 4 | (:objects 5 | banjo - OBJ viola - OBJ apple - OBJ) 6 | (:init 7 | (have banjo)) 8 | (:tasks ((swap ?x ?y))) 9 | (:goal (and 10 | (have apple) 11 | ))) 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /examples/towers/README.txt: -------------------------------------------------------------------------------- 1 | Running the towers of hanoi example with Fast-Downward or FF: 2 | 3 | $ cd problems 4 | $ htntranslate -t ordered -p .htn.pddl -l "(shiftTower t1 t2 t3)" ../domain.hpddl pfile_??.pddl 5 | $ $(FD-DIR)/src/plan ../domain.htn.pddl pfile_10.htn.pddl $(SEARCH-OPTIONS) 6 | $ ff -o ../domain.htn.pddl -f pfile_10.htn.pddl 7 | 8 | 9 | -------------------------------------------------------------------------------- /examples/robot/README.txt: -------------------------------------------------------------------------------- 1 | Running the robot navigation example with Fast-Downward or FF: 2 | 3 | $ cd problems 4 | $ htntranslate -t ordered -p .htn.pddl -l "(achieve-goals)" ../domain.hpddl pfile_??_??.pddl 5 | $ $(FD-DIR)/src/plan ../domain.htn.pddl pfile_10_10.htn.pddl $(SEARCH-OPTIONS) 6 | $ ff -o ../domain.htn.pddl -f pfile_10_10.htn.pddl 7 | 8 | 9 | -------------------------------------------------------------------------------- /examples/blocksworld/README.txt: -------------------------------------------------------------------------------- 1 | Running the blocksworld example with Fast-Downward or FF: 2 | 3 | $ cd problems 4 | $ htntranslate -p .htn.pddl -l "(achieve-goals)" ../domain.hpddl pfile_???.pddl 5 | $ $(FD-DIR)/src/plan ../domain.htn.pddl pfile_020.htn.pddl $(SEARCH-OPTIONS) 6 | $ ff -o ../domain.htn.pddl -f pfile_020.htn.pddl 7 | 8 | The plain 'domain.pddl' file (as opposed to 'domain.hpddl') is a 9 | run-of-the-mill STRIPS formulation of blocksworld. 10 | 11 | -------------------------------------------------------------------------------- /examples/blocksworld/problems/pfile_005.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_005) 3 | (:domain blocks) 4 | (:objects b1 b2 b3 b4 b5 - BLOCK) 5 | (:init 6 | (hand-empty) 7 | (clear b4) 8 | (on-table b4) 9 | (clear b5) 10 | (on-table b1) 11 | (on b5 b3) 12 | (on b3 b2) 13 | (on b2 b1)) 14 | (:goal (and 15 | (clear b2) 16 | (on-table b4) 17 | (on b2 b4) 18 | (clear b3) 19 | (on-table b1) 20 | (on b3 b5) 21 | (on b5 b1)))) -------------------------------------------------------------------------------- /examples/multiarm-blocksworld/problems/pfile_3_005.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_3_005) 3 | (:domain blocks) 4 | (:objects arm1 arm2 arm3 - ARM b1 b2 b3 b4 b5 - BLOCK) 5 | (:init 6 | (hand-empty arm1) 7 | (hand-empty arm2) 8 | (hand-empty arm3) 9 | (clear b5) 10 | (on-table b5) 11 | (clear b1) 12 | (on-table b3) 13 | (on b1 b4) 14 | (on b4 b3) 15 | (clear b2) 16 | (on-table b2)) 17 | (:goal (and 18 | (clear b3) 19 | (on-table b4) 20 | (on b3 b4) 21 | (clear b5) 22 | (on-table b2) 23 | (on b5 b1) 24 | (on b1 b2)))) -------------------------------------------------------------------------------- /examples/towers/problems/pfile_03.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem tower_problem_3) 3 | (:domain towers) 4 | (:objects t1 t2 t3 - TOWER r1 r2 r3 - RING) 5 | (:init 6 | (smallerThan r1 t1) 7 | (smallerThan r1 t2) 8 | (smallerThan r1 t3) 9 | (smallerThan r2 t1) 10 | (smallerThan r2 t2) 11 | (smallerThan r2 t3) 12 | (smallerThan r3 t1) 13 | (smallerThan r3 t2) 14 | (smallerThan r3 t3) 15 | (smallerThan r1 r2) 16 | (smallerThan r1 r3) 17 | (smallerThan r2 r3) 18 | (on r1 r2) 19 | (on r2 r3) 20 | (on r3 t1) 21 | (towerTop r1 t1) 22 | (towerTop t2 t2) 23 | (towerTop t3 t3)) 24 | (:goal (and (on r1 r2) (on r2 r3) (on r3 t3)))) -------------------------------------------------------------------------------- /examples/towers/domain.pddl: -------------------------------------------------------------------------------- 1 | (define (domain towers) 2 | (:requirements :strips :disjunctive-preconditions) 3 | (:types OBJ RING - OBJ TOWER - OBJ) 4 | (:predicates 5 | (on ?r - RING ?o - OBJ) 6 | (towerTop ?o - OBJ ?t - TOWER) 7 | (smallerThan ?r - RING ?o - OBJ)) 8 | 9 | (:action move 10 | :parameters (?r - RING ?o1 - OBJ ?t1 - TOWER ?o2 - OBJ ?t2 - TOWER) 11 | :precondition (and 12 | (on ?r ?o1) (towerTop ?r ?t1) 13 | (towerTop ?o2 ?t2) (smallerThan ?r ?o2)) 14 | :effect (and 15 | (not (on ?r ?o1)) 16 | (on ?r ?o2) 17 | (not (towerTop ?r ?t1)) 18 | (towerTop ?o1 ?t1) 19 | (not (towerTop ?o2 ?t2)) 20 | (towerTop ?r ?t2)))) 21 | 22 | 23 | -------------------------------------------------------------------------------- /examples/toy/README.txt: -------------------------------------------------------------------------------- 1 | Here are a couple of toy examples and basic instructions on how to run them with FF-X (Fast-Forward with axioms) 2 | 3 | htntranslate -i4 basic.hpddl basic-problem.hpddl && ff -o basic.pddl -f basic-problem.pddl 4 | 5 | htnunlift basic.hpddl basic-problem-ungrounded.hpddl && \ 6 | htntranslate -i4 d-basic-problem-ungrounded.hpddl p-basic-problem-ungrounded.hpddl && \ 7 | ff-x -o d-basic-problem-ungrounded.pddl -f p-basic-problem-ungrounded.pddl 8 | 9 | htntranslate ordering.hpddl ordering-problem.hpddl && ff -o ordering.pddl -f ordering-problem.pddl 10 | 11 | htntranslate ordering2.hpddl ordering-problem.hpddl && ff -o ordering2.pddl -f ordering-problem.pddl 12 | 13 | -------------------------------------------------------------------------------- /examples/blocksworld/problems/pfile_010.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_010) 3 | (:domain blocks) 4 | (:objects b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 - BLOCK) 5 | (:init 6 | (hand-empty) 7 | (clear b1) 8 | (on-table b6) 9 | (on b1 b6) 10 | (clear b2) 11 | (on-table b4) 12 | (on b2 b9) 13 | (on b9 b4) 14 | (clear b5) 15 | (on-table b3) 16 | (on b5 b7) 17 | (on b7 b10) 18 | (on b10 b8) 19 | (on b8 b3)) 20 | (:goal (and 21 | (clear b4) 22 | (on-table b9) 23 | (on b4 b6) 24 | (on b6 b8) 25 | (on b8 b1) 26 | (on b1 b9) 27 | (clear b3) 28 | (on-table b2) 29 | (on b3 b10) 30 | (on b10 b7) 31 | (on b7 b5) 32 | (on b5 b2)))) -------------------------------------------------------------------------------- /examples/towers/problems/pfile_04.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem tower_problem_4) 3 | (:domain towers) 4 | (:objects t1 t2 t3 - TOWER r1 r2 r3 r4 - RING) 5 | (:init 6 | (smallerThan r1 t1) 7 | (smallerThan r1 t2) 8 | (smallerThan r1 t3) 9 | (smallerThan r2 t1) 10 | (smallerThan r2 t2) 11 | (smallerThan r2 t3) 12 | (smallerThan r3 t1) 13 | (smallerThan r3 t2) 14 | (smallerThan r3 t3) 15 | (smallerThan r4 t1) 16 | (smallerThan r4 t2) 17 | (smallerThan r4 t3) 18 | (smallerThan r1 r2) 19 | (smallerThan r1 r3) 20 | (smallerThan r1 r4) 21 | (smallerThan r2 r3) 22 | (smallerThan r2 r4) 23 | (smallerThan r3 r4) 24 | (on r1 r2) 25 | (on r2 r3) 26 | (on r3 r4) 27 | (on r4 t1) 28 | (towerTop r1 t1) 29 | (towerTop t2 t2) 30 | (towerTop t3 t3)) 31 | (:goal (and (on r1 r2) (on r2 r3) (on r3 r4) (on r4 t3)))) -------------------------------------------------------------------------------- /examples/multiarm-blocksworld/problems/pfile_3_010.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_3_010) 3 | (:domain blocks) 4 | (:objects arm1 arm2 arm3 - ARM 5 | b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 - BLOCK) 6 | (:init 7 | (hand-empty arm1) 8 | (hand-empty arm2) 9 | (hand-empty arm3) 10 | (clear b4) 11 | (on-table b10) 12 | (on b4 b8) 13 | (on b8 b2) 14 | (on b2 b7) 15 | (on b7 b3) 16 | (on b3 b6) 17 | (on b6 b10) 18 | (clear b9) 19 | (on-table b5) 20 | (on b9 b1) 21 | (on b1 b5)) 22 | (:goal (and 23 | (clear b8) 24 | (on-table b8) 25 | (clear b2) 26 | (on-table b7) 27 | (on b2 b10) 28 | (on b10 b1) 29 | (on b1 b7) 30 | (clear b6) 31 | (on-table b3) 32 | (on b6 b4) 33 | (on b4 b9) 34 | (on b9 b5) 35 | (on b5 b3)))) -------------------------------------------------------------------------------- /examples/toy/ordering2.hpddl: -------------------------------------------------------------------------------- 1 | (define (domain ordering) 2 | (:requirements :strips) 3 | (:predicates 4 | (left)) 5 | (:tasks 6 | (t0) 7 | (t1) 8 | (t2) 9 | (a) 10 | (b) 11 | (c) 12 | ) 13 | 14 | (:method t0 15 | :parameters () 16 | :task (t0) 17 | :tasks (h (c)) 18 | :tasks (i (t1)) 19 | :tasks (j (t2)) 20 | :ordering ( (h i) (h j))) 21 | 22 | 23 | (:method t1 24 | :parameters () 25 | :task (t1) 26 | :tasks ((a)) 27 | :tasks ((a))) 28 | 29 | (:method t2 30 | :parameters () 31 | :task (t2) 32 | :tasks ((b)) 33 | :tasks ((b))) 34 | 35 | (:action a 36 | :parameters () 37 | :task (a) 38 | :precondition (left) 39 | :effect (not (left))) 40 | 41 | (:action b 42 | :parameters () 43 | :task (b) 44 | :precondition (not (left)) 45 | :effect (left)) 46 | 47 | (:action c 48 | :parameters () 49 | :task (c))) 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /examples/toy/ordering.hpddl: -------------------------------------------------------------------------------- 1 | (define (domain ordering) 2 | (:requirements :strips) 3 | (:predicates 4 | (left)) 5 | (:tasks 6 | (t0) 7 | (t1) 8 | (t2) 9 | (a) 10 | (b) 11 | (c) 12 | ) 13 | 14 | (:method t0 15 | :parameters () 16 | :task (t0) 17 | :tasks (h (c)) 18 | :tasks (i (t1)) 19 | :tasks (j (t2)) 20 | :tasks (k (c)) 21 | :ordering ( (h i) (h j) (i k) (j k) )) 22 | 23 | 24 | (:method t1 25 | :parameters () 26 | :task (t1) 27 | :tasks ((a)) 28 | :tasks ((a))) 29 | 30 | (:method t2 31 | :parameters () 32 | :task (t2) 33 | :tasks ((b)) 34 | :tasks ((b))) 35 | 36 | (:action a 37 | :parameters () 38 | :task (a) 39 | :precondition (left) 40 | :effect (not (left))) 41 | 42 | (:action b 43 | :parameters () 44 | :task (b) 45 | :precondition (not (left)) 46 | :effect (left)) 47 | 48 | (:action c 49 | :parameters () 50 | :task (c))) 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /examples/multiarm-blocksworld/README.txt: -------------------------------------------------------------------------------- 1 | 2 | Generating new multi-arm blocksworld problems with 4 arms: 3 | $ cd problems 4 | $ runghc ../genBlocks.hs pfile_4_ 4 5 100 5 5 | 6 | Running the multi-arm blocksworld example with Fast-Downward: 7 | 8 | $ cd problems 9 | $ htntranslate -t adl -p .htn.pddl \ 10 | -l "(achieve-goals arm1)" \ 11 | -l "(achieve-goals arm2)" \ 12 | -l "(achieve-goals arm3)" \ 13 | ../domain.hpddl pfile_3_???.pddl 14 | $ $(FD-DIR)/src/plan ../domain.htn.pddl pfile_3_020.htn.pddl \ 15 | --heuristic "hlm,hff=lm_ff_syn(lm_rhw( 16 | reasonable_orders=true,lm_cost_type=2,cost_type=2))" \ 17 | --search "lazy_greedy([hff,hlm],preferred=[hff,hlm])" 18 | 19 | If your planner doesn't support derived predicates and quantified effects, you 20 | need to use the STRIPS translation, but it seems to be much slower: 21 | $ htntranslate -t strips -p .htn.pddl -l "(achieve-goals)" ../domain.hpddl pfile_???.pddl 22 | $ ff -o ../domain.htn.pddl -f pfile_3_020.htn.pddl 23 | 24 | -------------------------------------------------------------------------------- /examples/multiarm-blocksworld/problems/pfile_3_015.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_3_015) 3 | (:domain blocks) 4 | (:objects arm1 arm2 arm3 - ARM 5 | b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 - BLOCK) 6 | (:init 7 | (hand-empty arm1) 8 | (hand-empty arm2) 9 | (hand-empty arm3) 10 | (clear b11) 11 | (on-table b13) 12 | (on b11 b6) 13 | (on b6 b2) 14 | (on b2 b10) 15 | (on b10 b13) 16 | (clear b12) 17 | (on-table b12) 18 | (clear b8) 19 | (on-table b1) 20 | (on b8 b9) 21 | (on b9 b5) 22 | (on b5 b4) 23 | (on b4 b7) 24 | (on b7 b14) 25 | (on b14 b15) 26 | (on b15 b3) 27 | (on b3 b1)) 28 | (:goal (and 29 | (clear b8) 30 | (on-table b15) 31 | (on b8 b10) 32 | (on b10 b7) 33 | (on b7 b3) 34 | (on b3 b1) 35 | (on b1 b13) 36 | (on b13 b2) 37 | (on b2 b11) 38 | (on b11 b4) 39 | (on b4 b9) 40 | (on b9 b15) 41 | (clear b14) 42 | (on-table b14) 43 | (clear b5) 44 | (on-table b12) 45 | (on b5 b6) 46 | (on b6 b12)))) -------------------------------------------------------------------------------- /examples/towers/problems/pfile_05.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem tower_problem_5) 3 | (:domain towers) 4 | (:objects t1 t2 t3 - TOWER r1 r2 r3 r4 r5 - RING) 5 | (:init 6 | (smallerThan r1 t1) 7 | (smallerThan r1 t2) 8 | (smallerThan r1 t3) 9 | (smallerThan r2 t1) 10 | (smallerThan r2 t2) 11 | (smallerThan r2 t3) 12 | (smallerThan r3 t1) 13 | (smallerThan r3 t2) 14 | (smallerThan r3 t3) 15 | (smallerThan r4 t1) 16 | (smallerThan r4 t2) 17 | (smallerThan r4 t3) 18 | (smallerThan r5 t1) 19 | (smallerThan r5 t2) 20 | (smallerThan r5 t3) 21 | (smallerThan r1 r2) 22 | (smallerThan r1 r3) 23 | (smallerThan r1 r4) 24 | (smallerThan r1 r5) 25 | (smallerThan r2 r3) 26 | (smallerThan r2 r4) 27 | (smallerThan r2 r5) 28 | (smallerThan r3 r4) 29 | (smallerThan r3 r5) 30 | (smallerThan r4 r5) 31 | (on r1 r2) 32 | (on r2 r3) 33 | (on r3 r4) 34 | (on r4 r5) 35 | (on r5 t1) 36 | (towerTop r1 t1) 37 | (towerTop t2 t2) 38 | (towerTop t3 t3)) 39 | (:goal (and 40 | (on r1 r2) 41 | (on r2 r3) 42 | (on r3 r4) 43 | (on r4 r5) 44 | (on r5 t3)))) -------------------------------------------------------------------------------- /examples/toy/basic.hpddl: -------------------------------------------------------------------------------- 1 | (define (domain basic) 2 | (:requirements :disjunctive-preconditions :strips) 3 | (:types OBJ) 4 | (:predicates 5 | (have ?o - OBJ) 6 | (handempty) 7 | ) 8 | (:tasks 9 | (swap ?x - OBJ ?y - OBJ) 10 | (donothing) 11 | (pickup ?x - OBJ) 12 | (drop ?x - OBJ)) 13 | 14 | (:method swap1 15 | :parameters (?x - OBJ ?y - OBJ) 16 | :task (swap ?x ?y) 17 | :precondition (have ?x) 18 | :tasks ((drop ?x) (pickup ?y))) 19 | 20 | (:method swap2 21 | :parameters (?x - OBJ ?y - OBJ) 22 | :task (swap ?x ?y) 23 | :precondition (have ?y) 24 | :tasks ((drop ?y) (pickup ?x))) 25 | 26 | (:method donothing 27 | :parameters (?o - OBJ) 28 | :task (donothing) 29 | :precondition ()) 30 | 31 | (:method swapswap 32 | :parameters (?x - OBJ ?y - OBJ ?z - OBJ) 33 | :task (swap ?x ?y) 34 | :tasks ((swap ?x ?z) (swap ?z ?y))) 35 | 36 | (:action pickup 37 | :parameters (?x - OBJ) 38 | :task (pickup ?x) 39 | :precondition (handempty) 40 | :effect (have ?x) 41 | ) 42 | 43 | (:action drop 44 | :parameters (?x - OBJ) 45 | :task (drop ?x) 46 | :precondition (have ?x) 47 | :effect (and (handempty) (not (have ?x))) 48 | ) 49 | 50 | 51 | ) 52 | -------------------------------------------------------------------------------- /examples/robot/domain.pddl: -------------------------------------------------------------------------------- 1 | ;robot-navigation domain 2 | 3 | (define (domain robot) 4 | (:requirements :typing :negative-preconditions) 5 | 6 | (:types DOOR ROOM ROOMDOOR PACKAGE) 7 | (:predicates 8 | (armempty) 9 | (rloc ?loc - ROOM) 10 | (in ?obj - PACKAGE ?loc - ROOM) 11 | (holding ?obj - PACKAGE) 12 | (closed ?d - ROOMDOOR) 13 | (door ?loc1 - ROOM ?loc2 - ROOM ?d - ROOMDOOR) 14 | ) 15 | 16 | (:action pickup 17 | :parameters (?obj - PACKAGE ?loc - ROOM) 18 | :precondition (and (rloc ?loc) (in ?obj ?loc) (armempty)) 19 | :effect (and (not (in ?obj ?loc)) (not (armempty)) (holding ?obj)) 20 | ) 21 | 22 | (:action putdown 23 | :parameters (?obj - PACKAGE ?loc - ROOM) 24 | :precondition (and (rloc ?loc) (holding ?obj)) 25 | :effect (and (not (holding ?obj)) (armempty) (in ?obj ?loc)) 26 | ) 27 | 28 | (:action move 29 | :parameters (?loc1 - ROOM ?loc2 - ROOM ?d - ROOMDOOR) 30 | :precondition (and (rloc ?loc1) (door ?loc1 ?loc2 ?d) (not (closed ?d))) 31 | :effect (and (rloc ?loc2) (not (rloc ?loc1))) 32 | ) 33 | 34 | (:action open 35 | :parameters (?loc1 - ROOM ?loc2 - ROOM ?d - ROOMDOOR) 36 | :precondition (and (rloc ?loc1) (door ?loc1 ?loc2 ?d) (closed ?d)) 37 | :effect (and (not (closed ?d))) 38 | ) 39 | 40 | ) 41 | -------------------------------------------------------------------------------- /examples/blocksworld/problems/pfile_015.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_015) 3 | (:domain blocks) 4 | (:objects b1 5 | b2 6 | b3 7 | b4 8 | b5 9 | b6 10 | b7 11 | b8 12 | b9 13 | b10 14 | b11 15 | b12 16 | b13 17 | b14 18 | b15 19 | - BLOCK) 20 | (:init 21 | (hand-empty) 22 | (clear b15) 23 | (on-table b12) 24 | (on b15 b13) 25 | (on b13 b2) 26 | (on b2 b14) 27 | (on b14 b9) 28 | (on b9 b4) 29 | (on b4 b6) 30 | (on b6 b12) 31 | (clear b7) 32 | (on-table b3) 33 | (on b7 b11) 34 | (on b11 b10) 35 | (on b10 b3) 36 | (clear b8) 37 | (on-table b1) 38 | (on b8 b5) 39 | (on b5 b1)) 40 | (:goal (and 41 | (clear b3) 42 | (on-table b14) 43 | (on b3 b6) 44 | (on b6 b10) 45 | (on b10 b11) 46 | (on b11 b14) 47 | (clear b15) 48 | (on-table b7) 49 | (on b15 b7) 50 | (clear b1) 51 | (on-table b5) 52 | (on b1 b9) 53 | (on b9 b12) 54 | (on b12 b13) 55 | (on b13 b8) 56 | (on b8 b2) 57 | (on b2 b4) 58 | (on b4 b5)))) -------------------------------------------------------------------------------- /examples/towers/problems/pfile_06.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem tower_problem_6) 3 | (:domain towers) 4 | (:objects t1 t2 t3 - TOWER r1 r2 r3 r4 r5 r6 - RING) 5 | (:init 6 | (smallerThan r1 t1) 7 | (smallerThan r1 t2) 8 | (smallerThan r1 t3) 9 | (smallerThan r2 t1) 10 | (smallerThan r2 t2) 11 | (smallerThan r2 t3) 12 | (smallerThan r3 t1) 13 | (smallerThan r3 t2) 14 | (smallerThan r3 t3) 15 | (smallerThan r4 t1) 16 | (smallerThan r4 t2) 17 | (smallerThan r4 t3) 18 | (smallerThan r5 t1) 19 | (smallerThan r5 t2) 20 | (smallerThan r5 t3) 21 | (smallerThan r6 t1) 22 | (smallerThan r6 t2) 23 | (smallerThan r6 t3) 24 | (smallerThan r1 r2) 25 | (smallerThan r1 r3) 26 | (smallerThan r1 r4) 27 | (smallerThan r1 r5) 28 | (smallerThan r1 r6) 29 | (smallerThan r2 r3) 30 | (smallerThan r2 r4) 31 | (smallerThan r2 r5) 32 | (smallerThan r2 r6) 33 | (smallerThan r3 r4) 34 | (smallerThan r3 r5) 35 | (smallerThan r3 r6) 36 | (smallerThan r4 r5) 37 | (smallerThan r4 r6) 38 | (smallerThan r5 r6) 39 | (on r1 r2) 40 | (on r2 r3) 41 | (on r3 r4) 42 | (on r4 r5) 43 | (on r5 r6) 44 | (on r6 t1) 45 | (towerTop r1 t1) 46 | (towerTop t2 t2) 47 | (towerTop t3 t3)) 48 | (:goal (and 49 | (on r1 r2) 50 | (on r2 r3) 51 | (on r3 r4) 52 | (on r4 r5) 53 | (on r5 r6) 54 | (on r6 t3)))) -------------------------------------------------------------------------------- /examples/robot/problems/pfile_10_10.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_10_10) 3 | (:domain robot) 4 | (:objects o1 o2 o3 o4 o5 o6 o7 o8 o9 o10 - PACKAGE 5 | c r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 - ROOM 6 | d24 d34 d35 d310 d15 d610 d710 d78 d89 d04 - ROOMDOOR) 7 | (:init 8 | (rloc c) 9 | (armempty) 10 | (door c r4 d04) 11 | (door r1 r5 d15) 12 | (door r2 r4 d24) 13 | (door r3 r4 d34) 14 | (door r3 r5 d35) 15 | (door r3 r10 d310) 16 | (door r4 c d04) 17 | (door r4 r2 d24) 18 | (door r4 r3 d34) 19 | (door r5 r1 d15) 20 | (door r5 r3 d35) 21 | (door r6 r10 d610) 22 | (door r7 r8 d78) 23 | (door r7 r10 d710) 24 | (door r8 r7 d78) 25 | (door r8 r9 d89) 26 | (door r9 r8 d89) 27 | (door r10 r3 d310) 28 | (door r10 r6 d610) 29 | (door r10 r7 d710) 30 | (closed d24) 31 | (closed d34) 32 | (closed d35) 33 | (closed d310) 34 | (closed d610) 35 | (closed d710) 36 | (closed d04) 37 | (in o1 r8) 38 | (in o2 r10) 39 | (in o3 r2) 40 | (in o4 r2) 41 | (in o5 r8) 42 | (in o6 r3) 43 | (in o7 r2) 44 | (in o8 r3) 45 | (in o9 r1) 46 | (in o10 r4)) 47 | (:goal (and 48 | (in o1 r2) 49 | (in o2 r10) 50 | (in o3 r3) 51 | (in o4 r9) 52 | (in o5 r10) 53 | (in o6 r9) 54 | (in o7 r8) 55 | (in o8 r4) 56 | (in o9 r1) 57 | (in o10 r4)))) -------------------------------------------------------------------------------- /examples/blocksworld/domain.pddl: -------------------------------------------------------------------------------- 1 | (define (domain blocks) 2 | (:requirements :strips :disjunctive-preconditions) 3 | (:types BLOCK) 4 | (:predicates 5 | (hand-empty) 6 | (clear ?b - BLOCK) 7 | (holding ?b - BLOCK) 8 | (on ?top - BLOCK ?bottom - BLOCK) 9 | (on-table ?b - BLOCK)) 10 | 11 | (:action pickup 12 | :parameters (?b - BLOCK) 13 | :precondition (and (hand-empty) (clear ?b) (on-table ?b)) 14 | :effect (and 15 | (not (hand-empty)) 16 | (not (clear ?b)) 17 | (not (on-table ?b)) 18 | (holding ?b))) 19 | 20 | (:action putdown 21 | :parameters (?b - BLOCK) 22 | :precondition (holding ?b) 23 | :effect (and 24 | (hand-empty) 25 | (not (holding ?b)) 26 | (on-table ?b) (clear ?b))) 27 | 28 | (:action stack 29 | :parameters (?top - BLOCK ?bottom - BLOCK) 30 | :precondition (and 31 | (holding ?top) 32 | (clear ?bottom)) 33 | :effect (and 34 | (hand-empty) 35 | (not (holding ?top)) 36 | (not (clear ?bottom)) 37 | (on ?top ?bottom) 38 | (clear ?top))) 39 | 40 | (:action unstack 41 | :parameters (?top - BLOCK ?bottom - BLOCK) 42 | :precondition (and 43 | (hand-empty) 44 | (clear ?top) 45 | (on ?top ?bottom)) 46 | :effect (and 47 | (not (hand-empty)) 48 | (not (clear ?top)) 49 | (not (on ?top ?bottom)) 50 | (holding ?top) 51 | (clear ?bottom)))) 52 | 53 | -------------------------------------------------------------------------------- /examples/multiarm-blocksworld/domain.pddl: -------------------------------------------------------------------------------- 1 | (define (domain blocks) 2 | (:requirements :strips :disjunctive-preconditions) 3 | (:types ARM BLOCK) 4 | (:predicates 5 | (hand-empty ?a - ARM) 6 | (clear ?b - BLOCK) 7 | (holding ?b - BLOCK ?a - ARM) 8 | (on ?top - BLOCK ?bottom - BLOCK) 9 | (on-table ?b - BLOCK)) 10 | 11 | (:action pickup 12 | :parameters (?b - BLOCK ?a - ARM) 13 | :precondition (and (hand-empty ?a) (clear ?b) (on-table ?b)) 14 | :effect (and 15 | (not (hand-empty ?a)) 16 | (not (clear ?b)) 17 | (not (on-table ?b)) 18 | (holding ?b ?a))) 19 | 20 | (:action putdown 21 | :parameters (?b - BLOCK ?a - ARM) 22 | :precondition (holding ?b ?a) 23 | :effect (and 24 | (hand-empty ?a) 25 | (not (holding ?b ?a)) 26 | (on-table ?b) (clear ?b))) 27 | 28 | (:action stack 29 | :parameters (?top - BLOCK ?bottom - BLOCK ?a - ARM) 30 | :precondition (and 31 | (holding ?top ?a) 32 | (clear ?bottom)) 33 | :effect (and 34 | (hand-empty ?a) 35 | (not (holding ?top ?a)) 36 | (not (clear ?bottom)) 37 | (on ?top ?bottom) 38 | (clear ?top))) 39 | 40 | (:action unstack 41 | :parameters (?top - BLOCK ?bottom - BLOCK ?a - ARM) 42 | :precondition (and 43 | (hand-empty ?a) 44 | (clear ?top) 45 | (on ?top ?bottom)) 46 | :effect (and 47 | (not (hand-empty ?a)) 48 | (not (clear ?top)) 49 | (not (on ?top ?bottom)) 50 | (holding ?top ?a) 51 | (clear ?bottom)))) 52 | 53 | -------------------------------------------------------------------------------- /examples/blocksworld/problems/pfile_020.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_020) 3 | (:domain blocks) 4 | (:objects b1 5 | b2 6 | b3 7 | b4 8 | b5 9 | b6 10 | b7 11 | b8 12 | b9 13 | b10 14 | b11 15 | b12 16 | b13 17 | b14 18 | b15 19 | b16 20 | b17 21 | b18 22 | b19 23 | b20 24 | - BLOCK) 25 | (:init 26 | (hand-empty) 27 | (clear b11) 28 | (on-table b19) 29 | (on b11 b20) 30 | (on b20 b19) 31 | (clear b15) 32 | (on-table b18) 33 | (on b15 b6) 34 | (on b6 b5) 35 | (on b5 b17) 36 | (on b17 b10) 37 | (on b10 b18) 38 | (clear b3) 39 | (on-table b16) 40 | (on b3 b2) 41 | (on b2 b7) 42 | (on b7 b1) 43 | (on b1 b9) 44 | (on b9 b16) 45 | (clear b12) 46 | (on-table b4) 47 | (on b12 b14) 48 | (on b14 b13) 49 | (on b13 b8) 50 | (on b8 b4)) 51 | (:goal (and 52 | (clear b7) 53 | (on-table b15) 54 | (on b7 b13) 55 | (on b13 b15) 56 | (clear b19) 57 | (on-table b9) 58 | (on b19 b9) 59 | (clear b14) 60 | (on-table b1) 61 | (on b14 b3) 62 | (on b3 b16) 63 | (on b16 b20) 64 | (on b20 b18) 65 | (on b18 b4) 66 | (on b4 b6) 67 | (on b6 b2) 68 | (on b2 b12) 69 | (on b12 b10) 70 | (on b10 b5) 71 | (on b5 b11) 72 | (on b11 b17) 73 | (on b17 b8) 74 | (on b8 b1)))) -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2008, Ron Alford 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are 6 | met: 7 | 8 | * Redistributions of source code must retain the above copyright 9 | notice, this list of conditions and the following disclaimer. 10 | 11 | * Redistributions in binary form must reproduce the above 12 | copyright notice, this list of conditions and the following 13 | disclaimer in the documentation and/or other materials provided 14 | with the distribution. 15 | 16 | * Neither the name of Ron Alford nor the names of other 17 | contributors may be used to endorse or promote products derived 18 | from this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24 | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 | 32 | -------------------------------------------------------------------------------- /examples/towers/problems/pfile_07.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem tower_problem_7) 3 | (:domain towers) 4 | (:objects t1 t2 t3 - TOWER r1 r2 r3 r4 r5 r6 r7 - RING) 5 | (:init 6 | (smallerThan r1 t1) 7 | (smallerThan r1 t2) 8 | (smallerThan r1 t3) 9 | (smallerThan r2 t1) 10 | (smallerThan r2 t2) 11 | (smallerThan r2 t3) 12 | (smallerThan r3 t1) 13 | (smallerThan r3 t2) 14 | (smallerThan r3 t3) 15 | (smallerThan r4 t1) 16 | (smallerThan r4 t2) 17 | (smallerThan r4 t3) 18 | (smallerThan r5 t1) 19 | (smallerThan r5 t2) 20 | (smallerThan r5 t3) 21 | (smallerThan r6 t1) 22 | (smallerThan r6 t2) 23 | (smallerThan r6 t3) 24 | (smallerThan r7 t1) 25 | (smallerThan r7 t2) 26 | (smallerThan r7 t3) 27 | (smallerThan r1 r2) 28 | (smallerThan r1 r3) 29 | (smallerThan r1 r4) 30 | (smallerThan r1 r5) 31 | (smallerThan r1 r6) 32 | (smallerThan r1 r7) 33 | (smallerThan r2 r3) 34 | (smallerThan r2 r4) 35 | (smallerThan r2 r5) 36 | (smallerThan r2 r6) 37 | (smallerThan r2 r7) 38 | (smallerThan r3 r4) 39 | (smallerThan r3 r5) 40 | (smallerThan r3 r6) 41 | (smallerThan r3 r7) 42 | (smallerThan r4 r5) 43 | (smallerThan r4 r6) 44 | (smallerThan r4 r7) 45 | (smallerThan r5 r6) 46 | (smallerThan r5 r7) 47 | (smallerThan r6 r7) 48 | (on r1 r2) 49 | (on r2 r3) 50 | (on r3 r4) 51 | (on r4 r5) 52 | (on r5 r6) 53 | (on r6 r7) 54 | (on r7 t1) 55 | (towerTop r1 t1) 56 | (towerTop t2 t2) 57 | (towerTop t3 t3)) 58 | (:goal (and 59 | (on r1 r2) 60 | (on r2 r3) 61 | (on r3 r4) 62 | (on r4 r5) 63 | (on r5 r6) 64 | (on r6 r7) 65 | (on r7 t3)))) -------------------------------------------------------------------------------- /examples/multiarm-blocksworld/problems/pfile_3_020.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_3_020) 3 | (:domain blocks) 4 | (:objects arm1 arm2 arm3 - ARM 5 | b1 6 | b2 7 | b3 8 | b4 9 | b5 10 | b6 11 | b7 12 | b8 13 | b9 14 | b10 15 | b11 16 | b12 17 | b13 18 | b14 19 | b15 20 | b16 21 | b17 22 | b18 23 | b19 24 | b20 25 | - BLOCK) 26 | (:init 27 | (hand-empty arm1) 28 | (hand-empty arm2) 29 | (hand-empty arm3) 30 | (clear b4) 31 | (on-table b16) 32 | (on b4 b19) 33 | (on b19 b7) 34 | (on b7 b16) 35 | (clear b5) 36 | (on-table b14) 37 | (on b5 b8) 38 | (on b8 b17) 39 | (on b17 b20) 40 | (on b20 b1) 41 | (on b1 b10) 42 | (on b10 b12) 43 | (on b12 b14) 44 | (clear b18) 45 | (on-table b13) 46 | (on b18 b2) 47 | (on b2 b9) 48 | (on b9 b11) 49 | (on b11 b15) 50 | (on b15 b13) 51 | (clear b3) 52 | (on-table b6) 53 | (on b3 b6)) 54 | (:goal (and 55 | (clear b15) 56 | (on-table b20) 57 | (on b15 b6) 58 | (on b6 b20) 59 | (clear b16) 60 | (on-table b16) 61 | (clear b10) 62 | (on-table b4) 63 | (on b10 b12) 64 | (on b12 b11) 65 | (on b11 b8) 66 | (on b8 b14) 67 | (on b14 b17) 68 | (on b17 b5) 69 | (on b5 b4) 70 | (clear b9) 71 | (on-table b3) 72 | (on b9 b19) 73 | (on b19 b3) 74 | (clear b13) 75 | (on-table b2) 76 | (on b13 b7) 77 | (on b7 b18) 78 | (on b18 b2) 79 | (clear b1) 80 | (on-table b1)))) -------------------------------------------------------------------------------- /examples/blocksworld/problems/pfile_025.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_025) 3 | (:domain blocks) 4 | (:objects b1 5 | b2 6 | b3 7 | b4 8 | b5 9 | b6 10 | b7 11 | b8 12 | b9 13 | b10 14 | b11 15 | b12 16 | b13 17 | b14 18 | b15 19 | b16 20 | b17 21 | b18 22 | b19 23 | b20 24 | b21 25 | b22 26 | b23 27 | b24 28 | b25 29 | - BLOCK) 30 | (:init 31 | (hand-empty) 32 | (clear b20) 33 | (on-table b15) 34 | (on b20 b4) 35 | (on b4 b1) 36 | (on b1 b23) 37 | (on b23 b5) 38 | (on b5 b10) 39 | (on b10 b11) 40 | (on b11 b22) 41 | (on b22 b3) 42 | (on b3 b16) 43 | (on b16 b14) 44 | (on b14 b8) 45 | (on b8 b21) 46 | (on b21 b7) 47 | (on b7 b18) 48 | (on b18 b24) 49 | (on b24 b15) 50 | (clear b12) 51 | (on-table b2) 52 | (on b12 b19) 53 | (on b19 b9) 54 | (on b9 b17) 55 | (on b17 b25) 56 | (on b25 b6) 57 | (on b6 b13) 58 | (on b13 b2)) 59 | (:goal (and 60 | (clear b3) 61 | (on-table b17) 62 | (on b3 b19) 63 | (on b19 b14) 64 | (on b14 b18) 65 | (on b18 b24) 66 | (on b24 b10) 67 | (on b10 b6) 68 | (on b6 b22) 69 | (on b22 b11) 70 | (on b11 b4) 71 | (on b4 b20) 72 | (on b20 b17) 73 | (clear b2) 74 | (on-table b16) 75 | (on b2 b8) 76 | (on b8 b21) 77 | (on b21 b25) 78 | (on b25 b16) 79 | (clear b1) 80 | (on-table b15) 81 | (on b1 b5) 82 | (on b5 b12) 83 | (on b12 b13) 84 | (on b13 b15) 85 | (clear b23) 86 | (on-table b9) 87 | (on b23 b9) 88 | (clear b7) 89 | (on-table b7)))) -------------------------------------------------------------------------------- /examples/towers/problems/pfile_08.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem tower_problem_8) 3 | (:domain towers) 4 | (:objects t1 t2 t3 - TOWER r1 r2 r3 r4 r5 r6 r7 r8 - RING) 5 | (:init 6 | (smallerThan r1 t1) 7 | (smallerThan r1 t2) 8 | (smallerThan r1 t3) 9 | (smallerThan r2 t1) 10 | (smallerThan r2 t2) 11 | (smallerThan r2 t3) 12 | (smallerThan r3 t1) 13 | (smallerThan r3 t2) 14 | (smallerThan r3 t3) 15 | (smallerThan r4 t1) 16 | (smallerThan r4 t2) 17 | (smallerThan r4 t3) 18 | (smallerThan r5 t1) 19 | (smallerThan r5 t2) 20 | (smallerThan r5 t3) 21 | (smallerThan r6 t1) 22 | (smallerThan r6 t2) 23 | (smallerThan r6 t3) 24 | (smallerThan r7 t1) 25 | (smallerThan r7 t2) 26 | (smallerThan r7 t3) 27 | (smallerThan r8 t1) 28 | (smallerThan r8 t2) 29 | (smallerThan r8 t3) 30 | (smallerThan r1 r2) 31 | (smallerThan r1 r3) 32 | (smallerThan r1 r4) 33 | (smallerThan r1 r5) 34 | (smallerThan r1 r6) 35 | (smallerThan r1 r7) 36 | (smallerThan r1 r8) 37 | (smallerThan r2 r3) 38 | (smallerThan r2 r4) 39 | (smallerThan r2 r5) 40 | (smallerThan r2 r6) 41 | (smallerThan r2 r7) 42 | (smallerThan r2 r8) 43 | (smallerThan r3 r4) 44 | (smallerThan r3 r5) 45 | (smallerThan r3 r6) 46 | (smallerThan r3 r7) 47 | (smallerThan r3 r8) 48 | (smallerThan r4 r5) 49 | (smallerThan r4 r6) 50 | (smallerThan r4 r7) 51 | (smallerThan r4 r8) 52 | (smallerThan r5 r6) 53 | (smallerThan r5 r7) 54 | (smallerThan r5 r8) 55 | (smallerThan r6 r7) 56 | (smallerThan r6 r8) 57 | (smallerThan r7 r8) 58 | (on r1 r2) 59 | (on r2 r3) 60 | (on r3 r4) 61 | (on r4 r5) 62 | (on r5 r6) 63 | (on r6 r7) 64 | (on r7 r8) 65 | (on r8 t1) 66 | (towerTop r1 t1) 67 | (towerTop t2 t2) 68 | (towerTop t3 t3)) 69 | (:goal (and 70 | (on r1 r2) 71 | (on r2 r3) 72 | (on r3 r4) 73 | (on r4 r5) 74 | (on r5 r6) 75 | (on r6 r7) 76 | (on r7 r8) 77 | (on r8 t3)))) -------------------------------------------------------------------------------- /examples/multiarm-blocksworld/problems/pfile_3_025.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_3_025) 3 | (:domain blocks) 4 | (:objects arm1 arm2 arm3 - ARM 5 | b1 6 | b2 7 | b3 8 | b4 9 | b5 10 | b6 11 | b7 12 | b8 13 | b9 14 | b10 15 | b11 16 | b12 17 | b13 18 | b14 19 | b15 20 | b16 21 | b17 22 | b18 23 | b19 24 | b20 25 | b21 26 | b22 27 | b23 28 | b24 29 | b25 30 | - BLOCK) 31 | (:init 32 | (hand-empty arm1) 33 | (hand-empty arm2) 34 | (hand-empty arm3) 35 | (clear b2) 36 | (on-table b16) 37 | (on b2 b21) 38 | (on b21 b16) 39 | (clear b23) 40 | (on-table b15) 41 | (on b23 b5) 42 | (on b5 b19) 43 | (on b19 b15) 44 | (clear b24) 45 | (on-table b11) 46 | (on b24 b11) 47 | (clear b25) 48 | (on-table b9) 49 | (on b25 b3) 50 | (on b3 b12) 51 | (on b12 b1) 52 | (on b1 b18) 53 | (on b18 b6) 54 | (on b6 b10) 55 | (on b10 b22) 56 | (on b22 b4) 57 | (on b4 b7) 58 | (on b7 b14) 59 | (on b14 b20) 60 | (on b20 b13) 61 | (on b13 b9) 62 | (clear b17) 63 | (on-table b8) 64 | (on b17 b8)) 65 | (:goal (and 66 | (clear b25) 67 | (on-table b23) 68 | (on b25 b7) 69 | (on b7 b23) 70 | (clear b18) 71 | (on-table b15) 72 | (on b18 b13) 73 | (on b13 b5) 74 | (on b5 b16) 75 | (on b16 b10) 76 | (on b10 b17) 77 | (on b17 b15) 78 | (clear b1) 79 | (on-table b8) 80 | (on b1 b6) 81 | (on b6 b3) 82 | (on b3 b9) 83 | (on b9 b11) 84 | (on b11 b20) 85 | (on b20 b21) 86 | (on b21 b24) 87 | (on b24 b14) 88 | (on b14 b8) 89 | (clear b12) 90 | (on-table b4) 91 | (on b12 b4) 92 | (clear b22) 93 | (on-table b2) 94 | (on b22 b19) 95 | (on b19 b2)))) -------------------------------------------------------------------------------- /examples/blocksworld/problems/pfile_030.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_030) 3 | (:domain blocks) 4 | (:objects b1 5 | b2 6 | b3 7 | b4 8 | b5 9 | b6 10 | b7 11 | b8 12 | b9 13 | b10 14 | b11 15 | b12 16 | b13 17 | b14 18 | b15 19 | b16 20 | b17 21 | b18 22 | b19 23 | b20 24 | b21 25 | b22 26 | b23 27 | b24 28 | b25 29 | b26 30 | b27 31 | b28 32 | b29 33 | b30 34 | - BLOCK) 35 | (:init 36 | (hand-empty) 37 | (clear b10) 38 | (on-table b29) 39 | (on b10 b19) 40 | (on b19 b11) 41 | (on b11 b6) 42 | (on b6 b25) 43 | (on b25 b21) 44 | (on b21 b18) 45 | (on b18 b7) 46 | (on b7 b26) 47 | (on b26 b12) 48 | (on b12 b29) 49 | (clear b17) 50 | (on-table b20) 51 | (on b17 b16) 52 | (on b16 b23) 53 | (on b23 b24) 54 | (on b24 b13) 55 | (on b13 b22) 56 | (on b22 b14) 57 | (on b14 b27) 58 | (on b27 b5) 59 | (on b5 b28) 60 | (on b28 b8) 61 | (on b8 b3) 62 | (on b3 b30) 63 | (on b30 b4) 64 | (on b4 b2) 65 | (on b2 b15) 66 | (on b15 b1) 67 | (on b1 b9) 68 | (on b9 b20)) 69 | (:goal (and 70 | (clear b30) 71 | (on-table b18) 72 | (on b30 b6) 73 | (on b6 b22) 74 | (on b22 b27) 75 | (on b27 b18) 76 | (clear b15) 77 | (on-table b13) 78 | (on b15 b2) 79 | (on b2 b7) 80 | (on b7 b16) 81 | (on b16 b11) 82 | (on b11 b19) 83 | (on b19 b1) 84 | (on b1 b14) 85 | (on b14 b17) 86 | (on b17 b24) 87 | (on b24 b23) 88 | (on b23 b29) 89 | (on b29 b10) 90 | (on b10 b9) 91 | (on b9 b8) 92 | (on b8 b21) 93 | (on b21 b3) 94 | (on b3 b20) 95 | (on b20 b12) 96 | (on b12 b28) 97 | (on b28 b26) 98 | (on b26 b5) 99 | (on b5 b4) 100 | (on b4 b25) 101 | (on b25 b13)))) -------------------------------------------------------------------------------- /examples/towers/problems/pfile_09.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem tower_problem_9) 3 | (:domain towers) 4 | (:objects t1 t2 t3 - TOWER r1 r2 r3 r4 r5 r6 r7 r8 r9 - RING) 5 | (:init 6 | (smallerThan r1 t1) 7 | (smallerThan r1 t2) 8 | (smallerThan r1 t3) 9 | (smallerThan r2 t1) 10 | (smallerThan r2 t2) 11 | (smallerThan r2 t3) 12 | (smallerThan r3 t1) 13 | (smallerThan r3 t2) 14 | (smallerThan r3 t3) 15 | (smallerThan r4 t1) 16 | (smallerThan r4 t2) 17 | (smallerThan r4 t3) 18 | (smallerThan r5 t1) 19 | (smallerThan r5 t2) 20 | (smallerThan r5 t3) 21 | (smallerThan r6 t1) 22 | (smallerThan r6 t2) 23 | (smallerThan r6 t3) 24 | (smallerThan r7 t1) 25 | (smallerThan r7 t2) 26 | (smallerThan r7 t3) 27 | (smallerThan r8 t1) 28 | (smallerThan r8 t2) 29 | (smallerThan r8 t3) 30 | (smallerThan r9 t1) 31 | (smallerThan r9 t2) 32 | (smallerThan r9 t3) 33 | (smallerThan r1 r2) 34 | (smallerThan r1 r3) 35 | (smallerThan r1 r4) 36 | (smallerThan r1 r5) 37 | (smallerThan r1 r6) 38 | (smallerThan r1 r7) 39 | (smallerThan r1 r8) 40 | (smallerThan r1 r9) 41 | (smallerThan r2 r3) 42 | (smallerThan r2 r4) 43 | (smallerThan r2 r5) 44 | (smallerThan r2 r6) 45 | (smallerThan r2 r7) 46 | (smallerThan r2 r8) 47 | (smallerThan r2 r9) 48 | (smallerThan r3 r4) 49 | (smallerThan r3 r5) 50 | (smallerThan r3 r6) 51 | (smallerThan r3 r7) 52 | (smallerThan r3 r8) 53 | (smallerThan r3 r9) 54 | (smallerThan r4 r5) 55 | (smallerThan r4 r6) 56 | (smallerThan r4 r7) 57 | (smallerThan r4 r8) 58 | (smallerThan r4 r9) 59 | (smallerThan r5 r6) 60 | (smallerThan r5 r7) 61 | (smallerThan r5 r8) 62 | (smallerThan r5 r9) 63 | (smallerThan r6 r7) 64 | (smallerThan r6 r8) 65 | (smallerThan r6 r9) 66 | (smallerThan r7 r8) 67 | (smallerThan r7 r9) 68 | (smallerThan r8 r9) 69 | (on r1 r2) 70 | (on r2 r3) 71 | (on r3 r4) 72 | (on r4 r5) 73 | (on r5 r6) 74 | (on r6 r7) 75 | (on r7 r8) 76 | (on r8 r9) 77 | (on r9 t1) 78 | (towerTop r1 t1) 79 | (towerTop t2 t2) 80 | (towerTop t3 t3)) 81 | (:goal (and 82 | (on r1 r2) 83 | (on r2 r3) 84 | (on r3 r4) 85 | (on r4 r5) 86 | (on r5 r6) 87 | (on r6 r7) 88 | (on r7 r8) 89 | (on r8 r9) 90 | (on r9 t3)))) -------------------------------------------------------------------------------- /examples/towers/genTowers.hs: -------------------------------------------------------------------------------- 1 | {-# OPTIONS 2 | -fcontext-stack=40 3 | #-} 4 | {-# LANGUAGE FlexibleContexts, ParallelListComp #-} 5 | 6 | module Main where 7 | 8 | import Control.Monad 9 | import Data.List 10 | import System.Environment 11 | import System.IO 12 | import Text.Printf 13 | 14 | import Planning.PDDL.PDDL3_0 15 | --import HTNTranslation.Translation (translateProblem) 16 | 17 | genTowers :: Int -> PDDLProblem 18 | genTowers n = 19 | let 20 | ec :: ConstTermExpr 21 | ec = undefined 22 | et :: TermExpr 23 | et = undefined 24 | towers :: (:<:) Const e => Expr e -> [Expr e] 25 | towers e = [(eConst $ 't' : show t) `asTypeOf` e | t <- [1..3]] 26 | rings :: (:<:) Const e => Expr e -> [Expr e] 27 | rings e = [(eConst $ 'r' : show r) `asTypeOf` e | r <- [1..n]] 28 | stack :: [InitLiteralExpr] 29 | stack = [ eAtomic "on" [ r1, r2 ] | r1 <- rings ec | r2 <- tail $ rings ec ] 30 | in 31 | setName ("tower_problem_" ++ show n) $ 32 | setDomainName "towers" $ 33 | setConstants ( 34 | [ eTyped t ["TOWER"]| t <- towers (undefined :: Expr Const)] ++ 35 | [ eTyped r ["RING"] | r <- rings (undefined :: Expr Const)]) $ 36 | setInitial ( 37 | [ eAtomic "smallerThan" [r,t] | r <- rings ec, t <- towers ec] ++ 38 | [ eAtomic "smallerThan" [head rl, r2] 39 | | rl <- init $ tails $ rings ec, r2 <- tail rl] ++ 40 | stack ++ 41 | [eAtomic "on" [last $ rings ec, towers ec !! 0], 42 | eAtomic "towerTop" [head $ rings ec, towers ec !! 0], 43 | eAtomic "towerTop" [towers ec !! 1, towers ec !! 1], 44 | eAtomic "towerTop" [towers ec !! 2, towers ec !! 2]]) $ 45 | setGoal (Just $ eAnd $ 46 | [eAtomic "on" [r1, o2] 47 | | r1 <- rings et 48 | | o2 <- tail (rings et ++ [towers et !! 2])]) 49 | emptyProblem 50 | 51 | makeProblemFiles (basename, size) = do 52 | let prob = genTowers size 53 | writeFile (basename ++ ".pddl") (show $ pddlDoc prob) 54 | 55 | main = do 56 | fname : sizeStrs <- getArgs 57 | let maxDigits = maximum $ map length sizeStrs 58 | let sizes = map read sizeStrs :: [Int] 59 | let formatStr = printf "%%s%%0%dd" maxDigits 60 | let basenames = map (printf formatStr fname) sizes 61 | mapM_ makeProblemFiles $ zip basenames sizes 62 | 63 | -------------------------------------------------------------------------------- /stack.yaml: -------------------------------------------------------------------------------- 1 | # This file was automatically generated by 'stack init' 2 | # 3 | # Some commonly used options have been documented as comments in this file. 4 | # For advanced use and comprehensive documentation of the format, please see: 5 | # https://docs.haskellstack.org/en/stable/yaml_configuration/ 6 | 7 | # Resolver to choose a 'specific' stackage snapshot or a compiler version. 8 | # A snapshot resolver dictates the compiler version and the set of packages 9 | # to be used for project dependencies. For example: 10 | # 11 | # resolver: lts-3.5 12 | # resolver: nightly-2015-09-21 13 | # resolver: ghc-7.10.2 14 | # 15 | # The location of a snapshot can be provided as a file or url. Stack assumes 16 | # a snapshot provided as a file might change, whereas a url resource does not. 17 | # 18 | # resolver: ./custom-snapshot.yaml 19 | # resolver: https://example.com/snapshots/2018-01-01.yaml 20 | resolver: lts-15.16 21 | 22 | # User packages to be built. 23 | # Various formats can be used as shown in the example below. 24 | # 25 | # packages: 26 | # - some-directory 27 | # - https://example.com/foo/bar/baz-0.0.2.tar.gz 28 | # - location: 29 | # git: https://github.com/commercialhaskell/stack.git 30 | # commit: e7b331f14bcffb8367cd58fbfc8b40ec7642100a 31 | # - location: https://github.com/commercialhaskell/stack/commit/e7b331f14bcffb8367cd58fbfc8b40ec7642100a 32 | # subdirs: 33 | # - auto-update 34 | # - wai 35 | packages: 36 | - . 37 | 38 | 39 | # Dependency packages to be pulled from upstream that are not in the resolver 40 | # using the same syntax as the packages field. 41 | # (e.g., acme-missiles-0.3) 42 | extra-deps: 43 | - github: ronwalf/Planning 44 | commit: a641ea65a68bdebdfadd4186cac1b839fab48a06 45 | 46 | # Override default flag values for local packages and extra-deps 47 | # flags: {} 48 | 49 | # Extra package databases containing global packages 50 | # extra-package-dbs: [] 51 | 52 | # Control whether we use the GHC we find on the path 53 | # system-ghc: true 54 | # 55 | # Require a specific version of stack, using version ranges 56 | # require-stack-version: -any # Default 57 | # require-stack-version: ">=1.9" 58 | # 59 | # Override the architecture used by stack, especially useful on Windows 60 | # arch: i386 61 | # arch: x86_64 62 | # 63 | # Extra directories used by stack for building 64 | # extra-include-dirs: [/path/to/dir] 65 | # extra-lib-dirs: [/path/to/dir] 66 | # 67 | # Allow a newer minor version of GHC than the snapshot specifies 68 | # compiler-check: newer-minor 69 | -------------------------------------------------------------------------------- /examples/multiarm-blocksworld/problems/pfile_3_030.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_3_030) 3 | (:domain blocks) 4 | (:objects arm1 arm2 arm3 - ARM 5 | b1 6 | b2 7 | b3 8 | b4 9 | b5 10 | b6 11 | b7 12 | b8 13 | b9 14 | b10 15 | b11 16 | b12 17 | b13 18 | b14 19 | b15 20 | b16 21 | b17 22 | b18 23 | b19 24 | b20 25 | b21 26 | b22 27 | b23 28 | b24 29 | b25 30 | b26 31 | b27 32 | b28 33 | b29 34 | b30 35 | - BLOCK) 36 | (:init 37 | (hand-empty arm1) 38 | (hand-empty arm2) 39 | (hand-empty arm3) 40 | (clear b10) 41 | (on-table b30) 42 | (on b10 b5) 43 | (on b5 b15) 44 | (on b15 b3) 45 | (on b3 b28) 46 | (on b28 b7) 47 | (on b7 b8) 48 | (on b8 b6) 49 | (on b6 b21) 50 | (on b21 b12) 51 | (on b12 b4) 52 | (on b4 b17) 53 | (on b17 b19) 54 | (on b19 b18) 55 | (on b18 b30) 56 | (clear b23) 57 | (on-table b23) 58 | (clear b1) 59 | (on-table b20) 60 | (on b1 b2) 61 | (on b2 b24) 62 | (on b24 b14) 63 | (on b14 b26) 64 | (on b26 b22) 65 | (on b22 b27) 66 | (on b27 b29) 67 | (on b29 b20) 68 | (clear b25) 69 | (on-table b16) 70 | (on b25 b16) 71 | (clear b13) 72 | (on-table b9) 73 | (on b13 b11) 74 | (on b11 b9)) 75 | (:goal (and 76 | (clear b14) 77 | (on-table b25) 78 | (on b14 b25) 79 | (clear b13) 80 | (on-table b21) 81 | (on b13 b27) 82 | (on b27 b18) 83 | (on b18 b11) 84 | (on b11 b21) 85 | (clear b20) 86 | (on-table b2) 87 | (on b20 b23) 88 | (on b23 b7) 89 | (on b7 b19) 90 | (on b19 b22) 91 | (on b22 b26) 92 | (on b26 b30) 93 | (on b30 b6) 94 | (on b6 b9) 95 | (on b9 b2) 96 | (clear b29) 97 | (on-table b1) 98 | (on b29 b15) 99 | (on b15 b3) 100 | (on b3 b8) 101 | (on b8 b28) 102 | (on b28 b4) 103 | (on b4 b5) 104 | (on b5 b24) 105 | (on b24 b12) 106 | (on b12 b10) 107 | (on b10 b16) 108 | (on b16 b17) 109 | (on b17 b1)))) -------------------------------------------------------------------------------- /examples/robot/domain.hpddl: -------------------------------------------------------------------------------- 1 | (define (domain robot) 2 | (:requirements :strips :negative-preconditions :typing) 3 | (:types PACKAGE ROOM ROOMDOOR) 4 | (:predicates 5 | (armempty) 6 | (rloc ?loc - ROOM) 7 | (in ?obj - PACKAGE ?loc - ROOM) 8 | (holding ?obj - PACKAGE) 9 | (closed ?d - ROOMDOOR) 10 | (door ?loc1 - ROOM ?loc2 - ROOM ?d - ROOMDOOR) 11 | 12 | (goal_in ?obj - PACKAGE ?loc - ROOM)) 13 | (:tasks 14 | (achieve-goals) 15 | (release) 16 | (pickup ?obj - PACKAGE) 17 | (putdown) 18 | (move) 19 | (open)) 20 | 21 | (:action pickup 22 | :parameters (?obj - PACKAGE ?loc - ROOM) 23 | :task (pickup ?obj) 24 | :precondition (and (armempty) (rloc ?loc) (in ?obj ?loc)) 25 | :effect (and (not (in ?obj ?loc)) (not (armempty)) (holding ?obj)) 26 | ) 27 | 28 | (:action putdown 29 | :parameters (?obj - PACKAGE ?loc - ROOM) 30 | :task (putdown) 31 | :precondition (and (rloc ?loc) (holding ?obj) (goal_in ?obj ?loc)) 32 | :effect (and (not (holding ?obj)) (armempty) (in ?obj ?loc)) 33 | ) 34 | 35 | (:action move 36 | :parameters (?loc1 - ROOM ?loc2 - ROOM ?d - ROOMDOOR) 37 | :task (move) 38 | :precondition (and (rloc ?loc1) (door ?loc1 ?loc2 ?d) (not (closed ?d))) 39 | :effect (and (rloc ?loc2) (not (rloc ?loc1))) 40 | ) 41 | 42 | (:action open 43 | :parameters (?loc1 - ROOM ?loc2 - ROOM ?d - ROOMDOOR) 44 | :task (open) 45 | :precondition (and (rloc ?loc1) (door ?loc1 ?loc2 ?d) (closed ?d)) 46 | :effect (and (not (closed ?d))) 47 | ) 48 | 49 | (:method release-putdown 50 | :task (release) 51 | :precondition (exists (?loc - ROOM ?obj - PACKAGE) 52 | (and 53 | (rloc ?loc) 54 | (holding ?obj) 55 | (goal_in ?obj ?loc))) 56 | :tasks ((putdown) (achieve-goals))) 57 | 58 | (:method release-move 59 | :task (release) 60 | :tasks ((move) (release))) 61 | 62 | (:method release-open 63 | :task (release) 64 | :tasks ((open) (release))) 65 | 66 | 67 | (:method achieve-goals-pickup 68 | :parameters (?obj - PACKAGE) 69 | :task (achieve-goals) 70 | :precondition (exists (?loc - ROOM) (and 71 | (rloc ?loc) 72 | (in ?obj ?loc) 73 | (not (goal_in ?obj ?loc)))) 74 | :tasks ((pickup ?obj) (release))) 75 | 76 | (:method achieve-goals-move 77 | :task (achieve-goals) 78 | :tasks ((move) (achieve-goals))) 79 | 80 | (:method achieve-goals-open 81 | :task (achieve-goals) 82 | :tasks ((open) (achieve-goals))) 83 | 84 | 85 | (:method finished 86 | :task (achieve-goals) 87 | :precondition (forall (?obj - PACKAGE) 88 | (exists (?loc - ROOM) (and 89 | (goal_in ?obj ?loc) 90 | (in ?obj ?loc)))))) 91 | -------------------------------------------------------------------------------- /examples/towers/domain.hpddl: -------------------------------------------------------------------------------- 1 | (define (domain towers) 2 | (:requirements :strips :disjunctive-preconditions) 3 | (:types OBJ RING - OBJ TOWER - OBJ) 4 | (:predicates 5 | (on ?r - RING ?o - OBJ) 6 | (goal_on ?r - RING ?o - OBJ) 7 | (towerTop ?o - OBJ ?t - TOWER) 8 | (smallerThan ?r - RING ?o - OBJ)) 9 | (:tasks 10 | (shiftTower ?t1 - TOWER ?t2 - TOWER ?t3 - TOWER) 11 | (selectDirection ?r - RING ?t1 - TOWER ?t2 - TOWER ?t3 - TOWER) 12 | (rotateTower ?t1 - TOWER ?T2 - TOWER ?t3 - TOWER) 13 | (exchange ?t1 - TOWER ?t2 - TOWER ?t3 - TOWER) 14 | (move ?t1 - TOWER ?t2 - TOWER)) 15 | 16 | (:method shiftTower 17 | ; shift tower from ?t1 to ?t3 using ?t2 18 | :parameters (?r - RING ?t1 - TOWER ?t2 - TOWER ?t3 - TOWER) 19 | :task (shiftTower ?t1 ?t2 ?t3) 20 | :precondition (towerTop ?r ?t1) 21 | :tasks ((selectDirection ?r ?t1 ?t2 ?t3))) 22 | 23 | (:method selectedDirection 24 | :parameters (?r - RING ?t1 - TOWER ?t2 - TOWER ?t3 - TOWER) 25 | :task (selectDirection ?r ?t1 ?t2 ?t3) 26 | :precondition (on ?r ?t1) 27 | :tasks ((rotateTower ?t1 ?t3 ?t2))) 28 | 29 | (:method selectDirection 30 | :parameters (?r - RING ?r1 - RING ?t1 - TOWER ?t2 - TOWER ?t3 - TOWER) 31 | :task (selectDirection ?r ?t1 ?t2 ?t3) 32 | :precondition (on ?r ?r1) 33 | :tasks ((selectDirection ?r1 ?t1 ?t3 ?t2))) 34 | 35 | (:method rotateTower 36 | :parameters (?t1 - TOWER ?t2 - TOWER ?t3 - TOWER) 37 | :task (rotateTower ?t1 ?t2 ?t3) 38 | :tasks ((move ?t1 ?t2) (exchange ?t1 ?t2 ?t3))) 39 | 40 | (:method exchangeClear 41 | :parameters (?t1 - TOWER ?t2 - TOWER ?t3 - TOWER) 42 | :task (exchange ?t1 ?t2 ?t3) 43 | :precondition (and (towerTop ?t1 ?t1) (towerTop ?t3 ?t3))) 44 | 45 | (:method exchangeLR 46 | :parameters (?r1 - RING ?o3 - OBJ ?t1 - TOWER ?t2 - TOWER ?t3 - TOWER) 47 | :task (exchange ?t1 ?t2 ?t3) 48 | :precondition (and (towerTop ?r1 ?t1) (towerTop ?o3 ?t3) (smallerThan ?r1 ?o3)) 49 | :tasks ((move ?t1 ?t3) (rotateTower ?t2 ?t3 ?t1))) 50 | 51 | (:method exchangeRL 52 | :parameters (?o1 - OBJ ?r3 - RING ?t1 - TOWER ?t2 - TOWER ?t3 - TOWER) 53 | :task (exchange ?t1 ?t2 ?t3) 54 | :precondition (and (towerTop ?o1 ?t1) (towerTop ?r3 ?t3) (smallerThan ?r3 ?o1)) 55 | :tasks ((move ?t3 ?t1) (rotateTower ?t2 ?t3 ?t1))) 56 | 57 | (:action move 58 | :parameters (?r - RING ?o1 - OBJ ?t1 - TOWER ?o2 - OBJ ?t2 - TOWER) 59 | :task (move ?t1 ?t2) 60 | :precondition (and 61 | (towerTop ?r ?t1) 62 | (towerTop ?o2 ?t2) 63 | (on ?r ?o1) 64 | (smallerThan ?r ?o2)) 65 | :effect (and 66 | (not (on ?r ?o1)) 67 | (on ?r ?o2) 68 | (not (towerTop ?r ?t1)) 69 | (towerTop ?o1 ?t1) 70 | (not (towerTop ?o2 ?t2)) 71 | (towerTop ?r ?t2)))) 72 | 73 | 74 | -------------------------------------------------------------------------------- /examples/blocksworld/problems/pfile_035.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_035) 3 | (:domain blocks) 4 | (:objects b1 5 | b2 6 | b3 7 | b4 8 | b5 9 | b6 10 | b7 11 | b8 12 | b9 13 | b10 14 | b11 15 | b12 16 | b13 17 | b14 18 | b15 19 | b16 20 | b17 21 | b18 22 | b19 23 | b20 24 | b21 25 | b22 26 | b23 27 | b24 28 | b25 29 | b26 30 | b27 31 | b28 32 | b29 33 | b30 34 | b31 35 | b32 36 | b33 37 | b34 38 | b35 39 | - BLOCK) 40 | (:init 41 | (hand-empty) 42 | (clear b26) 43 | (on-table b33) 44 | (on b26 b33) 45 | (clear b15) 46 | (on-table b25) 47 | (on b15 b11) 48 | (on b11 b24) 49 | (on b24 b4) 50 | (on b4 b3) 51 | (on b3 b25) 52 | (clear b12) 53 | (on-table b18) 54 | (on b12 b18) 55 | (clear b22) 56 | (on-table b17) 57 | (on b22 b8) 58 | (on b8 b7) 59 | (on b7 b34) 60 | (on b34 b2) 61 | (on b2 b32) 62 | (on b32 b16) 63 | (on b16 b35) 64 | (on b35 b21) 65 | (on b21 b23) 66 | (on b23 b29) 67 | (on b29 b13) 68 | (on b13 b9) 69 | (on b9 b30) 70 | (on b30 b28) 71 | (on b28 b1) 72 | (on b1 b27) 73 | (on b27 b17) 74 | (clear b20) 75 | (on-table b5) 76 | (on b20 b19) 77 | (on b19 b6) 78 | (on b6 b14) 79 | (on b14 b10) 80 | (on b10 b31) 81 | (on b31 b5)) 82 | (:goal (and 83 | (clear b5) 84 | (on-table b33) 85 | (on b5 b6) 86 | (on b6 b11) 87 | (on b11 b34) 88 | (on b34 b17) 89 | (on b17 b20) 90 | (on b20 b8) 91 | (on b8 b26) 92 | (on b26 b33) 93 | (clear b9) 94 | (on-table b25) 95 | (on b9 b31) 96 | (on b31 b14) 97 | (on b14 b32) 98 | (on b32 b35) 99 | (on b35 b16) 100 | (on b16 b24) 101 | (on b24 b25) 102 | (clear b1) 103 | (on-table b12) 104 | (on b1 b27) 105 | (on b27 b4) 106 | (on b4 b13) 107 | (on b13 b30) 108 | (on b30 b2) 109 | (on b2 b18) 110 | (on b18 b21) 111 | (on b21 b19) 112 | (on b19 b22) 113 | (on b22 b23) 114 | (on b23 b28) 115 | (on b28 b15) 116 | (on b15 b29) 117 | (on b29 b12) 118 | (clear b3) 119 | (on-table b7) 120 | (on b3 b10) 121 | (on b10 b7)))) -------------------------------------------------------------------------------- /examples/towers/problems/pfile_10.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem tower_problem_10) 3 | (:domain towers) 4 | (:objects t1 t2 t3 - TOWER r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 - RING) 5 | (:init 6 | (smallerThan r1 t1) 7 | (smallerThan r1 t2) 8 | (smallerThan r1 t3) 9 | (smallerThan r2 t1) 10 | (smallerThan r2 t2) 11 | (smallerThan r2 t3) 12 | (smallerThan r3 t1) 13 | (smallerThan r3 t2) 14 | (smallerThan r3 t3) 15 | (smallerThan r4 t1) 16 | (smallerThan r4 t2) 17 | (smallerThan r4 t3) 18 | (smallerThan r5 t1) 19 | (smallerThan r5 t2) 20 | (smallerThan r5 t3) 21 | (smallerThan r6 t1) 22 | (smallerThan r6 t2) 23 | (smallerThan r6 t3) 24 | (smallerThan r7 t1) 25 | (smallerThan r7 t2) 26 | (smallerThan r7 t3) 27 | (smallerThan r8 t1) 28 | (smallerThan r8 t2) 29 | (smallerThan r8 t3) 30 | (smallerThan r9 t1) 31 | (smallerThan r9 t2) 32 | (smallerThan r9 t3) 33 | (smallerThan r10 t1) 34 | (smallerThan r10 t2) 35 | (smallerThan r10 t3) 36 | (smallerThan r1 r2) 37 | (smallerThan r1 r3) 38 | (smallerThan r1 r4) 39 | (smallerThan r1 r5) 40 | (smallerThan r1 r6) 41 | (smallerThan r1 r7) 42 | (smallerThan r1 r8) 43 | (smallerThan r1 r9) 44 | (smallerThan r1 r10) 45 | (smallerThan r2 r3) 46 | (smallerThan r2 r4) 47 | (smallerThan r2 r5) 48 | (smallerThan r2 r6) 49 | (smallerThan r2 r7) 50 | (smallerThan r2 r8) 51 | (smallerThan r2 r9) 52 | (smallerThan r2 r10) 53 | (smallerThan r3 r4) 54 | (smallerThan r3 r5) 55 | (smallerThan r3 r6) 56 | (smallerThan r3 r7) 57 | (smallerThan r3 r8) 58 | (smallerThan r3 r9) 59 | (smallerThan r3 r10) 60 | (smallerThan r4 r5) 61 | (smallerThan r4 r6) 62 | (smallerThan r4 r7) 63 | (smallerThan r4 r8) 64 | (smallerThan r4 r9) 65 | (smallerThan r4 r10) 66 | (smallerThan r5 r6) 67 | (smallerThan r5 r7) 68 | (smallerThan r5 r8) 69 | (smallerThan r5 r9) 70 | (smallerThan r5 r10) 71 | (smallerThan r6 r7) 72 | (smallerThan r6 r8) 73 | (smallerThan r6 r9) 74 | (smallerThan r6 r10) 75 | (smallerThan r7 r8) 76 | (smallerThan r7 r9) 77 | (smallerThan r7 r10) 78 | (smallerThan r8 r9) 79 | (smallerThan r8 r10) 80 | (smallerThan r9 r10) 81 | (on r1 r2) 82 | (on r2 r3) 83 | (on r3 r4) 84 | (on r4 r5) 85 | (on r5 r6) 86 | (on r6 r7) 87 | (on r7 r8) 88 | (on r8 r9) 89 | (on r9 r10) 90 | (on r10 t1) 91 | (towerTop r1 t1) 92 | (towerTop t2 t2) 93 | (towerTop t3 t3)) 94 | (:goal (and 95 | (on r1 r2) 96 | (on r2 r3) 97 | (on r3 r4) 98 | (on r4 r5) 99 | (on r5 r6) 100 | (on r6 r7) 101 | (on r7 r8) 102 | (on r8 r9) 103 | (on r9 r10) 104 | (on r10 t3)))) -------------------------------------------------------------------------------- /testsuite/test-src/HTNTranslation/TranslationTest.hs: -------------------------------------------------------------------------------- 1 | module HTNTranslation.TranslationTest where 2 | 3 | import Data.List 4 | import Prelude hiding (and, const, not, or) 5 | import qualified Prelude 6 | import Test.HUnit 7 | 8 | import HTNTranslation.HTNPDDL 9 | import HTNTranslation.Translation 10 | 11 | vars :: [Expr Var] 12 | vars = [ eVar $ 'v' : show n | n <- [0..5] ] 13 | 14 | 15 | stackVarsTest = TestLabel "StackVarTest" $ 16 | TestCase $ 17 | let 18 | vars = take 5 $ iterate (\ vl -> stackVars vl 5 ++ vl) [] 19 | in 20 | (flip mapM_) vars $ \vl -> 21 | assertEqual "StackVar intersection non-nill!" [] $ 22 | intersect vl $ stackVars vl 5 23 | 24 | stackConditionTest1 = TestLabel "Stack Condition Test 1" $ 25 | TestCase $ 26 | let 27 | (ovl, nvl) = splitAt 1 $stackVars [] 2 28 | otl = varIds ovl :: [TermExpr] 29 | ntl = varIds nvl :: [TermExpr] 30 | in 31 | assertEqual "" 32 | (eAnd [stackTop otl, 33 | eOr [eAnd [nextP (otl !! 0) (ntl !! 0)]]]) 34 | (stackCondition otl ntl :: GoalExpr) 35 | 36 | stackConditionTest2 = TestLabel "Stack Condition Test 2" $ 37 | TestCase $ 38 | let 39 | (ovl, nvl) = splitAt 2 $ stackVars [] 4 40 | otl = varIds ovl :: [TermExpr] 41 | ntl = varIds nvl :: [TermExpr] 42 | in 43 | assertEqual "" 44 | (eAnd [stackTop otl, eOr [ 45 | eAnd [ 46 | nextP (otl !! 0) (ntl !! 0), 47 | sameP (otl !! 1) (ntl !! 1)], 48 | eAnd [ 49 | endP (otl !! 0), 50 | beginP (ntl !! 0), 51 | nextP (otl !! 1) (ntl !! 1)] 52 | ]]) 53 | (stackCondition otl ntl :: GoalExpr) 54 | 55 | stackConditionTest3 = TestLabel "Stack Condition Test 3" $ 56 | TestCase $ 57 | let 58 | (ovl, nvl) = splitAt 3 $ stackVars [] 6 59 | otl = varIds ovl :: [TermExpr] 60 | ntl = varIds nvl :: [TermExpr] 61 | in 62 | assertEqual "" 63 | (eAnd [stackTop otl, eOr [ 64 | eAnd [ 65 | nextP (otl !! 0) (ntl !! 0), 66 | sameP (otl !! 1) (ntl !! 1), 67 | sameP (otl !! 2) (ntl !! 2)], 68 | eAnd [ 69 | endP (otl !! 0), 70 | beginP (ntl !! 0), 71 | nextP (otl !! 1) (ntl !! 1), 72 | sameP (otl !! 2) (ntl !! 2)], 73 | eAnd [ 74 | endP (otl !! 0), 75 | beginP (ntl !! 0), 76 | endP (otl !! 1), 77 | beginP (ntl !! 1), 78 | nextP (otl !! 2) (ntl !! 2)] 79 | ]]) 80 | (stackCondition otl ntl :: GoalExpr) 81 | 82 | 83 | 84 | stackTests = TestLabel "Stack Tests" $ 85 | TestList [ 86 | stackVarsTest, 87 | stackConditionTest1, 88 | stackConditionTest2, 89 | stackConditionTest3 90 | ] 91 | 92 | 93 | -------------------------------------------------------------------------------- /examples/robot/problems/pfile_10_30.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_10_30) 3 | (:domain robot) 4 | (:objects o1 5 | o2 6 | o3 7 | o4 8 | o5 9 | o6 10 | o7 11 | o8 12 | o9 13 | o10 14 | o11 15 | o12 16 | o13 17 | o14 18 | o15 19 | o16 20 | o17 21 | o18 22 | o19 23 | o20 24 | o21 25 | o22 26 | o23 27 | o24 28 | o25 29 | o26 30 | o27 31 | o28 32 | o29 33 | o30 34 | - PACKAGE 35 | c r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 - ROOM 36 | d02 d25 d35 d36 d010 d16 d410 d47 d59 d89 - ROOMDOOR) 37 | (:init 38 | (rloc c) 39 | (armempty) 40 | (door c r2 d02) 41 | (door c r10 d010) 42 | (door r1 r6 d16) 43 | (door r2 c d02) 44 | (door r2 r5 d25) 45 | (door r3 r5 d35) 46 | (door r3 r6 d36) 47 | (door r4 r7 d47) 48 | (door r4 r10 d410) 49 | (door r5 r2 d25) 50 | (door r5 r3 d35) 51 | (door r5 r9 d59) 52 | (door r6 r1 d16) 53 | (door r6 r3 d36) 54 | (door r7 r4 d47) 55 | (door r8 r9 d89) 56 | (door r9 r5 d59) 57 | (door r9 r8 d89) 58 | (door r10 c d010) 59 | (door r10 r4 d410) 60 | (closed d25) 61 | (closed d010) 62 | (closed d47) 63 | (closed d89) 64 | (in o1 r2) 65 | (in o2 r8) 66 | (in o3 r10) 67 | (in o4 r6) 68 | (in o5 r10) 69 | (in o6 r1) 70 | (in o7 r2) 71 | (in o8 r2) 72 | (in o9 r6) 73 | (in o10 r10) 74 | (in o11 r1) 75 | (in o12 r9) 76 | (in o13 r9) 77 | (in o14 r10) 78 | (in o15 r4) 79 | (in o16 r2) 80 | (in o17 r3) 81 | (in o18 r6) 82 | (in o19 r3) 83 | (in o20 r4) 84 | (in o21 r3) 85 | (in o22 r6) 86 | (in o23 r10) 87 | (in o24 r9) 88 | (in o25 r3) 89 | (in o26 r8) 90 | (in o27 r3) 91 | (in o28 r6) 92 | (in o29 r4) 93 | (in o30 r4)) 94 | (:goal (and 95 | (in o1 r8) 96 | (in o2 r7) 97 | (in o3 r8) 98 | (in o4 r1) 99 | (in o5 r2) 100 | (in o6 r7) 101 | (in o7 r9) 102 | (in o8 r3) 103 | (in o9 r1) 104 | (in o10 r10) 105 | (in o11 r5) 106 | (in o12 r5) 107 | (in o13 r8) 108 | (in o14 r6) 109 | (in o15 r10) 110 | (in o16 r1) 111 | (in o17 r10) 112 | (in o18 r10) 113 | (in o19 r7) 114 | (in o20 r9) 115 | (in o21 r9) 116 | (in o22 r6) 117 | (in o23 r9) 118 | (in o24 r7) 119 | (in o25 r5) 120 | (in o26 r4) 121 | (in o27 r3) 122 | (in o28 r7) 123 | (in o29 r10) 124 | (in o30 r3)))) -------------------------------------------------------------------------------- /htn-translation.cabal: -------------------------------------------------------------------------------- 1 | Name: htn-translation 2 | Version: 0.3.1 3 | Cabal-Version: >= 1.8 4 | Build-Type: Simple 5 | License: BSD3 6 | License-File: LICENSE 7 | Author: Ron Alford 8 | Maintainer: Ron Alford 9 | Homepage: https://github.com/ronwalf/HTN-Translation 10 | Category: AI 11 | Synopsis: A library for translating HTNs into PDDL domains 12 | Description: HTNTranslation is a program for translating Hierarchical Task Network problems into PDDL. This is an extension of the work described in "Translating HTNs to PDDL," handling both totally ordered and partially ordered subtasks. 13 | 14 | source-repository head 15 | type: git 16 | location: git://github.com/ronwalf/HTN-Translation.git 17 | branch: master 18 | 19 | source-repository this 20 | type: git 21 | location: git://github.com/ronwalf/HTN-Translation.git 22 | tag: release-0.2 23 | 24 | 25 | 26 | Library 27 | Build-Depends: 28 | base >= 4 && < 5, 29 | containers >= 0.2.0.0, 30 | parsec >= 3, 31 | prettyprinter >= 1.2, 32 | mtl >= 1, 33 | syb >= 0.1, 34 | text >= 1.2, 35 | planning >= 0.3 36 | Exposed-modules: 37 | HTNTranslation.HTNPDDL, 38 | HTNTranslation.ADLTranslation, 39 | HTNTranslation.ADLTranslation2, 40 | HTNTranslation.Translation, 41 | HTNTranslation.TOTranslation, 42 | HTNTranslation.TOTranslation09, 43 | HTNTranslation.ProblemLifter, 44 | HTNTranslation.ProgressionBounds, 45 | HTNTranslation.ProgressionMin 46 | Hs-Source-Dirs: src 47 | GHC-Options: -Wall -fprof-auto 48 | 49 | Executable htntranslate 50 | Main-Is: htntranslate.hs 51 | Build-Depends: 52 | base >= 4 && < 5, 53 | containers >= 0.2.0.0, 54 | parsec >= 3, 55 | prettyprinter >= 1.2, 56 | planning >= 0.2, 57 | mtl >= 1, 58 | text >= 1.2, 59 | htn-translation 60 | Hs-Source-Dirs: src-cmdline 61 | GHC-Options: -Wall 62 | 63 | Executable htnunlift 64 | Main-Is: htnunlift.hs 65 | Build-Depends: 66 | base >= 4 && < 5, 67 | containers >= 0.2.0.0, 68 | parsec >= 3, 69 | prettyprinter >= 1.2, 70 | planning >= 0.2, 71 | mtl >= 1, 72 | filepath >= 1.4.0, 73 | text >= 1.2, 74 | htn-translation 75 | Hs-Source-Dirs: src-cmdline 76 | GHC-Options: -Wall 77 | 78 | Executable htntranslate-prof 79 | Main-Is: htntranslate.hs 80 | Build-Depends: 81 | base >= 4 && < 5, 82 | containers >= 0.2.0.0, 83 | parsec >= 3, 84 | prettyprinter >= 1.2, 85 | planning >= 0.2, 86 | mtl >= 1, 87 | text >= 1.2, 88 | htn-translation 89 | Hs-Source-Dirs: src-cmdline 90 | GHC-Options: -Wall -O2 -threaded -fprof-auto "-with-rtsopts=-N -p -s -h -i0.1" 91 | 92 | 93 | -------------------------------------------------------------------------------- /examples/multiarm-blocksworld/problems/pfile_3_035.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_3_035) 3 | (:domain blocks) 4 | (:objects arm1 arm2 arm3 - ARM 5 | b1 6 | b2 7 | b3 8 | b4 9 | b5 10 | b6 11 | b7 12 | b8 13 | b9 14 | b10 15 | b11 16 | b12 17 | b13 18 | b14 19 | b15 20 | b16 21 | b17 22 | b18 23 | b19 24 | b20 25 | b21 26 | b22 27 | b23 28 | b24 29 | b25 30 | b26 31 | b27 32 | b28 33 | b29 34 | b30 35 | b31 36 | b32 37 | b33 38 | b34 39 | b35 40 | - BLOCK) 41 | (:init 42 | (hand-empty arm1) 43 | (hand-empty arm2) 44 | (hand-empty arm3) 45 | (clear b26) 46 | (on-table b34) 47 | (on b26 b11) 48 | (on b11 b17) 49 | (on b17 b1) 50 | (on b1 b14) 51 | (on b14 b18) 52 | (on b18 b13) 53 | (on b13 b34) 54 | (clear b23) 55 | (on-table b31) 56 | (on b23 b28) 57 | (on b28 b12) 58 | (on b12 b31) 59 | (clear b2) 60 | (on-table b27) 61 | (on b2 b25) 62 | (on b25 b33) 63 | (on b33 b27) 64 | (clear b35) 65 | (on-table b20) 66 | (on b35 b20) 67 | (clear b15) 68 | (on-table b10) 69 | (on b15 b10) 70 | (clear b24) 71 | (on-table b9) 72 | (on b24 b3) 73 | (on b3 b32) 74 | (on b32 b6) 75 | (on b6 b22) 76 | (on b22 b9) 77 | (clear b8) 78 | (on-table b8) 79 | (clear b29) 80 | (on-table b5) 81 | (on b29 b7) 82 | (on b7 b16) 83 | (on b16 b19) 84 | (on b19 b21) 85 | (on b21 b4) 86 | (on b4 b30) 87 | (on b30 b5)) 88 | (:goal (and 89 | (clear b25) 90 | (on-table b29) 91 | (on b25 b22) 92 | (on b22 b33) 93 | (on b33 b13) 94 | (on b13 b34) 95 | (on b34 b21) 96 | (on b21 b10) 97 | (on b10 b19) 98 | (on b19 b2) 99 | (on b2 b11) 100 | (on b11 b29) 101 | (clear b5) 102 | (on-table b23) 103 | (on b5 b4) 104 | (on b4 b18) 105 | (on b18 b26) 106 | (on b26 b24) 107 | (on b24 b30) 108 | (on b30 b27) 109 | (on b27 b20) 110 | (on b20 b31) 111 | (on b31 b7) 112 | (on b7 b35) 113 | (on b35 b14) 114 | (on b14 b23) 115 | (clear b3) 116 | (on-table b15) 117 | (on b3 b17) 118 | (on b17 b16) 119 | (on b16 b9) 120 | (on b9 b28) 121 | (on b28 b8) 122 | (on b8 b1) 123 | (on b1 b15) 124 | (clear b32) 125 | (on-table b12) 126 | (on b32 b12) 127 | (clear b6) 128 | (on-table b6)))) -------------------------------------------------------------------------------- /examples/blocksworld/problems/pfile_040.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_040) 3 | (:domain blocks) 4 | (:objects b1 5 | b2 6 | b3 7 | b4 8 | b5 9 | b6 10 | b7 11 | b8 12 | b9 13 | b10 14 | b11 15 | b12 16 | b13 17 | b14 18 | b15 19 | b16 20 | b17 21 | b18 22 | b19 23 | b20 24 | b21 25 | b22 26 | b23 27 | b24 28 | b25 29 | b26 30 | b27 31 | b28 32 | b29 33 | b30 34 | b31 35 | b32 36 | b33 37 | b34 38 | b35 39 | b36 40 | b37 41 | b38 42 | b39 43 | b40 44 | - BLOCK) 45 | (:init 46 | (hand-empty) 47 | (clear b30) 48 | (on-table b37) 49 | (on b30 b37) 50 | (clear b27) 51 | (on-table b24) 52 | (on b27 b22) 53 | (on b22 b3) 54 | (on b3 b35) 55 | (on b35 b28) 56 | (on b28 b38) 57 | (on b38 b31) 58 | (on b31 b19) 59 | (on b19 b2) 60 | (on b2 b26) 61 | (on b26 b21) 62 | (on b21 b29) 63 | (on b29 b34) 64 | (on b34 b14) 65 | (on b14 b18) 66 | (on b18 b39) 67 | (on b39 b25) 68 | (on b25 b24) 69 | (clear b36) 70 | (on-table b11) 71 | (on b36 b11) 72 | (clear b1) 73 | (on-table b10) 74 | (on b1 b13) 75 | (on b13 b40) 76 | (on b40 b4) 77 | (on b4 b33) 78 | (on b33 b15) 79 | (on b15 b32) 80 | (on b32 b9) 81 | (on b9 b23) 82 | (on b23 b10) 83 | (clear b17) 84 | (on-table b6) 85 | (on b17 b8) 86 | (on b8 b5) 87 | (on b5 b20) 88 | (on b20 b7) 89 | (on b7 b16) 90 | (on b16 b12) 91 | (on b12 b6)) 92 | (:goal (and 93 | (clear b34) 94 | (on-table b34) 95 | (clear b36) 96 | (on-table b26) 97 | (on b36 b24) 98 | (on b24 b26) 99 | (clear b40) 100 | (on-table b25) 101 | (on b40 b28) 102 | (on b28 b38) 103 | (on b38 b18) 104 | (on b18 b1) 105 | (on b1 b11) 106 | (on b11 b12) 107 | (on b12 b20) 108 | (on b20 b16) 109 | (on b16 b4) 110 | (on b4 b15) 111 | (on b15 b21) 112 | (on b21 b17) 113 | (on b17 b27) 114 | (on b27 b30) 115 | (on b30 b35) 116 | (on b35 b7) 117 | (on b7 b25) 118 | (clear b32) 119 | (on-table b14) 120 | (on b32 b23) 121 | (on b23 b39) 122 | (on b39 b9) 123 | (on b9 b5) 124 | (on b5 b37) 125 | (on b37 b13) 126 | (on b13 b3) 127 | (on b3 b8) 128 | (on b8 b31) 129 | (on b31 b14) 130 | (clear b19) 131 | (on-table b10) 132 | (on b19 b22) 133 | (on b22 b10) 134 | (clear b2) 135 | (on-table b6) 136 | (on b2 b29) 137 | (on b29 b33) 138 | (on b33 b6)))) -------------------------------------------------------------------------------- /examples/towers/problems/pfile_11.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem tower_problem_11) 3 | (:domain towers) 4 | (:objects t1 t2 t3 - TOWER 5 | r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 - RING) 6 | (:init 7 | (smallerThan r1 t1) 8 | (smallerThan r1 t2) 9 | (smallerThan r1 t3) 10 | (smallerThan r2 t1) 11 | (smallerThan r2 t2) 12 | (smallerThan r2 t3) 13 | (smallerThan r3 t1) 14 | (smallerThan r3 t2) 15 | (smallerThan r3 t3) 16 | (smallerThan r4 t1) 17 | (smallerThan r4 t2) 18 | (smallerThan r4 t3) 19 | (smallerThan r5 t1) 20 | (smallerThan r5 t2) 21 | (smallerThan r5 t3) 22 | (smallerThan r6 t1) 23 | (smallerThan r6 t2) 24 | (smallerThan r6 t3) 25 | (smallerThan r7 t1) 26 | (smallerThan r7 t2) 27 | (smallerThan r7 t3) 28 | (smallerThan r8 t1) 29 | (smallerThan r8 t2) 30 | (smallerThan r8 t3) 31 | (smallerThan r9 t1) 32 | (smallerThan r9 t2) 33 | (smallerThan r9 t3) 34 | (smallerThan r10 t1) 35 | (smallerThan r10 t2) 36 | (smallerThan r10 t3) 37 | (smallerThan r11 t1) 38 | (smallerThan r11 t2) 39 | (smallerThan r11 t3) 40 | (smallerThan r1 r2) 41 | (smallerThan r1 r3) 42 | (smallerThan r1 r4) 43 | (smallerThan r1 r5) 44 | (smallerThan r1 r6) 45 | (smallerThan r1 r7) 46 | (smallerThan r1 r8) 47 | (smallerThan r1 r9) 48 | (smallerThan r1 r10) 49 | (smallerThan r1 r11) 50 | (smallerThan r2 r3) 51 | (smallerThan r2 r4) 52 | (smallerThan r2 r5) 53 | (smallerThan r2 r6) 54 | (smallerThan r2 r7) 55 | (smallerThan r2 r8) 56 | (smallerThan r2 r9) 57 | (smallerThan r2 r10) 58 | (smallerThan r2 r11) 59 | (smallerThan r3 r4) 60 | (smallerThan r3 r5) 61 | (smallerThan r3 r6) 62 | (smallerThan r3 r7) 63 | (smallerThan r3 r8) 64 | (smallerThan r3 r9) 65 | (smallerThan r3 r10) 66 | (smallerThan r3 r11) 67 | (smallerThan r4 r5) 68 | (smallerThan r4 r6) 69 | (smallerThan r4 r7) 70 | (smallerThan r4 r8) 71 | (smallerThan r4 r9) 72 | (smallerThan r4 r10) 73 | (smallerThan r4 r11) 74 | (smallerThan r5 r6) 75 | (smallerThan r5 r7) 76 | (smallerThan r5 r8) 77 | (smallerThan r5 r9) 78 | (smallerThan r5 r10) 79 | (smallerThan r5 r11) 80 | (smallerThan r6 r7) 81 | (smallerThan r6 r8) 82 | (smallerThan r6 r9) 83 | (smallerThan r6 r10) 84 | (smallerThan r6 r11) 85 | (smallerThan r7 r8) 86 | (smallerThan r7 r9) 87 | (smallerThan r7 r10) 88 | (smallerThan r7 r11) 89 | (smallerThan r8 r9) 90 | (smallerThan r8 r10) 91 | (smallerThan r8 r11) 92 | (smallerThan r9 r10) 93 | (smallerThan r9 r11) 94 | (smallerThan r10 r11) 95 | (on r1 r2) 96 | (on r2 r3) 97 | (on r3 r4) 98 | (on r4 r5) 99 | (on r5 r6) 100 | (on r6 r7) 101 | (on r7 r8) 102 | (on r8 r9) 103 | (on r9 r10) 104 | (on r10 r11) 105 | (on r11 t1) 106 | (towerTop r1 t1) 107 | (towerTop t2 t2) 108 | (towerTop t3 t3)) 109 | (:goal (and 110 | (on r1 r2) 111 | (on r2 r3) 112 | (on r3 r4) 113 | (on r4 r5) 114 | (on r5 r6) 115 | (on r6 r7) 116 | (on r7 r8) 117 | (on r8 r9) 118 | (on r9 r10) 119 | (on r10 r11) 120 | (on r11 t3)))) -------------------------------------------------------------------------------- /examples/multiarm-blocksworld/problems/pfile_3_040.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_3_040) 3 | (:domain blocks) 4 | (:objects arm1 arm2 arm3 - ARM 5 | b1 6 | b2 7 | b3 8 | b4 9 | b5 10 | b6 11 | b7 12 | b8 13 | b9 14 | b10 15 | b11 16 | b12 17 | b13 18 | b14 19 | b15 20 | b16 21 | b17 22 | b18 23 | b19 24 | b20 25 | b21 26 | b22 27 | b23 28 | b24 29 | b25 30 | b26 31 | b27 32 | b28 33 | b29 34 | b30 35 | b31 36 | b32 37 | b33 38 | b34 39 | b35 40 | b36 41 | b37 42 | b38 43 | b39 44 | b40 45 | - BLOCK) 46 | (:init 47 | (hand-empty arm1) 48 | (hand-empty arm2) 49 | (hand-empty arm3) 50 | (clear b10) 51 | (on-table b39) 52 | (on b10 b39) 53 | (clear b38) 54 | (on-table b38) 55 | (clear b29) 56 | (on-table b26) 57 | (on b29 b12) 58 | (on b12 b27) 59 | (on b27 b2) 60 | (on b2 b34) 61 | (on b34 b40) 62 | (on b40 b18) 63 | (on b18 b23) 64 | (on b23 b33) 65 | (on b33 b15) 66 | (on b15 b7) 67 | (on b7 b16) 68 | (on b16 b5) 69 | (on b5 b26) 70 | (clear b30) 71 | (on-table b25) 72 | (on b30 b22) 73 | (on b22 b20) 74 | (on b20 b37) 75 | (on b37 b25) 76 | (clear b28) 77 | (on-table b24) 78 | (on b28 b4) 79 | (on b4 b24) 80 | (clear b32) 81 | (on-table b6) 82 | (on b32 b21) 83 | (on b21 b36) 84 | (on b36 b14) 85 | (on b14 b6) 86 | (clear b1) 87 | (on-table b3) 88 | (on b1 b17) 89 | (on b17 b13) 90 | (on b13 b35) 91 | (on b35 b11) 92 | (on b11 b8) 93 | (on b8 b31) 94 | (on b31 b19) 95 | (on b19 b9) 96 | (on b9 b3)) 97 | (:goal (and 98 | (clear b32) 99 | (on-table b38) 100 | (on b32 b36) 101 | (on b36 b39) 102 | (on b39 b35) 103 | (on b35 b38) 104 | (clear b19) 105 | (on-table b29) 106 | (on b19 b29) 107 | (clear b20) 108 | (on-table b22) 109 | (on b20 b3) 110 | (on b3 b6) 111 | (on b6 b26) 112 | (on b26 b22) 113 | (clear b9) 114 | (on-table b16) 115 | (on b9 b37) 116 | (on b37 b23) 117 | (on b23 b8) 118 | (on b8 b25) 119 | (on b25 b7) 120 | (on b7 b14) 121 | (on b14 b27) 122 | (on b27 b33) 123 | (on b33 b21) 124 | (on b21 b16) 125 | (clear b12) 126 | (on-table b13) 127 | (on b12 b28) 128 | (on b28 b13) 129 | (clear b17) 130 | (on-table b11) 131 | (on b17 b10) 132 | (on b10 b40) 133 | (on b40 b15) 134 | (on b15 b11) 135 | (clear b1) 136 | (on-table b5) 137 | (on b1 b18) 138 | (on b18 b30) 139 | (on b30 b4) 140 | (on b4 b31) 141 | (on b31 b24) 142 | (on b24 b34) 143 | (on b34 b5) 144 | (clear b2) 145 | (on-table b2)))) -------------------------------------------------------------------------------- /examples/blocksworld/problems/pfile_045.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_045) 3 | (:domain blocks) 4 | (:objects b1 5 | b2 6 | b3 7 | b4 8 | b5 9 | b6 10 | b7 11 | b8 12 | b9 13 | b10 14 | b11 15 | b12 16 | b13 17 | b14 18 | b15 19 | b16 20 | b17 21 | b18 22 | b19 23 | b20 24 | b21 25 | b22 26 | b23 27 | b24 28 | b25 29 | b26 30 | b27 31 | b28 32 | b29 33 | b30 34 | b31 35 | b32 36 | b33 37 | b34 38 | b35 39 | b36 40 | b37 41 | b38 42 | b39 43 | b40 44 | b41 45 | b42 46 | b43 47 | b44 48 | b45 49 | - BLOCK) 50 | (:init 51 | (hand-empty) 52 | (clear b44) 53 | (on-table b44) 54 | (clear b25) 55 | (on-table b23) 56 | (on b25 b16) 57 | (on b16 b19) 58 | (on b19 b37) 59 | (on b37 b2) 60 | (on b2 b33) 61 | (on b33 b12) 62 | (on b12 b34) 63 | (on b34 b8) 64 | (on b8 b21) 65 | (on b21 b36) 66 | (on b36 b15) 67 | (on b15 b24) 68 | (on b24 b4) 69 | (on b4 b22) 70 | (on b22 b14) 71 | (on b14 b5) 72 | (on b5 b23) 73 | (clear b29) 74 | (on-table b20) 75 | (on b29 b30) 76 | (on b30 b3) 77 | (on b3 b9) 78 | (on b9 b6) 79 | (on b6 b38) 80 | (on b38 b18) 81 | (on b18 b20) 82 | (clear b10) 83 | (on-table b17) 84 | (on b10 b41) 85 | (on b41 b43) 86 | (on b43 b35) 87 | (on b35 b31) 88 | (on b31 b42) 89 | (on b42 b1) 90 | (on b1 b13) 91 | (on b13 b39) 92 | (on b39 b17) 93 | (clear b32) 94 | (on-table b11) 95 | (on b32 b28) 96 | (on b28 b40) 97 | (on b40 b11) 98 | (clear b27) 99 | (on-table b7) 100 | (on b27 b26) 101 | (on b26 b45) 102 | (on b45 b7)) 103 | (:goal (and 104 | (clear b2) 105 | (on-table b38) 106 | (on b2 b22) 107 | (on b22 b42) 108 | (on b42 b23) 109 | (on b23 b45) 110 | (on b45 b1) 111 | (on b1 b30) 112 | (on b30 b36) 113 | (on b36 b43) 114 | (on b43 b6) 115 | (on b6 b4) 116 | (on b4 b15) 117 | (on b15 b25) 118 | (on b25 b24) 119 | (on b24 b19) 120 | (on b19 b12) 121 | (on b12 b41) 122 | (on b41 b44) 123 | (on b44 b33) 124 | (on b33 b14) 125 | (on b14 b39) 126 | (on b39 b40) 127 | (on b40 b8) 128 | (on b8 b38) 129 | (clear b9) 130 | (on-table b21) 131 | (on b9 b11) 132 | (on b11 b32) 133 | (on b32 b27) 134 | (on b27 b26) 135 | (on b26 b28) 136 | (on b28 b18) 137 | (on b18 b35) 138 | (on b35 b17) 139 | (on b17 b13) 140 | (on b13 b34) 141 | (on b34 b10) 142 | (on b10 b21) 143 | (clear b29) 144 | (on-table b16) 145 | (on b29 b5) 146 | (on b5 b31) 147 | (on b31 b37) 148 | (on b37 b7) 149 | (on b7 b20) 150 | (on b20 b3) 151 | (on b3 b16)))) -------------------------------------------------------------------------------- /examples/multiarm-blocksworld/problems/pfile_3_045.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_3_045) 3 | (:domain blocks) 4 | (:objects arm1 arm2 arm3 - ARM 5 | b1 6 | b2 7 | b3 8 | b4 9 | b5 10 | b6 11 | b7 12 | b8 13 | b9 14 | b10 15 | b11 16 | b12 17 | b13 18 | b14 19 | b15 20 | b16 21 | b17 22 | b18 23 | b19 24 | b20 25 | b21 26 | b22 27 | b23 28 | b24 29 | b25 30 | b26 31 | b27 32 | b28 33 | b29 34 | b30 35 | b31 36 | b32 37 | b33 38 | b34 39 | b35 40 | b36 41 | b37 42 | b38 43 | b39 44 | b40 45 | b41 46 | b42 47 | b43 48 | b44 49 | b45 50 | - BLOCK) 51 | (:init 52 | (hand-empty arm1) 53 | (hand-empty arm2) 54 | (hand-empty arm3) 55 | (clear b45) 56 | (on-table b45) 57 | (clear b19) 58 | (on-table b32) 59 | (on b19 b44) 60 | (on b44 b35) 61 | (on b35 b32) 62 | (clear b41) 63 | (on-table b30) 64 | (on b41 b30) 65 | (clear b13) 66 | (on-table b29) 67 | (on b13 b29) 68 | (clear b6) 69 | (on-table b24) 70 | (on b6 b43) 71 | (on b43 b24) 72 | (clear b38) 73 | (on-table b22) 74 | (on b38 b4) 75 | (on b4 b12) 76 | (on b12 b31) 77 | (on b31 b42) 78 | (on b42 b33) 79 | (on b33 b5) 80 | (on b5 b11) 81 | (on b11 b34) 82 | (on b34 b28) 83 | (on b28 b21) 84 | (on b21 b22) 85 | (clear b36) 86 | (on-table b9) 87 | (on b36 b14) 88 | (on b14 b15) 89 | (on b15 b25) 90 | (on b25 b2) 91 | (on b2 b40) 92 | (on b40 b37) 93 | (on b37 b26) 94 | (on b26 b39) 95 | (on b39 b9) 96 | (clear b8) 97 | (on-table b1) 98 | (on b8 b18) 99 | (on b18 b7) 100 | (on b7 b20) 101 | (on b20 b27) 102 | (on b27 b17) 103 | (on b17 b10) 104 | (on b10 b23) 105 | (on b23 b16) 106 | (on b16 b3) 107 | (on b3 b1)) 108 | (:goal (and 109 | (clear b45) 110 | (on-table b17) 111 | (on b45 b29) 112 | (on b29 b8) 113 | (on b8 b33) 114 | (on b33 b13) 115 | (on b13 b14) 116 | (on b14 b25) 117 | (on b25 b26) 118 | (on b26 b44) 119 | (on b44 b42) 120 | (on b42 b7) 121 | (on b7 b5) 122 | (on b5 b39) 123 | (on b39 b24) 124 | (on b24 b9) 125 | (on b9 b34) 126 | (on b34 b22) 127 | (on b22 b27) 128 | (on b27 b43) 129 | (on b43 b12) 130 | (on b12 b38) 131 | (on b38 b21) 132 | (on b21 b30) 133 | (on b30 b10) 134 | (on b10 b16) 135 | (on b16 b1) 136 | (on b1 b3) 137 | (on b3 b2) 138 | (on b2 b23) 139 | (on b23 b17) 140 | (clear b41) 141 | (on-table b15) 142 | (on b41 b6) 143 | (on b6 b11) 144 | (on b11 b20) 145 | (on b20 b35) 146 | (on b35 b18) 147 | (on b18 b15) 148 | (clear b32) 149 | (on-table b4) 150 | (on b32 b19) 151 | (on b19 b28) 152 | (on b28 b37) 153 | (on b37 b31) 154 | (on b31 b36) 155 | (on b36 b40) 156 | (on b40 b4)))) -------------------------------------------------------------------------------- /examples/towers/problems/pfile_12.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem tower_problem_12) 3 | (:domain towers) 4 | (:objects t1 t2 t3 - TOWER 5 | r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 - RING) 6 | (:init 7 | (smallerThan r1 t1) 8 | (smallerThan r1 t2) 9 | (smallerThan r1 t3) 10 | (smallerThan r2 t1) 11 | (smallerThan r2 t2) 12 | (smallerThan r2 t3) 13 | (smallerThan r3 t1) 14 | (smallerThan r3 t2) 15 | (smallerThan r3 t3) 16 | (smallerThan r4 t1) 17 | (smallerThan r4 t2) 18 | (smallerThan r4 t3) 19 | (smallerThan r5 t1) 20 | (smallerThan r5 t2) 21 | (smallerThan r5 t3) 22 | (smallerThan r6 t1) 23 | (smallerThan r6 t2) 24 | (smallerThan r6 t3) 25 | (smallerThan r7 t1) 26 | (smallerThan r7 t2) 27 | (smallerThan r7 t3) 28 | (smallerThan r8 t1) 29 | (smallerThan r8 t2) 30 | (smallerThan r8 t3) 31 | (smallerThan r9 t1) 32 | (smallerThan r9 t2) 33 | (smallerThan r9 t3) 34 | (smallerThan r10 t1) 35 | (smallerThan r10 t2) 36 | (smallerThan r10 t3) 37 | (smallerThan r11 t1) 38 | (smallerThan r11 t2) 39 | (smallerThan r11 t3) 40 | (smallerThan r12 t1) 41 | (smallerThan r12 t2) 42 | (smallerThan r12 t3) 43 | (smallerThan r1 r2) 44 | (smallerThan r1 r3) 45 | (smallerThan r1 r4) 46 | (smallerThan r1 r5) 47 | (smallerThan r1 r6) 48 | (smallerThan r1 r7) 49 | (smallerThan r1 r8) 50 | (smallerThan r1 r9) 51 | (smallerThan r1 r10) 52 | (smallerThan r1 r11) 53 | (smallerThan r1 r12) 54 | (smallerThan r2 r3) 55 | (smallerThan r2 r4) 56 | (smallerThan r2 r5) 57 | (smallerThan r2 r6) 58 | (smallerThan r2 r7) 59 | (smallerThan r2 r8) 60 | (smallerThan r2 r9) 61 | (smallerThan r2 r10) 62 | (smallerThan r2 r11) 63 | (smallerThan r2 r12) 64 | (smallerThan r3 r4) 65 | (smallerThan r3 r5) 66 | (smallerThan r3 r6) 67 | (smallerThan r3 r7) 68 | (smallerThan r3 r8) 69 | (smallerThan r3 r9) 70 | (smallerThan r3 r10) 71 | (smallerThan r3 r11) 72 | (smallerThan r3 r12) 73 | (smallerThan r4 r5) 74 | (smallerThan r4 r6) 75 | (smallerThan r4 r7) 76 | (smallerThan r4 r8) 77 | (smallerThan r4 r9) 78 | (smallerThan r4 r10) 79 | (smallerThan r4 r11) 80 | (smallerThan r4 r12) 81 | (smallerThan r5 r6) 82 | (smallerThan r5 r7) 83 | (smallerThan r5 r8) 84 | (smallerThan r5 r9) 85 | (smallerThan r5 r10) 86 | (smallerThan r5 r11) 87 | (smallerThan r5 r12) 88 | (smallerThan r6 r7) 89 | (smallerThan r6 r8) 90 | (smallerThan r6 r9) 91 | (smallerThan r6 r10) 92 | (smallerThan r6 r11) 93 | (smallerThan r6 r12) 94 | (smallerThan r7 r8) 95 | (smallerThan r7 r9) 96 | (smallerThan r7 r10) 97 | (smallerThan r7 r11) 98 | (smallerThan r7 r12) 99 | (smallerThan r8 r9) 100 | (smallerThan r8 r10) 101 | (smallerThan r8 r11) 102 | (smallerThan r8 r12) 103 | (smallerThan r9 r10) 104 | (smallerThan r9 r11) 105 | (smallerThan r9 r12) 106 | (smallerThan r10 r11) 107 | (smallerThan r10 r12) 108 | (smallerThan r11 r12) 109 | (on r1 r2) 110 | (on r2 r3) 111 | (on r3 r4) 112 | (on r4 r5) 113 | (on r5 r6) 114 | (on r6 r7) 115 | (on r7 r8) 116 | (on r8 r9) 117 | (on r9 r10) 118 | (on r10 r11) 119 | (on r11 r12) 120 | (on r12 t1) 121 | (towerTop r1 t1) 122 | (towerTop t2 t2) 123 | (towerTop t3 t3)) 124 | (:goal (and 125 | (on r1 r2) 126 | (on r2 r3) 127 | (on r3 r4) 128 | (on r4 r5) 129 | (on r5 r6) 130 | (on r6 r7) 131 | (on r7 r8) 132 | (on r8 r9) 133 | (on r9 r10) 134 | (on r10 r11) 135 | (on r11 r12) 136 | (on r12 t3)))) -------------------------------------------------------------------------------- /examples/blocksworld/domain.hpddl: -------------------------------------------------------------------------------- 1 | (define (domain blocks) 2 | (:requirements :strips :negative-preconditions) 3 | (:types BLOCK) 4 | (:predicates 5 | (hand-empty) 6 | (clear ?b - BLOCK) 7 | (holding ?b - BLOCK) 8 | (on ?top - BLOCK ?bottom - BLOCK) 9 | (on-table ?b - BLOCK) 10 | (goal_on ?t - BLOCK ?b - BLOCK) 11 | (goal_on-table ?b - BLOCK) 12 | (goal_clear ?b - BLOCK) 13 | (done ?b - BLOCK)) 14 | (:tasks 15 | (achieve-goals) 16 | (release) 17 | (putdown ?b - BLOCK) 18 | (stack ?b ?d - BLOCK) 19 | (acquire ?b - BLOCK)) 20 | 21 | (:method mark-done-table 22 | :task (achieve-goals) 23 | :parameters (?b - BLOCK) 24 | :precondition (and (goal_on-table ?b) (on-table ?b)) 25 | :effect (done ?b) 26 | :tasks ((achieve-goals))) 27 | 28 | (:method mark-done-on 29 | :task (achieve-goals) 30 | :parameters (?b - BLOCK) 31 | :precondition (exists (?d - BLOCK) (and (goal_on ?b ?d) (on ?b ?d) (done ?d))) 32 | :effect (done ?b) 33 | :tasks ((achieve-goals))) 34 | 35 | (:method pickup-ready-block 36 | :task (achieve-goals) 37 | :parameters (?b - BLOCK) 38 | :precondition (and (clear ?b) (not (done ?b)) 39 | (exists (?d - BLOCK) (and 40 | (goal_on ?b ?d) 41 | (done ?d) 42 | (clear ?d)))) 43 | :tasks ((acquire ?b) (release))) 44 | 45 | (:method unstack-block 46 | :task (achieve-goals) 47 | :parameters (?b - BLOCK) 48 | :precondition (and 49 | (clear ?b) 50 | (not (done ?b)) 51 | (not (on-table ?b))) 52 | :tasks ((acquire ?b) (release))) 53 | 54 | (:method release-stack 55 | :task (release) 56 | :parameters (?b ?d - BLOCK) 57 | :precondition (and (holding ?b) (goal_on ?b ?d) (done ?d) (clear ?d)) 58 | :effect (and (not (goal_on ?b ?d)) (done ?b)) 59 | :tasks ((stack ?b ?d) (achieve-goals))) 60 | 61 | (:method release-table-done 62 | :task (release) 63 | :parameters (?b - BLOCK) 64 | :precondition (and (holding ?b) (goal_on-table ?b)) 65 | :effect (done ?b) 66 | :tasks ((putdown ?b) (achieve-goals))) 67 | 68 | (:method release-table 69 | :task (release) 70 | :parameters (?b - BLOCK) 71 | :precondition (and (holding ?b) (not (goal_on-table ?b))) 72 | :tasks ((putdown ?b) (achieve-goals))) 73 | 74 | (:method done 75 | :task (achieve-goals) 76 | :precondition (forall (?b - BLOCK) (done ?b))) 77 | 78 | (:action pickup 79 | :parameters (?b - BLOCK) 80 | :task (acquire ?b) 81 | :precondition (and (hand-empty) (clear ?b) (on-table ?b)) 82 | :effect (and 83 | (not (hand-empty)) 84 | (not (clear ?b)) 85 | (not (on-table ?b)) 86 | (holding ?b))) 87 | 88 | (:action putdown 89 | :parameters (?b - BLOCK) 90 | :task (putdown ?b) 91 | :precondition (holding ?b) 92 | :effect (and 93 | (hand-empty) 94 | (not (holding ?b)) 95 | (on-table ?b) (clear ?b))) 96 | 97 | (:action stack 98 | :parameters (?top - BLOCK ?bottom - BLOCK) 99 | :task (stack ?top ?bottom) 100 | :precondition (and 101 | (holding ?top) 102 | (clear ?bottom)) 103 | :effect (and 104 | (hand-empty) 105 | (not (holding ?top)) 106 | (not (clear ?bottom)) 107 | (on ?top ?bottom) 108 | (clear ?top))) 109 | 110 | (:action unstack 111 | :parameters (?top - BLOCK ?bottom - BLOCK) 112 | :task (acquire ?top) 113 | :precondition (and 114 | (hand-empty) 115 | (clear ?top) 116 | (on ?top ?bottom)) 117 | :effect (and 118 | (not (hand-empty)) 119 | (not (clear ?top)) 120 | (not (on ?top ?bottom)) 121 | (holding ?top) 122 | (clear ?bottom)))) 123 | 124 | -------------------------------------------------------------------------------- /examples/robot/RandomUtils.hs: -------------------------------------------------------------------------------- 1 | -- Randomness Utilities 2 | module RandomUtils ( 3 | allPaths, 4 | mkRandomPaths, 5 | newRandomList, 6 | newRandomNamedList, 7 | permute, 8 | treeNodes 9 | ) where 10 | 11 | import Data.Graph.Inductive 12 | import Data.Graph.Inductive.Query.MST 13 | import Data.List 14 | import System.Random 15 | 16 | 17 | -- Cartesian product 18 | cartesianProduct :: [a] -> [(a,a)] 19 | cartesianProduct = 20 | (snd . collect) 21 | where 22 | pair x y = (x,y) 23 | collect = 24 | foldr (\x (l,c) -> (x:l, (map (pair x) l) ++ c)) ([],[]) 25 | 26 | -- Make a complete graph from the given edge labels 27 | mkComplete :: Int -> [Float] -> Gr () Float 28 | mkComplete size weights = 29 | let 30 | nodes = take size $ zip (iterate (+1) 1) (repeat ()) 31 | edges = cartesianProduct $ take size $ map fst nodes 32 | ledges = zipWith (\(x, y) w -> (x, y, w)) edges weights 33 | in 34 | undir $ mkGraph nodes ledges 35 | 36 | 37 | -- Make a random tree of the given size, with node 38 | -- labels from [1..size] 39 | mkRandomTree size = do 40 | root <- getStdRandom ( randomR (1, size) ) 41 | gen <- newStdGen 42 | let weights = randomRs (0, 1) gen in 43 | return $ msTreeAt root $ mkComplete size weights 44 | 45 | 46 | -- Makes a random tree of the given size, returning 47 | -- (parent, child) pairs labeled with the given function. 48 | mkRandomPaths :: Int -> ( Int -> a ) -> IO [(a, a)] 49 | mkRandomPaths size naming = do 50 | tree <- mkRandomTree size 51 | return $ map (\(x:y:t) -> (y, x)) $ named tree 52 | where 53 | paths tree = filter (\(LP x) -> 1 < length x) tree 54 | named tree= map (\(LP path) -> map (\(x, _) -> naming x) path) $ paths tree 55 | -- 56 | -- Path Finding 57 | -- 58 | 59 | -- Get the root node of a tree 60 | root :: [(a,a)] -> a 61 | root t = 62 | fst $ head t 63 | 64 | -- Get all nodes of a tree 65 | treeNodes :: [(a,a)] -> [a] 66 | treeNodes t = 67 | (root t) : (map snd t) 68 | 69 | -- Find all parents of a node (in order) 70 | parents :: Eq a => a -> [(a, a)] -> [a] 71 | parents n = 72 | foldr addParent [n] 73 | where 74 | addParent (p,c) (n:l) | n==c = p : n : l 75 | | otherwise = n : l 76 | 77 | -- Take two paths starting at a common node and find the minimal path between them 78 | path :: Eq a => [a] -> [a] -> [a] 79 | path l1 l2 = 80 | let 81 | (s2, rs1, h) = foldl builder (l2, [], head l1) l1 82 | in 83 | concat [rs1, [h], s2] 84 | where 85 | builder ([], r, h) a = ( [], a:r, h ) 86 | builder (x:l, r, h) a 87 | | x==a = ( l, r, x ) 88 | | otherwise = ( x:l, a:r, h ) 89 | 90 | -- Find a path between two nodes in the given tree 91 | findPath :: Eq a => [(a,a)] -> a -> a -> [a] 92 | findPath t n1 n2 = 93 | let 94 | p1 = parents n1 t 95 | p2 = parents n2 t 96 | in 97 | path p1 p2 98 | 99 | allPaths :: Eq a => [(a,a)] -> [[a]] 100 | allPaths t = 101 | foldr (\ (x,y) l -> (bothPaths t x y)++l) [] $ cartesianProduct $ treeNodes t 102 | where 103 | bothPaths t n1 n2 = 104 | let 105 | pth = findPath t n1 n2 106 | in 107 | [pth, reverse pth] 108 | 109 | 110 | 111 | newRandomList x = do 112 | --getStdRandom ( randomR (0.0 :: Float, 1.1) ) 113 | gen <- newStdGen 114 | return $ randomRs x gen 115 | 116 | newRandomNamedList x naming = do 117 | rl <- newRandomList x 118 | return $ map naming rl 119 | 120 | 121 | permute l = do 122 | rl <- newRandomList (0.0 :: Float, 1.0) 123 | let zl = zip rl l 124 | let sorted = sort zl 125 | return $ map snd sorted 126 | -------------------------------------------------------------------------------- /examples/blocksworld/problems/pfile_050.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_050) 3 | (:domain blocks) 4 | (:objects b1 5 | b2 6 | b3 7 | b4 8 | b5 9 | b6 10 | b7 11 | b8 12 | b9 13 | b10 14 | b11 15 | b12 16 | b13 17 | b14 18 | b15 19 | b16 20 | b17 21 | b18 22 | b19 23 | b20 24 | b21 25 | b22 26 | b23 27 | b24 28 | b25 29 | b26 30 | b27 31 | b28 32 | b29 33 | b30 34 | b31 35 | b32 36 | b33 37 | b34 38 | b35 39 | b36 40 | b37 41 | b38 42 | b39 43 | b40 44 | b41 45 | b42 46 | b43 47 | b44 48 | b45 49 | b46 50 | b47 51 | b48 52 | b49 53 | b50 54 | - BLOCK) 55 | (:init 56 | (hand-empty) 57 | (clear b47) 58 | (on-table b50) 59 | (on b47 b2) 60 | (on b2 b50) 61 | (clear b37) 62 | (on-table b46) 63 | (on b37 b7) 64 | (on b7 b20) 65 | (on b20 b35) 66 | (on b35 b41) 67 | (on b41 b29) 68 | (on b29 b40) 69 | (on b40 b11) 70 | (on b11 b46) 71 | (clear b28) 72 | (on-table b42) 73 | (on b28 b21) 74 | (on b21 b43) 75 | (on b43 b4) 76 | (on b4 b45) 77 | (on b45 b42) 78 | (clear b25) 79 | (on-table b3) 80 | (on b25 b16) 81 | (on b16 b39) 82 | (on b39 b30) 83 | (on b30 b15) 84 | (on b15 b9) 85 | (on b9 b19) 86 | (on b19 b10) 87 | (on b10 b48) 88 | (on b48 b12) 89 | (on b12 b33) 90 | (on b33 b31) 91 | (on b31 b22) 92 | (on b22 b8) 93 | (on b8 b14) 94 | (on b14 b36) 95 | (on b36 b27) 96 | (on b27 b13) 97 | (on b13 b32) 98 | (on b32 b18) 99 | (on b18 b23) 100 | (on b23 b49) 101 | (on b49 b24) 102 | (on b24 b5) 103 | (on b5 b3) 104 | (clear b38) 105 | (on-table b1) 106 | (on b38 b44) 107 | (on b44 b26) 108 | (on b26 b34) 109 | (on b34 b17) 110 | (on b17 b6) 111 | (on b6 b1)) 112 | (:goal (and 113 | (clear b46) 114 | (on-table b47) 115 | (on b46 b20) 116 | (on b20 b47) 117 | (clear b23) 118 | (on-table b35) 119 | (on b23 b6) 120 | (on b6 b35) 121 | (clear b29) 122 | (on-table b30) 123 | (on b29 b24) 124 | (on b24 b28) 125 | (on b28 b15) 126 | (on b15 b32) 127 | (on b32 b42) 128 | (on b42 b43) 129 | (on b43 b30) 130 | (clear b31) 131 | (on-table b26) 132 | (on b31 b26) 133 | (clear b22) 134 | (on-table b16) 135 | (on b22 b12) 136 | (on b12 b44) 137 | (on b44 b27) 138 | (on b27 b10) 139 | (on b10 b2) 140 | (on b2 b5) 141 | (on b5 b38) 142 | (on b38 b1) 143 | (on b1 b19) 144 | (on b19 b36) 145 | (on b36 b17) 146 | (on b17 b9) 147 | (on b9 b3) 148 | (on b3 b16) 149 | (clear b14) 150 | (on-table b13) 151 | (on b14 b7) 152 | (on b7 b13) 153 | (clear b37) 154 | (on-table b4) 155 | (on b37 b48) 156 | (on b48 b33) 157 | (on b33 b41) 158 | (on b41 b8) 159 | (on b8 b18) 160 | (on b18 b11) 161 | (on b11 b45) 162 | (on b45 b34) 163 | (on b34 b39) 164 | (on b39 b25) 165 | (on b25 b40) 166 | (on b40 b49) 167 | (on b49 b50) 168 | (on b50 b21) 169 | (on b21 b4)))) -------------------------------------------------------------------------------- /examples/robot/test.hpddl: -------------------------------------------------------------------------------- 1 | ;; Tests planning performance when explicitly putting move parameters in task names 2 | (define (domain robot) 3 | (:requirements :strips :negative-preconditions :typing) 4 | (:types PACKAGE ROOM ROOMDOOR) 5 | (:predicates 6 | (armempty) 7 | (rloc ?loc - ROOM) 8 | (in ?obj - PACKAGE ?loc - ROOM) 9 | (holding ?obj - PACKAGE) 10 | (closed ?d - ROOMDOOR) 11 | (door ?loc1 - ROOM ?loc2 - ROOM ?d - ROOMDOOR) 12 | 13 | (goal_in ?obj - PACKAGE ?loc - ROOM)) 14 | (:tasks 15 | (achieve-goals) 16 | (release ?loc1 - ROOM ?loc2 - ROOM) 17 | (pickup ?obj - PACKAGE) 18 | (putdown) 19 | (move ?loc - ROOM) 20 | (travel ?loc1 - ROOM ?loc2 - ROOM) 21 | (open)) 22 | 23 | (:action pickup 24 | :parameters (?obj - PACKAGE ?loc - ROOM) 25 | :task (pickup ?obj) 26 | :precondition (and (armempty) (rloc ?loc) (in ?obj ?loc)) 27 | :effect (and (not (in ?obj ?loc)) (not (armempty)) (holding ?obj)) 28 | ) 29 | 30 | (:action putdown 31 | :parameters (?obj - PACKAGE ?loc - ROOM) 32 | :task (putdown) 33 | :precondition (and (rloc ?loc) (holding ?obj) (goal_in ?obj ?loc)) 34 | :effect (and (not (holding ?obj)) (armempty) (in ?obj ?loc)) 35 | ) 36 | 37 | (:action move 38 | :parameters (?loc1 - ROOM ?loc2 - ROOM ?d - ROOMDOOR) 39 | :task (move ?loc2) 40 | :precondition (and (rloc ?loc1) (door ?loc1 ?loc2 ?d) (not (closed ?d))) 41 | :effect (and (rloc ?loc2) (not (rloc ?loc1))) 42 | ) 43 | 44 | (:action open 45 | :parameters (?loc1 - ROOM ?loc2 - ROOM ?d - ROOMDOOR) 46 | :task (open) 47 | :precondition (and (rloc ?loc1) (door ?loc1 ?loc2 ?d) (closed ?d)) 48 | :effect (and (not (closed ?d))) 49 | ) 50 | 51 | (:method release-putdown 52 | :task (release ?loc ?loc) 53 | :parameters (?loc - ROOM) 54 | :precondition (and (rloc ?loc) (exists (?obj - PACKAGE) (and 55 | (holding ?obj) 56 | (goal_in ?obj ?loc)))) 57 | :tasks ((putdown) (achieve-goals))) 58 | 59 | (:method release-move 60 | :parameters (?loc ?loc1 ?loc2 - ROOM) 61 | :task (release ?loc ?loc2) 62 | :precondition (and (rloc ?loc) (exists (?d - ROOMDOOR) (and 63 | (door ?loc ?loc1 ?d) (not (closed ?d))))) 64 | :tasks ((move ?loc1) (release ?loc1 ?loc2))) 65 | 66 | (:method release-open 67 | :parameters (?loc1 ?loc2 - ROOM) 68 | :task (release ?loc1 ?loc2) 69 | :precondition (and (rloc ?loc1) (exists (?loc - ROOM ?d - ROOMDOOR) (and 70 | (door ?loc1 ?loc ?d) (closed ?d)))) 71 | :tasks ((open) (release ?loc1 ?loc2))) 72 | 73 | 74 | (:method travel-pickup 75 | :parameters (?loc1 ?loc2 - ROOM ?obj - PACKAGE) 76 | :task (travel ?loc1 ?loc1) 77 | :precondition (and 78 | (rloc ?loc1) 79 | (in ?obj ?loc1) 80 | (not (goal_in ?obj ?loc1))) 81 | :tasks ((pickup ?obj) (release ?loc1 ?loc2))) 82 | 83 | (:method travel-move 84 | :parameters (?loc ?loc1 ?loc2 - ROOM) 85 | :task (travel ?loc ?loc2) 86 | :precondition (and (rloc ?loc) (exists (?d - ROOMDOOR) (and 87 | (door ?loc ?loc1 ?d) (not (closed ?d))))) 88 | :tasks ((move ?loc1) (travel ?loc1 ?loc2))) 89 | 90 | (:method travel-open 91 | :parameters (?loc1 ?loc2 - ROOM) 92 | :task (travel ?loc1 ?loc2) 93 | :precondition (and (rloc ?loc1) (exists (?loc - ROOM ?d - ROOMDOOR) (and 94 | (door ?loc1 ?loc ?d) (closed ?d)))) 95 | :tasks ((open) (travel ?loc1 ?loc2))) 96 | 97 | 98 | (:method select-package 99 | :parameters (?loc1 ?loc2 - ROOM) 100 | :task (achieve-goals) 101 | :precondition (and (rloc ?loc1) (exists (?p - PACKAGE) (and 102 | (in ?p ?loc2) 103 | (not (goal_in ?p ?loc2))))) 104 | :tasks ((travel ?loc1 ?loc2))) 105 | 106 | (:method finished 107 | :task (achieve-goals) 108 | :precondition (forall (?obj - PACKAGE) 109 | (exists (?loc - ROOM) (and 110 | (goal_in ?obj ?loc) 111 | (in ?obj ?loc)))))) 112 | -------------------------------------------------------------------------------- /examples/robot/problems/pfile_30_10.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_30_10) 3 | (:domain robot) 4 | (:objects o1 o2 o3 o4 o5 o6 o7 o8 o9 o10 - PACKAGE 5 | c 6 | r1 7 | r2 8 | r3 9 | r4 10 | r5 11 | r6 12 | r7 13 | r8 14 | r9 15 | r10 16 | r11 17 | r12 18 | r13 19 | r14 20 | r15 21 | r16 22 | r17 23 | r18 24 | r19 25 | r20 26 | r21 27 | r22 28 | r23 29 | r24 30 | r25 31 | r26 32 | r27 33 | r28 34 | r29 35 | r30 36 | - ROOM 37 | d1214 38 | d1422 39 | d822 40 | d823 41 | d1523 42 | d2326 43 | d2330 44 | d2730 45 | d1130 46 | d1113 47 | d230 48 | d630 49 | d610 50 | d1021 51 | d1721 52 | d315 53 | d1218 54 | d1216 55 | d026 56 | d04 57 | d45 58 | d819 59 | d1129 60 | d112 61 | d17 62 | d69 63 | d820 64 | d2024 65 | d2428 66 | d725 67 | - ROOMDOOR) 68 | (:init 69 | (rloc c) 70 | (armempty) 71 | (door c r4 d04) 72 | (door c r26 d026) 73 | (door r1 r7 d17) 74 | (door r1 r12 d112) 75 | (door r2 r30 d230) 76 | (door r3 r15 d315) 77 | (door r4 c d04) 78 | (door r4 r5 d45) 79 | (door r5 r4 d45) 80 | (door r6 r9 d69) 81 | (door r6 r10 d610) 82 | (door r6 r30 d630) 83 | (door r7 r1 d17) 84 | (door r7 r25 d725) 85 | (door r8 r19 d819) 86 | (door r8 r20 d820) 87 | (door r8 r22 d822) 88 | (door r8 r23 d823) 89 | (door r9 r6 d69) 90 | (door r10 r6 d610) 91 | (door r10 r21 d1021) 92 | (door r11 r13 d1113) 93 | (door r11 r29 d1129) 94 | (door r11 r30 d1130) 95 | (door r12 r1 d112) 96 | (door r12 r14 d1214) 97 | (door r12 r16 d1216) 98 | (door r12 r18 d1218) 99 | (door r13 r11 d1113) 100 | (door r14 r12 d1214) 101 | (door r14 r22 d1422) 102 | (door r15 r3 d315) 103 | (door r15 r23 d1523) 104 | (door r16 r12 d1216) 105 | (door r17 r21 d1721) 106 | (door r18 r12 d1218) 107 | (door r19 r8 d819) 108 | (door r20 r8 d820) 109 | (door r20 r24 d2024) 110 | (door r21 r10 d1021) 111 | (door r21 r17 d1721) 112 | (door r22 r8 d822) 113 | (door r22 r14 d1422) 114 | (door r23 r8 d823) 115 | (door r23 r15 d1523) 116 | (door r23 r26 d2326) 117 | (door r23 r30 d2330) 118 | (door r24 r20 d2024) 119 | (door r24 r28 d2428) 120 | (door r25 r7 d725) 121 | (door r26 c d026) 122 | (door r26 r23 d2326) 123 | (door r27 r30 d2730) 124 | (door r28 r24 d2428) 125 | (door r29 r11 d1129) 126 | (door r30 r2 d230) 127 | (door r30 r6 d630) 128 | (door r30 r11 d1130) 129 | (door r30 r23 d2330) 130 | (door r30 r27 d2730) 131 | (closed d1214) 132 | (closed d2330) 133 | (closed d1130) 134 | (closed d230) 135 | (closed d630) 136 | (closed d1021) 137 | (closed d1721) 138 | (closed d026) 139 | (closed d45) 140 | (closed d1129) 141 | (closed d17) 142 | (closed d69) 143 | (closed d2428) 144 | (closed d725) 145 | (in o1 r3) 146 | (in o2 r18) 147 | (in o3 r13) 148 | (in o4 r19) 149 | (in o5 r8) 150 | (in o6 r27) 151 | (in o7 r6) 152 | (in o8 r18) 153 | (in o9 r18) 154 | (in o10 r19)) 155 | (:goal (and 156 | (in o1 r23) 157 | (in o2 r30) 158 | (in o3 r19) 159 | (in o4 r6) 160 | (in o5 r8) 161 | (in o6 r9) 162 | (in o7 r1) 163 | (in o8 r8) 164 | (in o9 r1) 165 | (in o10 r8)))) -------------------------------------------------------------------------------- /examples/multiarm-blocksworld/domain.hpddl: -------------------------------------------------------------------------------- 1 | (define (domain blocks) 2 | (:requirements :strips) 3 | (:types ARM BLOCK) 4 | (:predicates 5 | (hand-empty ?a - ARM) 6 | (clear ?b - BLOCK) 7 | (holding ?b - BLOCK ?a - ARM) 8 | (on ?top - BLOCK ?bottom - BLOCK) 9 | (on-table ?b - BLOCK) 10 | (goal_on ?t - BLOCK ?b - BLOCK) 11 | (goal_on-table ?b - BLOCK) 12 | (goal_clear ?b - BLOCK) 13 | (done ?b - BLOCK)) 14 | (:tasks 15 | (achieve-goals ?a - ARM) 16 | (release ?a - ARM) 17 | (putdown ?b - BLOCK) 18 | (stack ?b ?d - BLOCK) 19 | (acquire ?b - BLOCK ?a - ARM)) 20 | 21 | (:method mark-done-table 22 | :task (achieve-goals ?a) 23 | :parameters (?b - BLOCK ?a - ARM) 24 | :precondition (and (goal_on-table ?b) (on-table ?b)) 25 | :effect (done ?b) 26 | :tasks ((achieve-goals ?a))) 27 | 28 | (:method mark-done-on 29 | :task (achieve-goals ?a) 30 | :parameters (?b ?d - BLOCK ?a - ARM) 31 | :precondition (and (goal_on ?b ?d) (on ?b ?d) (done ?d)) 32 | :effect (done ?b) 33 | :tasks ((achieve-goals ?a))) 34 | 35 | (:method pickup-ready-block 36 | :task (achieve-goals ?a) 37 | :parameters (?b ?d - BLOCK ?a - ARM) 38 | :precondition (and (clear ?b) (on-table ?b) (goal_on ?b ?d) (done ?d) (clear ?d)) 39 | :tasks ((acquire ?b ?a) (release ?a))) 40 | 41 | (:method unstack-block 42 | :task (achieve-goals ?a) 43 | :parameters (?b - BLOCK ?a - ARM) 44 | :precondition (and (clear ?b) 45 | (exists (?d - BLOCK) (on ?b ?d))) 46 | :tasks ((acquire ?b ?a) (release ?a))) 47 | 48 | (:method release-stack 49 | :task (release ?a) 50 | :parameters (?b ?d - BLOCK ?a - ARM) 51 | :precondition (and (holding ?b ?a) (goal_on ?b ?d) (done ?d) (clear ?d)) 52 | :effect (and (not (goal_on ?b ?d)) (done ?b)) 53 | :tasks ((stack ?b ?d) (achieve-goals ?a))) 54 | 55 | (:method release-table-done 56 | :task (release ?a) 57 | :parameters (?b - BLOCK ?a - ARM) 58 | :precondition (and (holding ?b ?a) (goal_on-table ?b)) 59 | :effect (and (not (goal_on-table ?b)) (done ?b)) 60 | :tasks ((putdown ?b) (achieve-goals ?a))) 61 | 62 | (:method release-table 63 | :task (release ?a) 64 | :parameters (?b - BLOCK ?a - ARM) 65 | :precondition (and (holding ?b ?a) (not (goal_on-table ?b))) 66 | :tasks ((putdown ?b) (achieve-goals ?a))) 67 | 68 | (:method done 69 | :parameters (?a - ARM) 70 | :precondition (forall (?b - BLOCK) (done ?b)) 71 | :task (achieve-goals ?a)) 72 | 73 | (:action pickup 74 | :parameters (?b - BLOCK ?a - ARM) 75 | :task (acquire ?b ?a) 76 | :precondition (and (hand-empty ?a) (clear ?b) (on-table ?b)) 77 | :effect (and 78 | (not (hand-empty ?a)) 79 | (not (clear ?b)) 80 | (not (on-table ?b)) 81 | (holding ?b ?a))) 82 | 83 | (:action putdown 84 | :parameters (?b - BLOCK ?a - ARM) 85 | :task (putdown ?b) 86 | :precondition (holding ?b ?a) 87 | :effect (and 88 | (hand-empty ?a) 89 | (not (holding ?b ?a)) 90 | (on-table ?b) (clear ?b))) 91 | 92 | (:action stack 93 | :parameters (?top ?bottom - BLOCK ?a - ARM) 94 | :task (stack ?top ?bottom) 95 | :precondition (and 96 | (holding ?top ?a) 97 | (clear ?bottom)) 98 | :effect (and 99 | (hand-empty ?a) 100 | (not (holding ?top ?a)) 101 | (not (clear ?bottom)) 102 | (on ?top ?bottom) 103 | (clear ?top))) 104 | 105 | (:action unstack 106 | :parameters (?top - BLOCK ?bottom - BLOCK ?a - ARM) 107 | :task (acquire ?top ?a) 108 | :precondition (and 109 | (hand-empty ?a) 110 | (clear ?top) 111 | (on ?top ?bottom)) 112 | :effect (and 113 | (not (hand-empty ?a)) 114 | (not (clear ?top)) 115 | (not (on ?top ?bottom)) 116 | (holding ?top ?a) 117 | (clear ?bottom)))) 118 | 119 | -------------------------------------------------------------------------------- /examples/multiarm-blocksworld/problems/pfile_3_050.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_3_050) 3 | (:domain blocks) 4 | (:objects arm1 arm2 arm3 - ARM 5 | b1 6 | b2 7 | b3 8 | b4 9 | b5 10 | b6 11 | b7 12 | b8 13 | b9 14 | b10 15 | b11 16 | b12 17 | b13 18 | b14 19 | b15 20 | b16 21 | b17 22 | b18 23 | b19 24 | b20 25 | b21 26 | b22 27 | b23 28 | b24 29 | b25 30 | b26 31 | b27 32 | b28 33 | b29 34 | b30 35 | b31 36 | b32 37 | b33 38 | b34 39 | b35 40 | b36 41 | b37 42 | b38 43 | b39 44 | b40 45 | b41 46 | b42 47 | b43 48 | b44 49 | b45 50 | b46 51 | b47 52 | b48 53 | b49 54 | b50 55 | - BLOCK) 56 | (:init 57 | (hand-empty arm1) 58 | (hand-empty arm2) 59 | (hand-empty arm3) 60 | (clear b43) 61 | (on-table b38) 62 | (on b43 b10) 63 | (on b10 b49) 64 | (on b49 b47) 65 | (on b47 b15) 66 | (on b15 b31) 67 | (on b31 b38) 68 | (clear b28) 69 | (on-table b33) 70 | (on b28 b19) 71 | (on b19 b33) 72 | (clear b32) 73 | (on-table b21) 74 | (on b32 b21) 75 | (clear b40) 76 | (on-table b17) 77 | (on b40 b16) 78 | (on b16 b17) 79 | (clear b5) 80 | (on-table b3) 81 | (on b5 b4) 82 | (on b4 b25) 83 | (on b25 b20) 84 | (on b20 b8) 85 | (on b8 b27) 86 | (on b27 b45) 87 | (on b45 b9) 88 | (on b9 b39) 89 | (on b39 b3) 90 | (clear b24) 91 | (on-table b1) 92 | (on b24 b14) 93 | (on b14 b37) 94 | (on b37 b42) 95 | (on b42 b12) 96 | (on b12 b35) 97 | (on b35 b50) 98 | (on b50 b6) 99 | (on b6 b41) 100 | (on b41 b48) 101 | (on b48 b44) 102 | (on b44 b29) 103 | (on b29 b22) 104 | (on b22 b7) 105 | (on b7 b34) 106 | (on b34 b13) 107 | (on b13 b18) 108 | (on b18 b23) 109 | (on b23 b26) 110 | (on b26 b2) 111 | (on b2 b11) 112 | (on b11 b36) 113 | (on b36 b30) 114 | (on b30 b46) 115 | (on b46 b1)) 116 | (:goal (and 117 | (clear b48) 118 | (on-table b48) 119 | (clear b23) 120 | (on-table b38) 121 | (on b23 b38) 122 | (clear b44) 123 | (on-table b36) 124 | (on b44 b2) 125 | (on b2 b19) 126 | (on b19 b39) 127 | (on b39 b1) 128 | (on b1 b50) 129 | (on b50 b27) 130 | (on b27 b36) 131 | (clear b3) 132 | (on-table b35) 133 | (on b3 b4) 134 | (on b4 b46) 135 | (on b46 b49) 136 | (on b49 b24) 137 | (on b24 b35) 138 | (clear b9) 139 | (on-table b26) 140 | (on b9 b31) 141 | (on b31 b18) 142 | (on b18 b11) 143 | (on b11 b26) 144 | (clear b43) 145 | (on-table b21) 146 | (on b43 b21) 147 | (clear b47) 148 | (on-table b15) 149 | (on b47 b12) 150 | (on b12 b29) 151 | (on b29 b16) 152 | (on b16 b10) 153 | (on b10 b25) 154 | (on b25 b8) 155 | (on b8 b45) 156 | (on b45 b33) 157 | (on b33 b28) 158 | (on b28 b34) 159 | (on b34 b5) 160 | (on b5 b30) 161 | (on b30 b32) 162 | (on b32 b41) 163 | (on b41 b15) 164 | (clear b17) 165 | (on-table b14) 166 | (on b17 b37) 167 | (on b37 b42) 168 | (on b42 b7) 169 | (on b7 b40) 170 | (on b40 b20) 171 | (on b20 b22) 172 | (on b22 b13) 173 | (on b13 b6) 174 | (on b6 b14)))) -------------------------------------------------------------------------------- /examples/towers/problems/pfile_13.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem tower_problem_13) 3 | (:domain towers) 4 | (:objects t1 t2 t3 - TOWER 5 | r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 - RING) 6 | (:init 7 | (smallerThan r1 t1) 8 | (smallerThan r1 t2) 9 | (smallerThan r1 t3) 10 | (smallerThan r2 t1) 11 | (smallerThan r2 t2) 12 | (smallerThan r2 t3) 13 | (smallerThan r3 t1) 14 | (smallerThan r3 t2) 15 | (smallerThan r3 t3) 16 | (smallerThan r4 t1) 17 | (smallerThan r4 t2) 18 | (smallerThan r4 t3) 19 | (smallerThan r5 t1) 20 | (smallerThan r5 t2) 21 | (smallerThan r5 t3) 22 | (smallerThan r6 t1) 23 | (smallerThan r6 t2) 24 | (smallerThan r6 t3) 25 | (smallerThan r7 t1) 26 | (smallerThan r7 t2) 27 | (smallerThan r7 t3) 28 | (smallerThan r8 t1) 29 | (smallerThan r8 t2) 30 | (smallerThan r8 t3) 31 | (smallerThan r9 t1) 32 | (smallerThan r9 t2) 33 | (smallerThan r9 t3) 34 | (smallerThan r10 t1) 35 | (smallerThan r10 t2) 36 | (smallerThan r10 t3) 37 | (smallerThan r11 t1) 38 | (smallerThan r11 t2) 39 | (smallerThan r11 t3) 40 | (smallerThan r12 t1) 41 | (smallerThan r12 t2) 42 | (smallerThan r12 t3) 43 | (smallerThan r13 t1) 44 | (smallerThan r13 t2) 45 | (smallerThan r13 t3) 46 | (smallerThan r1 r2) 47 | (smallerThan r1 r3) 48 | (smallerThan r1 r4) 49 | (smallerThan r1 r5) 50 | (smallerThan r1 r6) 51 | (smallerThan r1 r7) 52 | (smallerThan r1 r8) 53 | (smallerThan r1 r9) 54 | (smallerThan r1 r10) 55 | (smallerThan r1 r11) 56 | (smallerThan r1 r12) 57 | (smallerThan r1 r13) 58 | (smallerThan r2 r3) 59 | (smallerThan r2 r4) 60 | (smallerThan r2 r5) 61 | (smallerThan r2 r6) 62 | (smallerThan r2 r7) 63 | (smallerThan r2 r8) 64 | (smallerThan r2 r9) 65 | (smallerThan r2 r10) 66 | (smallerThan r2 r11) 67 | (smallerThan r2 r12) 68 | (smallerThan r2 r13) 69 | (smallerThan r3 r4) 70 | (smallerThan r3 r5) 71 | (smallerThan r3 r6) 72 | (smallerThan r3 r7) 73 | (smallerThan r3 r8) 74 | (smallerThan r3 r9) 75 | (smallerThan r3 r10) 76 | (smallerThan r3 r11) 77 | (smallerThan r3 r12) 78 | (smallerThan r3 r13) 79 | (smallerThan r4 r5) 80 | (smallerThan r4 r6) 81 | (smallerThan r4 r7) 82 | (smallerThan r4 r8) 83 | (smallerThan r4 r9) 84 | (smallerThan r4 r10) 85 | (smallerThan r4 r11) 86 | (smallerThan r4 r12) 87 | (smallerThan r4 r13) 88 | (smallerThan r5 r6) 89 | (smallerThan r5 r7) 90 | (smallerThan r5 r8) 91 | (smallerThan r5 r9) 92 | (smallerThan r5 r10) 93 | (smallerThan r5 r11) 94 | (smallerThan r5 r12) 95 | (smallerThan r5 r13) 96 | (smallerThan r6 r7) 97 | (smallerThan r6 r8) 98 | (smallerThan r6 r9) 99 | (smallerThan r6 r10) 100 | (smallerThan r6 r11) 101 | (smallerThan r6 r12) 102 | (smallerThan r6 r13) 103 | (smallerThan r7 r8) 104 | (smallerThan r7 r9) 105 | (smallerThan r7 r10) 106 | (smallerThan r7 r11) 107 | (smallerThan r7 r12) 108 | (smallerThan r7 r13) 109 | (smallerThan r8 r9) 110 | (smallerThan r8 r10) 111 | (smallerThan r8 r11) 112 | (smallerThan r8 r12) 113 | (smallerThan r8 r13) 114 | (smallerThan r9 r10) 115 | (smallerThan r9 r11) 116 | (smallerThan r9 r12) 117 | (smallerThan r9 r13) 118 | (smallerThan r10 r11) 119 | (smallerThan r10 r12) 120 | (smallerThan r10 r13) 121 | (smallerThan r11 r12) 122 | (smallerThan r11 r13) 123 | (smallerThan r12 r13) 124 | (on r1 r2) 125 | (on r2 r3) 126 | (on r3 r4) 127 | (on r4 r5) 128 | (on r5 r6) 129 | (on r6 r7) 130 | (on r7 r8) 131 | (on r8 r9) 132 | (on r9 r10) 133 | (on r10 r11) 134 | (on r11 r12) 135 | (on r12 r13) 136 | (on r13 t1) 137 | (towerTop r1 t1) 138 | (towerTop t2 t2) 139 | (towerTop t3 t3)) 140 | (:goal (and 141 | (on r1 r2) 142 | (on r2 r3) 143 | (on r3 r4) 144 | (on r4 r5) 145 | (on r5 r6) 146 | (on r6 r7) 147 | (on r7 r8) 148 | (on r8 r9) 149 | (on r9 r10) 150 | (on r10 r11) 151 | (on r11 r12) 152 | (on r12 r13) 153 | (on r13 t3)))) -------------------------------------------------------------------------------- /examples/robot/problems/pfile_10_50.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_10_50) 3 | (:domain robot) 4 | (:objects o1 5 | o2 6 | o3 7 | o4 8 | o5 9 | o6 10 | o7 11 | o8 12 | o9 13 | o10 14 | o11 15 | o12 16 | o13 17 | o14 18 | o15 19 | o16 20 | o17 21 | o18 22 | o19 23 | o20 24 | o21 25 | o22 26 | o23 27 | o24 28 | o25 29 | o26 30 | o27 31 | o28 32 | o29 33 | o30 34 | o31 35 | o32 36 | o33 37 | o34 38 | o35 39 | o36 40 | o37 41 | o38 42 | o39 43 | o40 44 | o41 45 | o42 46 | o43 47 | o44 48 | o45 49 | o46 50 | o47 51 | o48 52 | o49 53 | o50 54 | - PACKAGE 55 | c r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 - ROOM 56 | d410 d45 d47 d79 d27 d17 d18 d38 d68 d05 - ROOMDOOR) 57 | (:init 58 | (rloc c) 59 | (armempty) 60 | (door c r5 d05) 61 | (door r1 r7 d17) 62 | (door r1 r8 d18) 63 | (door r2 r7 d27) 64 | (door r3 r8 d38) 65 | (door r4 r5 d45) 66 | (door r4 r7 d47) 67 | (door r4 r10 d410) 68 | (door r5 c d05) 69 | (door r5 r4 d45) 70 | (door r6 r8 d68) 71 | (door r7 r1 d17) 72 | (door r7 r2 d27) 73 | (door r7 r4 d47) 74 | (door r7 r9 d79) 75 | (door r8 r1 d18) 76 | (door r8 r3 d38) 77 | (door r8 r6 d68) 78 | (door r9 r7 d79) 79 | (door r10 r4 d410) 80 | (closed d47) 81 | (closed d79) 82 | (closed d38) 83 | (closed d05) 84 | (in o1 r6) 85 | (in o2 r3) 86 | (in o3 r1) 87 | (in o4 r4) 88 | (in o5 r4) 89 | (in o6 r7) 90 | (in o7 r10) 91 | (in o8 r4) 92 | (in o9 r9) 93 | (in o10 r9) 94 | (in o11 r6) 95 | (in o12 r5) 96 | (in o13 r1) 97 | (in o14 r7) 98 | (in o15 r9) 99 | (in o16 r6) 100 | (in o17 r4) 101 | (in o18 r7) 102 | (in o19 r1) 103 | (in o20 r2) 104 | (in o21 r10) 105 | (in o22 r8) 106 | (in o23 r7) 107 | (in o24 r4) 108 | (in o25 r2) 109 | (in o26 r9) 110 | (in o27 r6) 111 | (in o28 r3) 112 | (in o29 r6) 113 | (in o30 r1) 114 | (in o31 r1) 115 | (in o32 r2) 116 | (in o33 r10) 117 | (in o34 r9) 118 | (in o35 r3) 119 | (in o36 r2) 120 | (in o37 r4) 121 | (in o38 r10) 122 | (in o39 r6) 123 | (in o40 r4) 124 | (in o41 r1) 125 | (in o42 r1) 126 | (in o43 r6) 127 | (in o44 r5) 128 | (in o45 r1) 129 | (in o46 r3) 130 | (in o47 r3) 131 | (in o48 r8) 132 | (in o49 r10) 133 | (in o50 r7)) 134 | (:goal (and 135 | (in o1 r1) 136 | (in o2 r8) 137 | (in o3 r7) 138 | (in o4 r4) 139 | (in o5 r9) 140 | (in o6 r6) 141 | (in o7 r6) 142 | (in o8 r8) 143 | (in o9 r4) 144 | (in o10 r4) 145 | (in o11 r8) 146 | (in o12 r1) 147 | (in o13 r8) 148 | (in o14 r4) 149 | (in o15 r8) 150 | (in o16 r3) 151 | (in o17 r4) 152 | (in o18 r8) 153 | (in o19 r7) 154 | (in o20 r6) 155 | (in o21 r2) 156 | (in o22 r9) 157 | (in o23 r6) 158 | (in o24 r10) 159 | (in o25 r8) 160 | (in o26 r4) 161 | (in o27 r3) 162 | (in o28 r7) 163 | (in o29 r1) 164 | (in o30 r9) 165 | (in o31 r7) 166 | (in o32 r4) 167 | (in o33 r9) 168 | (in o34 r10) 169 | (in o35 r4) 170 | (in o36 r5) 171 | (in o37 r2) 172 | (in o38 r9) 173 | (in o39 r4) 174 | (in o40 r6) 175 | (in o41 r5) 176 | (in o42 r1) 177 | (in o43 r1) 178 | (in o44 r5) 179 | (in o45 r4) 180 | (in o46 r10) 181 | (in o47 r3) 182 | (in o48 r9) 183 | (in o49 r8) 184 | (in o50 r5)))) -------------------------------------------------------------------------------- /examples/blocksworld/problems/pfile_055.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_055) 3 | (:domain blocks) 4 | (:objects b1 5 | b2 6 | b3 7 | b4 8 | b5 9 | b6 10 | b7 11 | b8 12 | b9 13 | b10 14 | b11 15 | b12 16 | b13 17 | b14 18 | b15 19 | b16 20 | b17 21 | b18 22 | b19 23 | b20 24 | b21 25 | b22 26 | b23 27 | b24 28 | b25 29 | b26 30 | b27 31 | b28 32 | b29 33 | b30 34 | b31 35 | b32 36 | b33 37 | b34 38 | b35 39 | b36 40 | b37 41 | b38 42 | b39 43 | b40 44 | b41 45 | b42 46 | b43 47 | b44 48 | b45 49 | b46 50 | b47 51 | b48 52 | b49 53 | b50 54 | b51 55 | b52 56 | b53 57 | b54 58 | b55 59 | - BLOCK) 60 | (:init 61 | (hand-empty) 62 | (clear b36) 63 | (on-table b54) 64 | (on b36 b11) 65 | (on b11 b54) 66 | (clear b22) 67 | (on-table b53) 68 | (on b22 b34) 69 | (on b34 b12) 70 | (on b12 b37) 71 | (on b37 b53) 72 | (clear b51) 73 | (on-table b51) 74 | (clear b38) 75 | (on-table b38) 76 | (clear b17) 77 | (on-table b35) 78 | (on b17 b44) 79 | (on b44 b1) 80 | (on b1 b5) 81 | (on b5 b30) 82 | (on b30 b19) 83 | (on b19 b21) 84 | (on b21 b45) 85 | (on b45 b35) 86 | (clear b52) 87 | (on-table b33) 88 | (on b52 b46) 89 | (on b46 b33) 90 | (clear b4) 91 | (on-table b29) 92 | (on b4 b47) 93 | (on b47 b18) 94 | (on b18 b42) 95 | (on b42 b20) 96 | (on b20 b39) 97 | (on b39 b31) 98 | (on b31 b55) 99 | (on b55 b40) 100 | (on b40 b32) 101 | (on b32 b3) 102 | (on b3 b2) 103 | (on b2 b41) 104 | (on b41 b29) 105 | (clear b14) 106 | (on-table b23) 107 | (on b14 b24) 108 | (on b24 b49) 109 | (on b49 b23) 110 | (clear b13) 111 | (on-table b13) 112 | (clear b10) 113 | (on-table b6) 114 | (on b10 b48) 115 | (on b48 b16) 116 | (on b16 b9) 117 | (on b9 b28) 118 | (on b28 b8) 119 | (on b8 b7) 120 | (on b7 b15) 121 | (on b15 b50) 122 | (on b50 b43) 123 | (on b43 b25) 124 | (on b25 b27) 125 | (on b27 b26) 126 | (on b26 b6)) 127 | (:goal (and 128 | (clear b20) 129 | (on-table b55) 130 | (on b20 b34) 131 | (on b34 b31) 132 | (on b31 b55) 133 | (clear b15) 134 | (on-table b51) 135 | (on b15 b38) 136 | (on b38 b33) 137 | (on b33 b35) 138 | (on b35 b48) 139 | (on b48 b26) 140 | (on b26 b51) 141 | (clear b1) 142 | (on-table b50) 143 | (on b1 b9) 144 | (on b9 b41) 145 | (on b41 b21) 146 | (on b21 b53) 147 | (on b53 b45) 148 | (on b45 b52) 149 | (on b52 b40) 150 | (on b40 b27) 151 | (on b27 b44) 152 | (on b44 b50) 153 | (clear b12) 154 | (on-table b46) 155 | (on b12 b43) 156 | (on b43 b46) 157 | (clear b47) 158 | (on-table b42) 159 | (on b47 b42) 160 | (clear b13) 161 | (on-table b37) 162 | (on b13 b14) 163 | (on b14 b4) 164 | (on b4 b32) 165 | (on b32 b3) 166 | (on b3 b17) 167 | (on b17 b10) 168 | (on b10 b11) 169 | (on b11 b5) 170 | (on b5 b19) 171 | (on b19 b23) 172 | (on b23 b36) 173 | (on b36 b49) 174 | (on b49 b22) 175 | (on b22 b24) 176 | (on b24 b30) 177 | (on b30 b18) 178 | (on b18 b37) 179 | (clear b29) 180 | (on-table b28) 181 | (on b29 b2) 182 | (on b2 b28) 183 | (clear b54) 184 | (on-table b8) 185 | (on b54 b25) 186 | (on b25 b16) 187 | (on b16 b8) 188 | (clear b7) 189 | (on-table b6) 190 | (on b7 b39) 191 | (on b39 b6)))) -------------------------------------------------------------------------------- /src/HTNTranslation/Conjunctivitis.hs: -------------------------------------------------------------------------------- 1 | {-# OPTIONS_GHC 2 | -freduction-depth=30 3 | -Wall 4 | #-} 5 | {-# LANGUAGE 6 | FlexibleContexts, 7 | FlexibleInstances, 8 | MultiParamTypeClasses, 9 | RankNTypes, 10 | ScopedTypeVariables, 11 | TypeOperators, 12 | UndecidableInstances 13 | #-} 14 | -- Module for performing FD-style canonicalization 15 | module HTNTranslation.Conjunctivitis 16 | where 17 | 18 | import Control.Monad.State 19 | import Planning.Expressions 20 | import Planning.PDDL.PDDL3_0 21 | import Planning.Util 22 | 23 | -- Modified GD restricted to the FDNNF classes above 24 | type GD1 = Atomic TermExpr :+: Not :+: And :+: Or :+: Exists TypedVarExpr 25 | type GD2 = Atomic TermExpr :+: Not :+: And :+: Or 26 | 27 | 28 | 29 | -- Partial canonization (Removing implies, forall) 30 | class (Functor f, Functor g) => FDCanonize f g where 31 | fdcanon' :: f (Expr g) -> Expr g 32 | fdcanon :: (NNF f f, FDCanonize f g, FDNNF g g) => Expr f -> Expr g 33 | fdcanon = fdnnf . foldExpr fdcanon' . nnf 34 | 35 | 36 | instance (FDCanonize f h, FDCanonize g h) => FDCanonize (f :+: g) h where 37 | fdcanon' (Inl x) = fdcanon' x 38 | fdcanon' (Inr y) = fdcanon' y 39 | 40 | instance (Atomic t :<: f) => FDCanonize (Atomic t) f where 41 | fdcanon' (Atomic p tl) = eAtomic p tl 42 | 43 | instance (Not :<: f) => FDCanonize Not f where 44 | fdcanon' (Not e) = eNot e 45 | 46 | instance (Or :<: f) => FDCanonize Or f where 47 | fdcanon' (Or el) = eOr el 48 | 49 | instance (And :<: f) => FDCanonize And f where 50 | fdcanon' (And el) = eAnd el 51 | 52 | instance (Not :<: f, Or :<: f) => FDCanonize Imply f where 53 | fdcanon' (Imply e1 e2) = eOr [(eNot e1), e2] 54 | 55 | instance (Exists v :<: f) => FDCanonize (Exists v) f where 56 | fdcanon' (Exists v e) = eExists v e 57 | 58 | instance (Not :<: f, Exists v :<: f) => FDCanonize (ForAll v) f where 59 | fdcanon' (ForAll v e) = eNot $ eExists v $ eNot e 60 | 61 | 62 | 63 | -- Uses a naming function to transform Exists into derived predicates 64 | class (Functor f, Functor g) => ExistentialEliminator f f' g where 65 | existsElim :: String -> f (Expr f') -> State [(TypedPredicateExpr, Expr g)] (Expr g) 66 | 67 | elimExists :: (ExistentialEliminator f f g) => String -> Expr f -> Expr g 68 | elimExists prefix (In e) = evalState (existsElim prefix e) [] 69 | 70 | 71 | instance (ExistentialEliminator f f' h, ExistentialEliminator g f' h) => ExistentialEliminator (f :+: g) f' h where 72 | existsElim prefix (Inr x) = existsElim prefix x 73 | existsElim prefix (Inl x) = existsElim prefix x 74 | 75 | instance (Atomic t :<: f, Atomic t :<: g) => ExistentialEliminator (Atomic t) f g where 76 | existsElim _ (Atomic p tl) = return $ eAtomic p tl 77 | 78 | -- instance (Not :<: f, Not :<: g) => ExistentialEliminator Not f g where 79 | -- existsElim prefix (Not e) = existsElim 80 | 81 | -- nnf helper class (modified for FD-style FDNNF (no ForAll) 82 | -- fdnnf' takes a bool arg, False for negated, True for not-negated. 83 | class (Functor f, Functor g) => FDNNF f g where 84 | fdnnf' :: Bool -> f (Expr g) -> Expr g 85 | fdnnf :: (FDNNF f f) => Expr f -> Expr f 86 | fdnnf (In e) = fdnnf' True e 87 | 88 | instance (FDNNF f h, FDNNF g h) => FDNNF (f :+: g) h where 89 | fdnnf' b (Inr x) = fdnnf' b x 90 | fdnnf' b (Inl y) = fdnnf' b y 91 | 92 | instance (Not :<: g, Atomic t :<: g) => FDNNF (Atomic t) g where 93 | fdnnf' True (Atomic p tl) = eAtomic p tl 94 | fdnnf' False (Atomic p tl) = eNot $ eAtomic p tl 95 | 96 | instance (FDNNF g g) => FDNNF Not g where 97 | fdnnf' b (Not (In e)) = fdnnf' (not b) e 98 | 99 | instance (And :<: g, Or :<: g, FDNNF g g) => FDNNF And g where 100 | fdnnf' True (And el) = eAnd [fdnnf' True e | In e <- el] 101 | fdnnf' False (And el) = eOr [fdnnf' False e | In e <- el] 102 | 103 | instance (And :<: g, Or :<: g, FDNNF g g) => FDNNF Or g where 104 | fdnnf' True (Or el) = eOr [fdnnf' True e | In e <- el] 105 | fdnnf' False (Or el) = eAnd [fdnnf' False e | In e <- el] 106 | 107 | instance (Exists t :<: g, Not :<: g, FDNNF g g) => FDNNF (Exists t) g where 108 | fdnnf' True (Exists vl (In e)) = eExists vl $ fdnnf' True e 109 | fdnnf' False (Exists vl (In e)) = eNot $ eExists vl $ fdnnf' True e 110 | -------------------------------------------------------------------------------- /src/HTNTranslation/ProgressionMin.hs: -------------------------------------------------------------------------------- 1 | {-# LANGUAGE 2 | FlexibleContexts, 3 | ScopedTypeVariables 4 | #-} 5 | module HTNTranslation.ProgressionMin (minProgression) where 6 | 7 | import Data.Function (on) 8 | import Data.List 9 | import Data.Maybe (fromMaybe) 10 | import Data.Text (Text) 11 | --import Debug.Trace 12 | 13 | import HTNTranslation.HTNPDDL 14 | import HTNTranslation.ProgressionBounds (findMethods, findReachableTasks') 15 | 16 | -- |Provides the minimum progression bound necessary for 17 | minProgression :: forall action domain problem . 18 | ( HasName action 19 | , HasTaskHead (Maybe (Expr PDDLAtom)) action 20 | , HasTaskLists TermExpr action 21 | , HasTaskConstraints action 22 | , HasActions action domain 23 | , HasTaskLists ConstTermExpr problem 24 | , HasTaskConstraints problem 25 | ) => domain -> problem -> (Int, [(Text, Int)]) 26 | minProgression domain problem = 27 | (boundsGame problem bounds, bounds) 28 | where 29 | findM :: Text -> [action] 30 | findM = findMethods domain 31 | bounds = map fst $ snd $ 32 | until (not . fst) 33 | iterateBounds $ 34 | (\lb -> (True, lb)) $ 35 | map (\t -> ((t, maxBound), findM t :: [action])) $ 36 | findReachableTasks' 37 | (concatMap listTaskNames . findM) $ 38 | listTaskNames problem 39 | iterateBounds :: (Bool, [((Text, Int), [action])]) -> (Bool, [((Text, Int), [action])]) 40 | iterateBounds (_, cbounds) = {-# SCC "iterateBounds" #-} 41 | foldl (\(changed, l) ((t,tprevb),actions) -> 42 | let tnextb = foldl reboundAction tprevb $ filter (isPlausible tprevb) actions in 43 | (changed || tnextb < tprevb, ((t, tnextb), actions) : l)) 44 | (False, []) cbounds 45 | where 46 | ibounds :: [(Text, Int)] 47 | ibounds = map fst cbounds 48 | reboundAction :: Int -> action -> Int 49 | reboundAction bound action = 50 | min bound $ boundsGame action ibounds 51 | -- only consider rebounding with plausible methods (subtasks all have lower bounds) 52 | isPlausible :: Int -> action -> Bool 53 | isPlausible bound method = and $ 54 | map ((< bound) . taskBound ibounds . taskName . snd) $ 55 | (enumerateTasks method :: [(Int, Expr PDDLAtom)]) 56 | 57 | 58 | boundsGame :: 59 | ( HasTaskLists a tasked 60 | , HasTaskConstraints tasked 61 | ) => tasked -> [(Text, Int)] -> Int 62 | boundsGame tasked bounds = 63 | {-# SCC "bounds-game" #-} minimum $ bg (max 1 $ length tasks) taskWeights 64 | where 65 | tasks :: [(Int, Text)] 66 | tasks = map (\(n, t) -> (n, taskName t)) (enumerateTasks tasked) 67 | taskConstraints :: [(Int, [Int])] 68 | taskConstraints = map (\(t,_) -> (t, map fst $ findPrevTasks tasked t)) tasks 69 | taskWeights :: [(Int, Int)] 70 | taskWeights = map (\(n,t) -> (n, taskBound bounds t)) tasks 71 | 72 | -- The actual game itself 73 | bg :: Int -> [(Int, Int)] -> [Int] 74 | bg cmin [] = [cmin] 75 | bg cmin tn 76 | -- Current bound is bigger than the largest min bound plus the size of the remaining list 77 | | cmin >= (maximum $ map snd tn) + length tn - 1 = [cmin] 78 | -- Special case for completely unordered tasks 79 | -- | length tn == length tnc = [maximum $ map lweight $ tails $ sort $ map snd tn] 80 | | otherwise = (\(ccmin, ctn) -> bg (max cmin ccmin) ctn) $ tnc 81 | where 82 | tnc :: (Int, [(Int, Int)]) 83 | tnc = progressTask tn $ minimumBy (compare `on` snd) $ unconstrained tn 84 | progressTask :: [(Int, Int)] -> (Int, Int) -> (Int, [(Int, Int)]) 85 | progressTask tn t@(_,lw) = 86 | (lw + length tn', tn') 87 | where 88 | tn' = delete t tn 89 | -- Returns all tasks that do not have parents in current task network 90 | unconstrained :: [(Int, Int)] -> [(Int, Int)] 91 | unconstrained tn = 92 | filter ( null . intersect labels . fromMaybe [] . flip lookup taskConstraints . fst) tn 93 | where 94 | labels :: [Int] 95 | labels = map fst tn 96 | 97 | 98 | taskBound :: [(Text, Int)] -> Text -> Int 99 | taskBound bounds = maybe maxBound id . flip lookup bounds 100 | -------------------------------------------------------------------------------- /examples/multiarm-blocksworld/problems/pfile_3_055.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_3_055) 3 | (:domain blocks) 4 | (:objects arm1 arm2 arm3 - ARM 5 | b1 6 | b2 7 | b3 8 | b4 9 | b5 10 | b6 11 | b7 12 | b8 13 | b9 14 | b10 15 | b11 16 | b12 17 | b13 18 | b14 19 | b15 20 | b16 21 | b17 22 | b18 23 | b19 24 | b20 25 | b21 26 | b22 27 | b23 28 | b24 29 | b25 30 | b26 31 | b27 32 | b28 33 | b29 34 | b30 35 | b31 36 | b32 37 | b33 38 | b34 39 | b35 40 | b36 41 | b37 42 | b38 43 | b39 44 | b40 45 | b41 46 | b42 47 | b43 48 | b44 49 | b45 50 | b46 51 | b47 52 | b48 53 | b49 54 | b50 55 | b51 56 | b52 57 | b53 58 | b54 59 | b55 60 | - BLOCK) 61 | (:init 62 | (hand-empty arm1) 63 | (hand-empty arm2) 64 | (hand-empty arm3) 65 | (clear b45) 66 | (on-table b55) 67 | (on b45 b31) 68 | (on b31 b27) 69 | (on b27 b26) 70 | (on b26 b46) 71 | (on b46 b32) 72 | (on b32 b19) 73 | (on b19 b22) 74 | (on b22 b35) 75 | (on b35 b28) 76 | (on b28 b47) 77 | (on b47 b36) 78 | (on b36 b29) 79 | (on b29 b38) 80 | (on b38 b55) 81 | (clear b51) 82 | (on-table b51) 83 | (clear b21) 84 | (on-table b39) 85 | (on b21 b44) 86 | (on b44 b4) 87 | (on b4 b24) 88 | (on b24 b13) 89 | (on b13 b39) 90 | (clear b33) 91 | (on-table b25) 92 | (on b33 b30) 93 | (on b30 b25) 94 | (clear b41) 95 | (on-table b15) 96 | (on b41 b1) 97 | (on b1 b12) 98 | (on b12 b11) 99 | (on b11 b20) 100 | (on b20 b17) 101 | (on b17 b15) 102 | (clear b23) 103 | (on-table b7) 104 | (on b23 b48) 105 | (on b48 b7) 106 | (clear b43) 107 | (on-table b6) 108 | (on b43 b34) 109 | (on b34 b14) 110 | (on b14 b52) 111 | (on b52 b54) 112 | (on b54 b49) 113 | (on b49 b16) 114 | (on b16 b3) 115 | (on b3 b40) 116 | (on b40 b37) 117 | (on b37 b2) 118 | (on b2 b5) 119 | (on b5 b42) 120 | (on b42 b10) 121 | (on b10 b8) 122 | (on b8 b18) 123 | (on b18 b53) 124 | (on b53 b9) 125 | (on b9 b50) 126 | (on b50 b6)) 127 | (:goal (and 128 | (clear b9) 129 | (on-table b51) 130 | (on b9 b24) 131 | (on b24 b2) 132 | (on b2 b45) 133 | (on b45 b12) 134 | (on b12 b20) 135 | (on b20 b41) 136 | (on b41 b19) 137 | (on b19 b51) 138 | (clear b50) 139 | (on-table b49) 140 | (on b50 b49) 141 | (clear b38) 142 | (on-table b47) 143 | (on b38 b40) 144 | (on b40 b22) 145 | (on b22 b26) 146 | (on b26 b37) 147 | (on b37 b11) 148 | (on b11 b17) 149 | (on b17 b55) 150 | (on b55 b34) 151 | (on b34 b1) 152 | (on b1 b23) 153 | (on b23 b47) 154 | (clear b5) 155 | (on-table b43) 156 | (on b5 b18) 157 | (on b18 b14) 158 | (on b14 b21) 159 | (on b21 b13) 160 | (on b13 b7) 161 | (on b7 b32) 162 | (on b32 b6) 163 | (on b6 b48) 164 | (on b48 b42) 165 | (on b42 b35) 166 | (on b35 b43) 167 | (clear b36) 168 | (on-table b36) 169 | (clear b29) 170 | (on-table b30) 171 | (on b29 b53) 172 | (on b53 b46) 173 | (on b46 b54) 174 | (on b54 b33) 175 | (on b33 b30) 176 | (clear b52) 177 | (on-table b28) 178 | (on b52 b3) 179 | (on b3 b16) 180 | (on b16 b39) 181 | (on b39 b28) 182 | (clear b15) 183 | (on-table b10) 184 | (on b15 b25) 185 | (on b25 b31) 186 | (on b31 b10) 187 | (clear b44) 188 | (on-table b8) 189 | (on b44 b27) 190 | (on b27 b8) 191 | (clear b4) 192 | (on-table b4)))) -------------------------------------------------------------------------------- /examples/blocksworld/problems/pfile_060.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_060) 3 | (:domain blocks) 4 | (:objects b1 5 | b2 6 | b3 7 | b4 8 | b5 9 | b6 10 | b7 11 | b8 12 | b9 13 | b10 14 | b11 15 | b12 16 | b13 17 | b14 18 | b15 19 | b16 20 | b17 21 | b18 22 | b19 23 | b20 24 | b21 25 | b22 26 | b23 27 | b24 28 | b25 29 | b26 30 | b27 31 | b28 32 | b29 33 | b30 34 | b31 35 | b32 36 | b33 37 | b34 38 | b35 39 | b36 40 | b37 41 | b38 42 | b39 43 | b40 44 | b41 45 | b42 46 | b43 47 | b44 48 | b45 49 | b46 50 | b47 51 | b48 52 | b49 53 | b50 54 | b51 55 | b52 56 | b53 57 | b54 58 | b55 59 | b56 60 | b57 61 | b58 62 | b59 63 | b60 64 | - BLOCK) 65 | (:init 66 | (hand-empty) 67 | (clear b29) 68 | (on-table b27) 69 | (on b29 b27) 70 | (clear b50) 71 | (on-table b25) 72 | (on b50 b6) 73 | (on b6 b30) 74 | (on b30 b11) 75 | (on b11 b51) 76 | (on b51 b37) 77 | (on b37 b33) 78 | (on b33 b26) 79 | (on b26 b41) 80 | (on b41 b53) 81 | (on b53 b43) 82 | (on b43 b40) 83 | (on b40 b18) 84 | (on b18 b9) 85 | (on b9 b28) 86 | (on b28 b36) 87 | (on b36 b49) 88 | (on b49 b38) 89 | (on b38 b20) 90 | (on b20 b3) 91 | (on b3 b46) 92 | (on b46 b19) 93 | (on b19 b24) 94 | (on b24 b55) 95 | (on b55 b4) 96 | (on b4 b47) 97 | (on b47 b23) 98 | (on b23 b7) 99 | (on b7 b21) 100 | (on b21 b42) 101 | (on b42 b59) 102 | (on b59 b58) 103 | (on b58 b31) 104 | (on b31 b45) 105 | (on b45 b39) 106 | (on b39 b8) 107 | (on b8 b35) 108 | (on b35 b14) 109 | (on b14 b25) 110 | (clear b10) 111 | (on-table b22) 112 | (on b10 b32) 113 | (on b32 b44) 114 | (on b44 b15) 115 | (on b15 b1) 116 | (on b1 b22) 117 | (clear b5) 118 | (on-table b16) 119 | (on b5 b57) 120 | (on b57 b34) 121 | (on b34 b52) 122 | (on b52 b17) 123 | (on b17 b2) 124 | (on b2 b16) 125 | (clear b54) 126 | (on-table b13) 127 | (on b54 b60) 128 | (on b60 b48) 129 | (on b48 b13) 130 | (clear b56) 131 | (on-table b12) 132 | (on b56 b12)) 133 | (:goal (and 134 | (clear b55) 135 | (on-table b55) 136 | (clear b13) 137 | (on-table b51) 138 | (on b13 b23) 139 | (on b23 b41) 140 | (on b41 b59) 141 | (on b59 b3) 142 | (on b3 b2) 143 | (on b2 b56) 144 | (on b56 b32) 145 | (on b32 b48) 146 | (on b48 b10) 147 | (on b10 b38) 148 | (on b38 b60) 149 | (on b60 b16) 150 | (on b16 b57) 151 | (on b57 b37) 152 | (on b37 b4) 153 | (on b4 b20) 154 | (on b20 b43) 155 | (on b43 b58) 156 | (on b58 b36) 157 | (on b36 b34) 158 | (on b34 b7) 159 | (on b7 b53) 160 | (on b53 b35) 161 | (on b35 b45) 162 | (on b45 b33) 163 | (on b33 b9) 164 | (on b9 b54) 165 | (on b54 b27) 166 | (on b27 b6) 167 | (on b6 b19) 168 | (on b19 b21) 169 | (on b21 b40) 170 | (on b40 b51) 171 | (clear b39) 172 | (on-table b39) 173 | (clear b14) 174 | (on-table b30) 175 | (on b14 b50) 176 | (on b50 b52) 177 | (on b52 b28) 178 | (on b28 b46) 179 | (on b46 b5) 180 | (on b5 b8) 181 | (on b8 b30) 182 | (clear b31) 183 | (on-table b29) 184 | (on b31 b1) 185 | (on b1 b11) 186 | (on b11 b29) 187 | (clear b17) 188 | (on-table b26) 189 | (on b17 b15) 190 | (on b15 b47) 191 | (on b47 b22) 192 | (on b22 b44) 193 | (on b44 b24) 194 | (on b24 b25) 195 | (on b25 b18) 196 | (on b18 b26) 197 | (clear b42) 198 | (on-table b12) 199 | (on b42 b49) 200 | (on b49 b12)))) -------------------------------------------------------------------------------- /examples/towers/problems/pfile_14.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem tower_problem_14) 3 | (:domain towers) 4 | (:objects t1 t2 t3 - TOWER 5 | r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 - RING) 6 | (:init 7 | (smallerThan r1 t1) 8 | (smallerThan r1 t2) 9 | (smallerThan r1 t3) 10 | (smallerThan r2 t1) 11 | (smallerThan r2 t2) 12 | (smallerThan r2 t3) 13 | (smallerThan r3 t1) 14 | (smallerThan r3 t2) 15 | (smallerThan r3 t3) 16 | (smallerThan r4 t1) 17 | (smallerThan r4 t2) 18 | (smallerThan r4 t3) 19 | (smallerThan r5 t1) 20 | (smallerThan r5 t2) 21 | (smallerThan r5 t3) 22 | (smallerThan r6 t1) 23 | (smallerThan r6 t2) 24 | (smallerThan r6 t3) 25 | (smallerThan r7 t1) 26 | (smallerThan r7 t2) 27 | (smallerThan r7 t3) 28 | (smallerThan r8 t1) 29 | (smallerThan r8 t2) 30 | (smallerThan r8 t3) 31 | (smallerThan r9 t1) 32 | (smallerThan r9 t2) 33 | (smallerThan r9 t3) 34 | (smallerThan r10 t1) 35 | (smallerThan r10 t2) 36 | (smallerThan r10 t3) 37 | (smallerThan r11 t1) 38 | (smallerThan r11 t2) 39 | (smallerThan r11 t3) 40 | (smallerThan r12 t1) 41 | (smallerThan r12 t2) 42 | (smallerThan r12 t3) 43 | (smallerThan r13 t1) 44 | (smallerThan r13 t2) 45 | (smallerThan r13 t3) 46 | (smallerThan r14 t1) 47 | (smallerThan r14 t2) 48 | (smallerThan r14 t3) 49 | (smallerThan r1 r2) 50 | (smallerThan r1 r3) 51 | (smallerThan r1 r4) 52 | (smallerThan r1 r5) 53 | (smallerThan r1 r6) 54 | (smallerThan r1 r7) 55 | (smallerThan r1 r8) 56 | (smallerThan r1 r9) 57 | (smallerThan r1 r10) 58 | (smallerThan r1 r11) 59 | (smallerThan r1 r12) 60 | (smallerThan r1 r13) 61 | (smallerThan r1 r14) 62 | (smallerThan r2 r3) 63 | (smallerThan r2 r4) 64 | (smallerThan r2 r5) 65 | (smallerThan r2 r6) 66 | (smallerThan r2 r7) 67 | (smallerThan r2 r8) 68 | (smallerThan r2 r9) 69 | (smallerThan r2 r10) 70 | (smallerThan r2 r11) 71 | (smallerThan r2 r12) 72 | (smallerThan r2 r13) 73 | (smallerThan r2 r14) 74 | (smallerThan r3 r4) 75 | (smallerThan r3 r5) 76 | (smallerThan r3 r6) 77 | (smallerThan r3 r7) 78 | (smallerThan r3 r8) 79 | (smallerThan r3 r9) 80 | (smallerThan r3 r10) 81 | (smallerThan r3 r11) 82 | (smallerThan r3 r12) 83 | (smallerThan r3 r13) 84 | (smallerThan r3 r14) 85 | (smallerThan r4 r5) 86 | (smallerThan r4 r6) 87 | (smallerThan r4 r7) 88 | (smallerThan r4 r8) 89 | (smallerThan r4 r9) 90 | (smallerThan r4 r10) 91 | (smallerThan r4 r11) 92 | (smallerThan r4 r12) 93 | (smallerThan r4 r13) 94 | (smallerThan r4 r14) 95 | (smallerThan r5 r6) 96 | (smallerThan r5 r7) 97 | (smallerThan r5 r8) 98 | (smallerThan r5 r9) 99 | (smallerThan r5 r10) 100 | (smallerThan r5 r11) 101 | (smallerThan r5 r12) 102 | (smallerThan r5 r13) 103 | (smallerThan r5 r14) 104 | (smallerThan r6 r7) 105 | (smallerThan r6 r8) 106 | (smallerThan r6 r9) 107 | (smallerThan r6 r10) 108 | (smallerThan r6 r11) 109 | (smallerThan r6 r12) 110 | (smallerThan r6 r13) 111 | (smallerThan r6 r14) 112 | (smallerThan r7 r8) 113 | (smallerThan r7 r9) 114 | (smallerThan r7 r10) 115 | (smallerThan r7 r11) 116 | (smallerThan r7 r12) 117 | (smallerThan r7 r13) 118 | (smallerThan r7 r14) 119 | (smallerThan r8 r9) 120 | (smallerThan r8 r10) 121 | (smallerThan r8 r11) 122 | (smallerThan r8 r12) 123 | (smallerThan r8 r13) 124 | (smallerThan r8 r14) 125 | (smallerThan r9 r10) 126 | (smallerThan r9 r11) 127 | (smallerThan r9 r12) 128 | (smallerThan r9 r13) 129 | (smallerThan r9 r14) 130 | (smallerThan r10 r11) 131 | (smallerThan r10 r12) 132 | (smallerThan r10 r13) 133 | (smallerThan r10 r14) 134 | (smallerThan r11 r12) 135 | (smallerThan r11 r13) 136 | (smallerThan r11 r14) 137 | (smallerThan r12 r13) 138 | (smallerThan r12 r14) 139 | (smallerThan r13 r14) 140 | (on r1 r2) 141 | (on r2 r3) 142 | (on r3 r4) 143 | (on r4 r5) 144 | (on r5 r6) 145 | (on r6 r7) 146 | (on r7 r8) 147 | (on r8 r9) 148 | (on r9 r10) 149 | (on r10 r11) 150 | (on r11 r12) 151 | (on r12 r13) 152 | (on r13 r14) 153 | (on r14 t1) 154 | (towerTop r1 t1) 155 | (towerTop t2 t2) 156 | (towerTop t3 t3)) 157 | (:goal (and 158 | (on r1 r2) 159 | (on r2 r3) 160 | (on r3 r4) 161 | (on r4 r5) 162 | (on r5 r6) 163 | (on r6 r7) 164 | (on r7 r8) 165 | (on r8 r9) 166 | (on r9 r10) 167 | (on r10 r11) 168 | (on r11 r12) 169 | (on r12 r13) 170 | (on r13 r14) 171 | (on r14 t3)))) -------------------------------------------------------------------------------- /examples/multiarm-blocksworld/problems/pfile_3_060.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_3_060) 3 | (:domain blocks) 4 | (:objects arm1 arm2 arm3 - ARM 5 | b1 6 | b2 7 | b3 8 | b4 9 | b5 10 | b6 11 | b7 12 | b8 13 | b9 14 | b10 15 | b11 16 | b12 17 | b13 18 | b14 19 | b15 20 | b16 21 | b17 22 | b18 23 | b19 24 | b20 25 | b21 26 | b22 27 | b23 28 | b24 29 | b25 30 | b26 31 | b27 32 | b28 33 | b29 34 | b30 35 | b31 36 | b32 37 | b33 38 | b34 39 | b35 40 | b36 41 | b37 42 | b38 43 | b39 44 | b40 45 | b41 46 | b42 47 | b43 48 | b44 49 | b45 50 | b46 51 | b47 52 | b48 53 | b49 54 | b50 55 | b51 56 | b52 57 | b53 58 | b54 59 | b55 60 | b56 61 | b57 62 | b58 63 | b59 64 | b60 65 | - BLOCK) 66 | (:init 67 | (hand-empty arm1) 68 | (hand-empty arm2) 69 | (hand-empty arm3) 70 | (clear b15) 71 | (on-table b43) 72 | (on b15 b51) 73 | (on b51 b52) 74 | (on b52 b53) 75 | (on b53 b43) 76 | (clear b22) 77 | (on-table b42) 78 | (on b22 b21) 79 | (on b21 b56) 80 | (on b56 b50) 81 | (on b50 b42) 82 | (clear b58) 83 | (on-table b30) 84 | (on b58 b38) 85 | (on b38 b5) 86 | (on b5 b4) 87 | (on b4 b29) 88 | (on b29 b20) 89 | (on b20 b54) 90 | (on b54 b18) 91 | (on b18 b14) 92 | (on b14 b35) 93 | (on b35 b1) 94 | (on b1 b33) 95 | (on b33 b47) 96 | (on b47 b39) 97 | (on b39 b30) 98 | (clear b27) 99 | (on-table b23) 100 | (on b27 b2) 101 | (on b2 b16) 102 | (on b16 b8) 103 | (on b8 b13) 104 | (on b13 b23) 105 | (clear b31) 106 | (on-table b10) 107 | (on b31 b25) 108 | (on b25 b19) 109 | (on b19 b59) 110 | (on b59 b37) 111 | (on b37 b3) 112 | (on b3 b17) 113 | (on b17 b41) 114 | (on b41 b10) 115 | (clear b36) 116 | (on-table b9) 117 | (on b36 b9) 118 | (clear b11) 119 | (on-table b7) 120 | (on b11 b46) 121 | (on b46 b57) 122 | (on b57 b34) 123 | (on b34 b40) 124 | (on b40 b32) 125 | (on b32 b24) 126 | (on b24 b6) 127 | (on b6 b44) 128 | (on b44 b26) 129 | (on b26 b60) 130 | (on b60 b55) 131 | (on b55 b45) 132 | (on b45 b28) 133 | (on b28 b48) 134 | (on b48 b12) 135 | (on b12 b49) 136 | (on b49 b7)) 137 | (:goal (and 138 | (clear b6) 139 | (on-table b58) 140 | (on b6 b31) 141 | (on b31 b53) 142 | (on b53 b52) 143 | (on b52 b12) 144 | (on b12 b35) 145 | (on b35 b40) 146 | (on b40 b37) 147 | (on b37 b4) 148 | (on b4 b58) 149 | (clear b24) 150 | (on-table b48) 151 | (on b24 b2) 152 | (on b2 b56) 153 | (on b56 b9) 154 | (on b9 b48) 155 | (clear b41) 156 | (on-table b26) 157 | (on b41 b47) 158 | (on b47 b3) 159 | (on b3 b27) 160 | (on b27 b30) 161 | (on b30 b54) 162 | (on b54 b44) 163 | (on b44 b16) 164 | (on b16 b26) 165 | (clear b19) 166 | (on-table b22) 167 | (on b19 b28) 168 | (on b28 b42) 169 | (on b42 b7) 170 | (on b7 b22) 171 | (clear b39) 172 | (on-table b15) 173 | (on b39 b25) 174 | (on b25 b29) 175 | (on b29 b45) 176 | (on b45 b51) 177 | (on b51 b49) 178 | (on b49 b60) 179 | (on b60 b23) 180 | (on b23 b8) 181 | (on b8 b15) 182 | (clear b32) 183 | (on-table b13) 184 | (on b32 b46) 185 | (on b46 b18) 186 | (on b18 b20) 187 | (on b20 b38) 188 | (on b38 b55) 189 | (on b55 b43) 190 | (on b43 b10) 191 | (on b10 b34) 192 | (on b34 b1) 193 | (on b1 b50) 194 | (on b50 b36) 195 | (on b36 b21) 196 | (on b21 b13) 197 | (clear b59) 198 | (on-table b11) 199 | (on b59 b17) 200 | (on b17 b33) 201 | (on b33 b57) 202 | (on b57 b11) 203 | (clear b14) 204 | (on-table b5) 205 | (on b14 b5)))) -------------------------------------------------------------------------------- /examples/robot/genRobot.hs: -------------------------------------------------------------------------------- 1 | {-# LANGUAGE FlexibleContexts,OverlappingInstances,RankNTypes,ScopedTypeVariables,UndecidableInstances#-} 2 | {-# OPTIONS 3 | -fcontext-stack=40 4 | #-} 5 | module Main where 6 | 7 | import Control.Monad 8 | import Data.Function 9 | import Data.List 10 | import System.Environment 11 | import System.Random 12 | import Text.Printf 13 | 14 | import Planning.PDDL.PDDL3_0 15 | import RandomUtils (mkRandomPaths) 16 | 17 | -- Constants for adding stack predicates and items. 18 | 19 | newRandomList range = do 20 | g <- newStdGen 21 | let l = randomRs range g 22 | return l 23 | 24 | -- Randomly permute a list 25 | permute l = do 26 | -- generate random list of floats 27 | rl <- newRandomList (0.0 :: Float, 1.0) 28 | -- zip and sort list according to floats 29 | let zl = zip rl l 30 | let sorted = sort zl 31 | -- return sorted list. 32 | return $ map snd sorted 33 | 34 | roomName 0 = "c" 35 | roomName n = 'r' : show n 36 | doorName (r1, r2) = 'd' : concatMap show (sort [r1, r2]) 37 | pkgName n = 'o' : show n 38 | 39 | makeRooms :: forall t f . ((:<:) Const t, (:<:) (Atomic (Expr t)) f) => 40 | (Expr t) -> [(Int, Int)] -> [Bool] -> [Expr f] 41 | makeRooms template doors states = 42 | let bothSides = nub $ sort $ doors ++ [(r2, r1) | (r1, r2) <- doors] in 43 | [ eAtomic "door" $ map (eConst :: String -> Expr t) 44 | [roomName $ fst d, roomName $ snd d, doorName d] | d <- bothSides ] ++ 45 | [ eAtomic "closed" [eConst (doorName d) :: Expr t] | (d, t) <- zip doors states, t ] 46 | 47 | placePackages :: forall t f . ((:<:) Const t, (:<:) (Atomic (Expr t)) f) => 48 | (Expr t) -> String -> [(Int, String)] -> [Expr f] 49 | placePackages template pred packageLocs = 50 | [ eAtomic pred [eConst p, eConst $ roomName d :: Expr t] | (d, p) <- packageLocs ] 51 | 52 | -- Set up the initial and goal states of a problem 53 | makeRobotProblem pname roomCount packageLocs goalLocs doors closedDoors = 54 | let 55 | consts = 56 | [ eTyped (eConst p :: Expr Const) ["PACKAGE"] | p <- map snd packageLocs ] ++ 57 | [ eTyped (eConst (roomName r) :: Expr Const) ["ROOM"] 58 | | r <- [0 .. roomCount] ] ++ 59 | [ eTyped (eConst (doorName d) :: Expr Const) ["ROOMDOOR"] 60 | | d <- doors ] 61 | initAtoms :: [InitLiteralExpr] 62 | initAtoms = 63 | eAtomic "rloc" [eConst (roomName 0) :: ConstTermExpr] : 64 | eAtomic "armempty" ([] :: [ConstTermExpr]) : 65 | makeRooms (undefined :: ConstTermExpr) doors closedDoors ++ 66 | placePackages (undefined :: ConstTermExpr) "in" packageLocs 67 | goalAtoms :: [PreferenceGDExpr] 68 | goalAtoms = 69 | placePackages (undefined :: TermExpr) "in" goalLocs 70 | in 71 | setName pname $ 72 | setDomainName "robot" $ 73 | setConstants consts $ 74 | setInitial initAtoms $ 75 | setGoal (Just $ eAnd goalAtoms) 76 | emptyProblem 77 | 78 | 79 | 80 | genPackages :: Int -> [String] -> IO [(Int, String)] 81 | genPackages roomCount pkgs = do 82 | rooms <- newRandomList (1, roomCount) 83 | return $ zip rooms pkgs 84 | 85 | {- 86 | addGoalsAndTask :: [(Int, String)] -> PDDLProblem -> PDDLProblem 87 | addGoalsAndTask goalLocs prob = 88 | let 89 | startTask = eAtomic "start_achieve-goals" ([] :: [ConstTermExpr]) 90 | goals :: [InitLiteralExpr] 91 | goals = placePackages (undefined :: ConstTermExpr) "goal-in" goalLocs 92 | initial = startTask : goals ++ getInitial prob 93 | in 94 | setInitial initial prob 95 | -} 96 | 97 | stdConnections = [ 98 | (0,1), 99 | (0,4), 100 | (0,5), 101 | (0,6), 102 | (1,2), 103 | (2,3), 104 | (6,7)] 105 | 106 | makeProblemFiles :: String -> Int -> Int -> IO () 107 | makeProblemFiles fname roomCount pkgCount = do 108 | let basename = printf "%s_%d_%d" fname roomCount pkgCount 109 | connections <- mkRandomPaths (roomCount + 1) (\x -> x - 1) 110 | let pkgs = ['o' : show n | n <- [1 .. pkgCount]] 111 | initState <- genPackages roomCount pkgs 112 | goalState <- genPackages roomCount pkgs 113 | closedDoors <- newRandomList (False, True) 114 | let prob :: PDDLProblem = makeRobotProblem basename roomCount initState goalState connections closedDoors 115 | putStrLn $ printf "Writing %s" basename 116 | writeFile (basename ++ ".pddl") (show $ pddlDoc prob) 117 | 118 | main = do 119 | [fname, roomStart, roomEnd, roomStep, packageStart, packageEnd, packageStep] <- getArgs 120 | sequence_ [ 121 | makeProblemFiles fname rooms packages 122 | | rooms <- toCount roomStart roomEnd roomStep, 123 | packages <- toCount packageStart packageEnd packageStep ] 124 | where 125 | toCount startStr endStr stepStr = takeWhile (<= read endStr) $ iterate (+ read stepStr) $ read startStr 126 | 127 | -------------------------------------------------------------------------------- /examples/blocksworld/problems/pfile_065.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_065) 3 | (:domain blocks) 4 | (:objects b1 5 | b2 6 | b3 7 | b4 8 | b5 9 | b6 10 | b7 11 | b8 12 | b9 13 | b10 14 | b11 15 | b12 16 | b13 17 | b14 18 | b15 19 | b16 20 | b17 21 | b18 22 | b19 23 | b20 24 | b21 25 | b22 26 | b23 27 | b24 28 | b25 29 | b26 30 | b27 31 | b28 32 | b29 33 | b30 34 | b31 35 | b32 36 | b33 37 | b34 38 | b35 39 | b36 40 | b37 41 | b38 42 | b39 43 | b40 44 | b41 45 | b42 46 | b43 47 | b44 48 | b45 49 | b46 50 | b47 51 | b48 52 | b49 53 | b50 54 | b51 55 | b52 56 | b53 57 | b54 58 | b55 59 | b56 60 | b57 61 | b58 62 | b59 63 | b60 64 | b61 65 | b62 66 | b63 67 | b64 68 | b65 69 | - BLOCK) 70 | (:init 71 | (hand-empty) 72 | (clear b64) 73 | (on-table b44) 74 | (on b64 b31) 75 | (on b31 b44) 76 | (clear b54) 77 | (on-table b40) 78 | (on b54 b27) 79 | (on b27 b65) 80 | (on b65 b57) 81 | (on b57 b56) 82 | (on b56 b46) 83 | (on b46 b58) 84 | (on b58 b40) 85 | (clear b33) 86 | (on-table b35) 87 | (on b33 b49) 88 | (on b49 b12) 89 | (on b12 b35) 90 | (clear b63) 91 | (on-table b29) 92 | (on b63 b43) 93 | (on b43 b24) 94 | (on b24 b2) 95 | (on b2 b42) 96 | (on b42 b23) 97 | (on b23 b62) 98 | (on b62 b19) 99 | (on b19 b59) 100 | (on b59 b29) 101 | (clear b55) 102 | (on-table b22) 103 | (on b55 b38) 104 | (on b38 b17) 105 | (on b17 b48) 106 | (on b48 b53) 107 | (on b53 b13) 108 | (on b13 b21) 109 | (on b21 b36) 110 | (on b36 b26) 111 | (on b26 b47) 112 | (on b47 b3) 113 | (on b3 b8) 114 | (on b8 b52) 115 | (on b52 b39) 116 | (on b39 b22) 117 | (clear b16) 118 | (on-table b20) 119 | (on b16 b20) 120 | (clear b10) 121 | (on-table b9) 122 | (on b10 b60) 123 | (on b60 b5) 124 | (on b5 b9) 125 | (clear b51) 126 | (on-table b7) 127 | (on b51 b30) 128 | (on b30 b37) 129 | (on b37 b34) 130 | (on b34 b1) 131 | (on b1 b25) 132 | (on b25 b41) 133 | (on b41 b61) 134 | (on b61 b7) 135 | (clear b28) 136 | (on-table b6) 137 | (on b28 b50) 138 | (on b50 b15) 139 | (on b15 b32) 140 | (on b32 b18) 141 | (on b18 b14) 142 | (on b14 b6) 143 | (clear b45) 144 | (on-table b4) 145 | (on b45 b11) 146 | (on b11 b4)) 147 | (:goal (and 148 | (clear b60) 149 | (on-table b60) 150 | (clear b44) 151 | (on-table b59) 152 | (on b44 b65) 153 | (on b65 b47) 154 | (on b47 b20) 155 | (on b20 b24) 156 | (on b24 b19) 157 | (on b19 b59) 158 | (clear b41) 159 | (on-table b50) 160 | (on b41 b53) 161 | (on b53 b56) 162 | (on b56 b25) 163 | (on b25 b50) 164 | (clear b43) 165 | (on-table b43) 166 | (clear b21) 167 | (on-table b33) 168 | (on b21 b35) 169 | (on b35 b63) 170 | (on b63 b28) 171 | (on b28 b61) 172 | (on b61 b29) 173 | (on b29 b33) 174 | (clear b51) 175 | (on-table b32) 176 | (on b51 b48) 177 | (on b48 b58) 178 | (on b58 b36) 179 | (on b36 b12) 180 | (on b12 b16) 181 | (on b16 b14) 182 | (on b14 b31) 183 | (on b31 b23) 184 | (on b23 b34) 185 | (on b34 b32) 186 | (clear b5) 187 | (on-table b30) 188 | (on b5 b10) 189 | (on b10 b7) 190 | (on b7 b4) 191 | (on b4 b39) 192 | (on b39 b30) 193 | (clear b27) 194 | (on-table b15) 195 | (on b27 b46) 196 | (on b46 b42) 197 | (on b42 b62) 198 | (on b62 b22) 199 | (on b22 b2) 200 | (on b2 b40) 201 | (on b40 b26) 202 | (on b26 b9) 203 | (on b9 b3) 204 | (on b3 b52) 205 | (on b52 b37) 206 | (on b37 b15) 207 | (clear b6) 208 | (on-table b6) 209 | (clear b11) 210 | (on-table b1) 211 | (on b11 b45) 212 | (on b45 b18) 213 | (on b18 b38) 214 | (on b38 b64) 215 | (on b64 b49) 216 | (on b49 b57) 217 | (on b57 b55) 218 | (on b55 b13) 219 | (on b13 b8) 220 | (on b8 b17) 221 | (on b17 b54) 222 | (on b54 b1)))) -------------------------------------------------------------------------------- /src/HTNTranslation/ProblemLifter.hs: -------------------------------------------------------------------------------- 1 | {-# OPTIONS_GHC 2 | -freduction-depth=30 3 | -Wall 4 | #-} 5 | {-# LANGUAGE 6 | FlexibleContexts, 7 | FlexibleInstances, 8 | MultiParamTypeClasses, 9 | OverloadedStrings, 10 | TypeOperators, 11 | UndecidableInstances 12 | #-} 13 | module HTNTranslation.ProblemLifter ( 14 | liftProblem 15 | ) where 16 | 17 | import Data.Maybe 18 | import Data.Text (Text, append) 19 | 20 | import HTNTranslation.HTNPDDL 21 | 22 | class Functor f => AtomicFinder t f where 23 | --atomicFinder :: f [Expr (Atomic t)]-> [Expr (Atomic t)] 24 | atomicFinder :: f [t] -> [t] 25 | instance (AtomicFinder t f, AtomicFinder t g) 26 | => AtomicFinder t (f :+: g) where 27 | atomicFinder (Inl x) = atomicFinder x 28 | atomicFinder (Inr y) = atomicFinder y 29 | 30 | --instance AtomicFinder t (Atomic t) where 31 | -- atomicFinder (Atomic p tl) = [eAtomic p tl] 32 | instance (:<:) (Atomic t) f => AtomicFinder (Expr f) (Atomic t) where 33 | atomicFinder (Atomic p tl) = [eAtomic p tl] 34 | instance AtomicFinder t And where 35 | atomicFinder (And el) = concat el 36 | instance AtomicFinder t Or where 37 | atomicFinder (Or el) = concat el 38 | instance AtomicFinder t Not where 39 | atomicFinder (Not e) = e 40 | instance AtomicFinder t Imply where 41 | atomicFinder (Imply e1 e2) = e1 ++ e2 42 | instance AtomicFinder t (Exists v) where 43 | atomicFinder (Exists _ e) = e 44 | instance AtomicFinder t (ForAll v) where 45 | atomicFinder (ForAll _ e) = e 46 | instance AtomicFinder t Preference where 47 | atomicFinder (Preference _ e) = e 48 | 49 | 50 | findAtomics :: AtomicFinder (Expr h) g => Expr g -> [Expr h] 51 | findAtomics = foldExpr atomicFinder 52 | 53 | 54 | class AtomicRenamer g f where 55 | atomicRenamer :: (Text -> Text) -> f (Expr g) -> Expr g 56 | instance (AtomicRenamer h f, AtomicRenamer h g) 57 | => AtomicRenamer h (f :+: g) where 58 | atomicRenamer t (Inl x) = atomicRenamer t x 59 | atomicRenamer t (Inr y) = atomicRenamer t y 60 | 61 | instance (:<:) (Atomic t) f => AtomicRenamer f (Atomic t) where 62 | atomicRenamer t (Atomic p tl) = eAtomic (t p) tl 63 | instance (:<:) And f => AtomicRenamer f And where 64 | atomicRenamer _ (And el) = eAnd el 65 | instance (:<:) Or f => AtomicRenamer f Or where 66 | atomicRenamer _ (Or el) = eOr el 67 | instance (:<:) Not f => AtomicRenamer f Not where 68 | atomicRenamer _ (Not e) = eNot e 69 | instance (:<:) Imply f => AtomicRenamer f Imply where 70 | atomicRenamer _ (Imply e1 e2) = eImply e1 e2 71 | instance (:<:) (Exists v) f => AtomicRenamer f (Exists v) where 72 | atomicRenamer _ (Exists vl e) = eExists vl e 73 | instance (:<:) (ForAll v) f => AtomicRenamer f (ForAll v) where 74 | atomicRenamer _ (ForAll vl e) = eForAll vl e 75 | instance (:<:) Preference f => AtomicRenamer f Preference where 76 | atomicRenamer _ (Preference n e) = ePreference n e 77 | 78 | 79 | renameAtomics :: (Functor g, AtomicRenamer g g) => (Text -> Text) -> Expr g -> Expr g 80 | renameAtomics h = foldExpr (atomicRenamer h) 81 | 82 | 83 | class ConstFinder g f where 84 | constFinder :: f (Maybe (Expr g)) -> Maybe (Expr g) 85 | instance (ConstFinder h f, ConstFinder h g) => ConstFinder h (f :+: g) where 86 | constFinder (Inl x) = constFinder x 87 | constFinder (Inr y) = constFinder y 88 | 89 | instance (:<:) Const f => ConstFinder f Const where 90 | constFinder (Const c) = Just $ eConst c 91 | instance ConstFinder f Var where 92 | constFinder _ = Nothing 93 | instance ConstFinder f Function where 94 | constFinder _ = Nothing 95 | 96 | findConst :: (Functor f, Functor g, ConstFinder g f) => Expr f -> Maybe (Expr g) 97 | findConst = foldExpr constFinder 98 | 99 | constAtomic :: (Functor f, Functor g, Functor h, ConstFinder g f, 100 | Atomic (Expr g) :<: h) => 101 | Expr g -> Expr (Atomic (Expr f)) -> Maybe (Expr h) 102 | constAtomic constTemplate (In (Atomic p tl)) = 103 | let consts = mapMaybe findConst tl `asTypeOf` [constTemplate] in 104 | if (length tl == length consts) then 105 | Just $ eAtomic p consts 106 | else 107 | Nothing 108 | 109 | --liftProblem :: 110 | -- template -> problem -> task -> template 111 | liftProblem :: (HasTaskLists a problem, 112 | HasInitial (Expr s) problem, 113 | HasGoal (Expr g) problem, 114 | Atomic ConstTermExpr :<: s, 115 | AtomicFinder (Expr PDDLAtom) g, 116 | AtomicRenamer g g 117 | ) => [Expr (Atomic a)] -> problem -> problem 118 | 119 | liftProblem tasks problem = 120 | 121 | let 122 | atomicGoals = 123 | maybe [] (findAtomics . renameAtomics (append "goal_")) (getGoal problem) 124 | :: [Expr PDDLAtom] 125 | initGoals = 126 | getInitial problem 127 | ++ mapMaybe (constAtomic (undefined :: ConstTermExpr)) atomicGoals 128 | in 129 | setInitial initGoals $ 130 | setTaskLists (flip map tasks $ \t -> (Nothing, [t])) $ 131 | problem 132 | -------------------------------------------------------------------------------- /examples/multiarm-blocksworld/problems/pfile_3_065.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_3_065) 3 | (:domain blocks) 4 | (:objects arm1 arm2 arm3 - ARM 5 | b1 6 | b2 7 | b3 8 | b4 9 | b5 10 | b6 11 | b7 12 | b8 13 | b9 14 | b10 15 | b11 16 | b12 17 | b13 18 | b14 19 | b15 20 | b16 21 | b17 22 | b18 23 | b19 24 | b20 25 | b21 26 | b22 27 | b23 28 | b24 29 | b25 30 | b26 31 | b27 32 | b28 33 | b29 34 | b30 35 | b31 36 | b32 37 | b33 38 | b34 39 | b35 40 | b36 41 | b37 42 | b38 43 | b39 44 | b40 45 | b41 46 | b42 47 | b43 48 | b44 49 | b45 50 | b46 51 | b47 52 | b48 53 | b49 54 | b50 55 | b51 56 | b52 57 | b53 58 | b54 59 | b55 60 | b56 61 | b57 62 | b58 63 | b59 64 | b60 65 | b61 66 | b62 67 | b63 68 | b64 69 | b65 70 | - BLOCK) 71 | (:init 72 | (hand-empty arm1) 73 | (hand-empty arm2) 74 | (hand-empty arm3) 75 | (clear b39) 76 | (on-table b59) 77 | (on b39 b22) 78 | (on b22 b25) 79 | (on b25 b64) 80 | (on b64 b40) 81 | (on b40 b37) 82 | (on b37 b58) 83 | (on b58 b33) 84 | (on b33 b57) 85 | (on b57 b26) 86 | (on b26 b31) 87 | (on b31 b44) 88 | (on b44 b13) 89 | (on b13 b60) 90 | (on b60 b42) 91 | (on b42 b48) 92 | (on b48 b47) 93 | (on b47 b2) 94 | (on b2 b59) 95 | (clear b65) 96 | (on-table b55) 97 | (on b65 b56) 98 | (on b56 b55) 99 | (clear b8) 100 | (on-table b53) 101 | (on b8 b28) 102 | (on b28 b61) 103 | (on b61 b36) 104 | (on b36 b4) 105 | (on b4 b27) 106 | (on b27 b30) 107 | (on b30 b49) 108 | (on b49 b53) 109 | (clear b34) 110 | (on-table b45) 111 | (on b34 b21) 112 | (on b21 b45) 113 | (clear b15) 114 | (on-table b38) 115 | (on b15 b62) 116 | (on b62 b54) 117 | (on b54 b20) 118 | (on b20 b17) 119 | (on b17 b50) 120 | (on b50 b38) 121 | (clear b63) 122 | (on-table b24) 123 | (on b63 b9) 124 | (on b9 b43) 125 | (on b43 b23) 126 | (on b23 b10) 127 | (on b10 b29) 128 | (on b29 b51) 129 | (on b51 b12) 130 | (on b12 b41) 131 | (on b41 b24) 132 | (clear b19) 133 | (on-table b19) 134 | (clear b3) 135 | (on-table b18) 136 | (on b3 b5) 137 | (on b5 b14) 138 | (on b14 b1) 139 | (on b1 b52) 140 | (on b52 b7) 141 | (on b7 b46) 142 | (on b46 b32) 143 | (on b32 b16) 144 | (on b16 b35) 145 | (on b35 b18) 146 | (clear b6) 147 | (on-table b11) 148 | (on b6 b11)) 149 | (:goal (and 150 | (clear b16) 151 | (on-table b57) 152 | (on b16 b9) 153 | (on b9 b53) 154 | (on b53 b61) 155 | (on b61 b65) 156 | (on b65 b36) 157 | (on b36 b27) 158 | (on b27 b58) 159 | (on b58 b37) 160 | (on b37 b25) 161 | (on b25 b57) 162 | (clear b21) 163 | (on-table b56) 164 | (on b21 b17) 165 | (on b17 b56) 166 | (clear b33) 167 | (on-table b55) 168 | (on b33 b8) 169 | (on b8 b11) 170 | (on b11 b7) 171 | (on b7 b26) 172 | (on b26 b43) 173 | (on b43 b55) 174 | (clear b34) 175 | (on-table b51) 176 | (on b34 b2) 177 | (on b2 b38) 178 | (on b38 b51) 179 | (clear b47) 180 | (on-table b49) 181 | (on b47 b3) 182 | (on b3 b59) 183 | (on b59 b49) 184 | (clear b31) 185 | (on-table b44) 186 | (on b31 b15) 187 | (on b15 b4) 188 | (on b4 b13) 189 | (on b13 b39) 190 | (on b39 b32) 191 | (on b32 b45) 192 | (on b45 b46) 193 | (on b46 b60) 194 | (on b60 b19) 195 | (on b19 b52) 196 | (on b52 b29) 197 | (on b29 b23) 198 | (on b23 b28) 199 | (on b28 b44) 200 | (clear b35) 201 | (on-table b5) 202 | (on b35 b48) 203 | (on b48 b22) 204 | (on b22 b20) 205 | (on b20 b30) 206 | (on b30 b63) 207 | (on b63 b5) 208 | (clear b41) 209 | (on-table b1) 210 | (on b41 b24) 211 | (on b24 b18) 212 | (on b18 b50) 213 | (on b50 b64) 214 | (on b64 b12) 215 | (on b12 b62) 216 | (on b62 b42) 217 | (on b42 b10) 218 | (on b10 b40) 219 | (on b40 b6) 220 | (on b6 b14) 221 | (on b14 b54) 222 | (on b54 b1)))) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # HTNTranslation 2 | 3 | HTNTranslation is a program for translating [Hierarchical Task Network](http://www.aaai.org/Papers/AAAI/1994/AAAI94-173.pdf) problems into [PDDL](http://www.jair.org/media/1129/live-1129-2132-jair.pdf). This is an extension of the work described in "[Translating HTNs to PDDL](http://www.umiacs.umd.edu/publications/translating-htns-pddl-small-amount-domain-knowledge-can-go-long-way)," handling both totally ordered and partially ordered subtasks. 4 | 5 | ## Requirements and installation. 6 | HTNTranslation requires a recent copy of [Haskell](http://hackage.haskell.org/platform/), being most recently tested on GHC 8.6.3. Beyond that, we also require [Stack](https://docs.haskellstack.org/en/stable/README/). Stack handles building and dependencies, most notably the [Planning](http://github.com/ronwalf/Planning) Haskell PDDL parsing and representation library. After downloading and unpacking HTNTranslation, install them using `stack`. For example, to install for just the current user: 7 | 8 | $ cd 9 | $ stack install 10 | ... 11 | 12 | HTNTranslation installs one executable, `htntranslate`, which is self documenting. See `examples/toy/README.txt` for a demonstration of how to translate a domain and problem and then find a solution using the [FF](http://fai.cs.uni-saarland.de/hoffmann/ff.html) planner. 13 | 14 | For non-tail recursive problems, it is necessary to specify the '-i' parameter, which specifies how many constants need to be added to the domain for the HTN to run. This roughly corresponds to the non-tail recursion depth of your HTNs. `htntranslate` calculates the bound automatically for tail recursive problems. 15 | 16 | ## Translation types 17 | 18 | There are four different translation types currently available - two for totally-ordered (TO) problems and two for partially-ordered (PO) problems. You can specify the translation type with the `-t` option. 19 | 20 | * `strips`: A STRIPS-compatible translation for both TO and PO problems. This should work with most planners, although planners may be rather slow with it. 21 | * `adl`: An ADL-compatible translation for both TO and PO problems. This makes use of quantified effects, axioms, and negated preconditions. Both FF-X and FastDownward are faster with ADL translations 22 | * `ordered`: A STRIPS-compatible translation for TO problems. This translation is generally faster than the ADL translation for the problems it covers. 23 | * `ordered09`: An implementation of the original translation appearing in IJCAI-09. The automated translation bounds are overly conservative for this translation, and so you may get slightly better performance by manually specifying the `-i` option. 24 | 25 | 26 | ## Syntax 27 | The syntax is based on PDDL, with task names specified much like predicates, and methods specified much like actions. 28 | 29 | ### Task specification 30 | In the header of the domain file, all task names should be defined. From the `toy.hpddl` example included in the distribution: 31 | 32 | (:tasks 33 | (swap ?x - OBJ ?y - OBJ) 34 | (donothing) 35 | (pickup ?x - OBJ) 36 | (drop ?x - OBJ)) 37 | 38 | ### Method and operator specification 39 | Methods are specified much like actions, but without effects and with task lists. Again, from the `toy.hpddl` example: 40 | 41 | (:method swap1 42 | :parameters (?x - OBJ ?y - OBJ) 43 | :task (swap ?x ?y) 44 | :precondition (have ?x) 45 | :tasks ((drop ?x) (pickup ?y))) 46 | 47 | In a break with other HTN systems, there is no syntactic distinction between primitive and non-primitive tasks. We implement primitive tasks by adding a `:task (...)` field to an operator. The only restriction to what task an operator may implement is that all the variables in the `:task (...)` field must be in the action's parameter list: 48 | 49 | (:action pickup 50 | :parameters (?x - OBJ) 51 | :task (pickup ?x) 52 | :precondition (handempty) 53 | :effect (have ?x)) 54 | 55 | ### Specifying sub tasks 56 | A method may have one or more `:tasks (...)` field. The order of the task names in the field specifies the ordering constraints over the subtasks. So in the above `swap1` example, we must `(drop ?x)` before we `(pickup ?y)`. 57 | 58 | We can specify arbitrary partial orders by naming the task fields and adding an `:ordering (..)` constraint. From the `examples/toy/ordering.hpddl` example: 59 | 60 | (:method t0 61 | :parameters () 62 | :task (t0) 63 | :tasks (h (c)) 64 | :tasks (i (t1)) 65 | :tasks (j (t2)) 66 | :tasks (k (c)) 67 | :ordering ( (h i) (h j) (i k) (j k) )) 68 | 69 | The `t0` method implements the task `(t0)` and has four subtasks, `(c)`, `(t1)`, `(t2)`, and `(c)`. Here we name each of the subtasks `h` through `k`, and then restrict `h` to come before `i` and `j`, and `i` and `j` to come before `k`. This lets us interleave the decomposition of `(t1)` and `(t2)`. 70 | 71 | ### Problem specification 72 | Problems are specified as PDDL notation with the addition of the `:tasks` and `:ordering` fields common to methods. The `:goal(...)` field is optional. 73 | -------------------------------------------------------------------------------- /examples/towers/problems/pfile_15.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem tower_problem_15) 3 | (:domain towers) 4 | (:objects t1 t2 t3 - TOWER 5 | r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 - RING) 6 | (:init 7 | (smallerThan r1 t1) 8 | (smallerThan r1 t2) 9 | (smallerThan r1 t3) 10 | (smallerThan r2 t1) 11 | (smallerThan r2 t2) 12 | (smallerThan r2 t3) 13 | (smallerThan r3 t1) 14 | (smallerThan r3 t2) 15 | (smallerThan r3 t3) 16 | (smallerThan r4 t1) 17 | (smallerThan r4 t2) 18 | (smallerThan r4 t3) 19 | (smallerThan r5 t1) 20 | (smallerThan r5 t2) 21 | (smallerThan r5 t3) 22 | (smallerThan r6 t1) 23 | (smallerThan r6 t2) 24 | (smallerThan r6 t3) 25 | (smallerThan r7 t1) 26 | (smallerThan r7 t2) 27 | (smallerThan r7 t3) 28 | (smallerThan r8 t1) 29 | (smallerThan r8 t2) 30 | (smallerThan r8 t3) 31 | (smallerThan r9 t1) 32 | (smallerThan r9 t2) 33 | (smallerThan r9 t3) 34 | (smallerThan r10 t1) 35 | (smallerThan r10 t2) 36 | (smallerThan r10 t3) 37 | (smallerThan r11 t1) 38 | (smallerThan r11 t2) 39 | (smallerThan r11 t3) 40 | (smallerThan r12 t1) 41 | (smallerThan r12 t2) 42 | (smallerThan r12 t3) 43 | (smallerThan r13 t1) 44 | (smallerThan r13 t2) 45 | (smallerThan r13 t3) 46 | (smallerThan r14 t1) 47 | (smallerThan r14 t2) 48 | (smallerThan r14 t3) 49 | (smallerThan r15 t1) 50 | (smallerThan r15 t2) 51 | (smallerThan r15 t3) 52 | (smallerThan r1 r2) 53 | (smallerThan r1 r3) 54 | (smallerThan r1 r4) 55 | (smallerThan r1 r5) 56 | (smallerThan r1 r6) 57 | (smallerThan r1 r7) 58 | (smallerThan r1 r8) 59 | (smallerThan r1 r9) 60 | (smallerThan r1 r10) 61 | (smallerThan r1 r11) 62 | (smallerThan r1 r12) 63 | (smallerThan r1 r13) 64 | (smallerThan r1 r14) 65 | (smallerThan r1 r15) 66 | (smallerThan r2 r3) 67 | (smallerThan r2 r4) 68 | (smallerThan r2 r5) 69 | (smallerThan r2 r6) 70 | (smallerThan r2 r7) 71 | (smallerThan r2 r8) 72 | (smallerThan r2 r9) 73 | (smallerThan r2 r10) 74 | (smallerThan r2 r11) 75 | (smallerThan r2 r12) 76 | (smallerThan r2 r13) 77 | (smallerThan r2 r14) 78 | (smallerThan r2 r15) 79 | (smallerThan r3 r4) 80 | (smallerThan r3 r5) 81 | (smallerThan r3 r6) 82 | (smallerThan r3 r7) 83 | (smallerThan r3 r8) 84 | (smallerThan r3 r9) 85 | (smallerThan r3 r10) 86 | (smallerThan r3 r11) 87 | (smallerThan r3 r12) 88 | (smallerThan r3 r13) 89 | (smallerThan r3 r14) 90 | (smallerThan r3 r15) 91 | (smallerThan r4 r5) 92 | (smallerThan r4 r6) 93 | (smallerThan r4 r7) 94 | (smallerThan r4 r8) 95 | (smallerThan r4 r9) 96 | (smallerThan r4 r10) 97 | (smallerThan r4 r11) 98 | (smallerThan r4 r12) 99 | (smallerThan r4 r13) 100 | (smallerThan r4 r14) 101 | (smallerThan r4 r15) 102 | (smallerThan r5 r6) 103 | (smallerThan r5 r7) 104 | (smallerThan r5 r8) 105 | (smallerThan r5 r9) 106 | (smallerThan r5 r10) 107 | (smallerThan r5 r11) 108 | (smallerThan r5 r12) 109 | (smallerThan r5 r13) 110 | (smallerThan r5 r14) 111 | (smallerThan r5 r15) 112 | (smallerThan r6 r7) 113 | (smallerThan r6 r8) 114 | (smallerThan r6 r9) 115 | (smallerThan r6 r10) 116 | (smallerThan r6 r11) 117 | (smallerThan r6 r12) 118 | (smallerThan r6 r13) 119 | (smallerThan r6 r14) 120 | (smallerThan r6 r15) 121 | (smallerThan r7 r8) 122 | (smallerThan r7 r9) 123 | (smallerThan r7 r10) 124 | (smallerThan r7 r11) 125 | (smallerThan r7 r12) 126 | (smallerThan r7 r13) 127 | (smallerThan r7 r14) 128 | (smallerThan r7 r15) 129 | (smallerThan r8 r9) 130 | (smallerThan r8 r10) 131 | (smallerThan r8 r11) 132 | (smallerThan r8 r12) 133 | (smallerThan r8 r13) 134 | (smallerThan r8 r14) 135 | (smallerThan r8 r15) 136 | (smallerThan r9 r10) 137 | (smallerThan r9 r11) 138 | (smallerThan r9 r12) 139 | (smallerThan r9 r13) 140 | (smallerThan r9 r14) 141 | (smallerThan r9 r15) 142 | (smallerThan r10 r11) 143 | (smallerThan r10 r12) 144 | (smallerThan r10 r13) 145 | (smallerThan r10 r14) 146 | (smallerThan r10 r15) 147 | (smallerThan r11 r12) 148 | (smallerThan r11 r13) 149 | (smallerThan r11 r14) 150 | (smallerThan r11 r15) 151 | (smallerThan r12 r13) 152 | (smallerThan r12 r14) 153 | (smallerThan r12 r15) 154 | (smallerThan r13 r14) 155 | (smallerThan r13 r15) 156 | (smallerThan r14 r15) 157 | (on r1 r2) 158 | (on r2 r3) 159 | (on r3 r4) 160 | (on r4 r5) 161 | (on r5 r6) 162 | (on r6 r7) 163 | (on r7 r8) 164 | (on r8 r9) 165 | (on r9 r10) 166 | (on r10 r11) 167 | (on r11 r12) 168 | (on r12 r13) 169 | (on r13 r14) 170 | (on r14 r15) 171 | (on r15 t1) 172 | (towerTop r1 t1) 173 | (towerTop t2 t2) 174 | (towerTop t3 t3)) 175 | (:goal (and 176 | (on r1 r2) 177 | (on r2 r3) 178 | (on r3 r4) 179 | (on r4 r5) 180 | (on r5 r6) 181 | (on r6 r7) 182 | (on r7 r8) 183 | (on r8 r9) 184 | (on r9 r10) 185 | (on r10 r11) 186 | (on r11 r12) 187 | (on r12 r13) 188 | (on r13 r14) 189 | (on r14 r15) 190 | (on r15 t3)))) -------------------------------------------------------------------------------- /examples/multiarm-blocksworld/problems/pfile_3_070.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_3_070) 3 | (:domain blocks) 4 | (:objects arm1 arm2 arm3 - ARM 5 | b1 6 | b2 7 | b3 8 | b4 9 | b5 10 | b6 11 | b7 12 | b8 13 | b9 14 | b10 15 | b11 16 | b12 17 | b13 18 | b14 19 | b15 20 | b16 21 | b17 22 | b18 23 | b19 24 | b20 25 | b21 26 | b22 27 | b23 28 | b24 29 | b25 30 | b26 31 | b27 32 | b28 33 | b29 34 | b30 35 | b31 36 | b32 37 | b33 38 | b34 39 | b35 40 | b36 41 | b37 42 | b38 43 | b39 44 | b40 45 | b41 46 | b42 47 | b43 48 | b44 49 | b45 50 | b46 51 | b47 52 | b48 53 | b49 54 | b50 55 | b51 56 | b52 57 | b53 58 | b54 59 | b55 60 | b56 61 | b57 62 | b58 63 | b59 64 | b60 65 | b61 66 | b62 67 | b63 68 | b64 69 | b65 70 | b66 71 | b67 72 | b68 73 | b69 74 | b70 75 | - BLOCK) 76 | (:init 77 | (hand-empty arm1) 78 | (hand-empty arm2) 79 | (hand-empty arm3) 80 | (clear b53) 81 | (on-table b57) 82 | (on b53 b18) 83 | (on b18 b57) 84 | (clear b62) 85 | (on-table b37) 86 | (on b62 b15) 87 | (on b15 b66) 88 | (on b66 b49) 89 | (on b49 b35) 90 | (on b35 b52) 91 | (on b52 b19) 92 | (on b19 b7) 93 | (on b7 b9) 94 | (on b9 b61) 95 | (on b61 b37) 96 | (clear b26) 97 | (on-table b36) 98 | (on b26 b22) 99 | (on b22 b2) 100 | (on b2 b28) 101 | (on b28 b44) 102 | (on b44 b36) 103 | (clear b67) 104 | (on-table b25) 105 | (on b67 b5) 106 | (on b5 b33) 107 | (on b33 b32) 108 | (on b32 b40) 109 | (on b40 b48) 110 | (on b48 b51) 111 | (on b51 b45) 112 | (on b45 b43) 113 | (on b43 b13) 114 | (on b13 b17) 115 | (on b17 b10) 116 | (on b10 b8) 117 | (on b8 b55) 118 | (on b55 b29) 119 | (on b29 b39) 120 | (on b39 b56) 121 | (on b56 b68) 122 | (on b68 b1) 123 | (on b1 b20) 124 | (on b20 b69) 125 | (on b69 b34) 126 | (on b34 b27) 127 | (on b27 b25) 128 | (clear b42) 129 | (on-table b11) 130 | (on b42 b30) 131 | (on b30 b54) 132 | (on b54 b24) 133 | (on b24 b63) 134 | (on b63 b12) 135 | (on b12 b58) 136 | (on b58 b16) 137 | (on b16 b64) 138 | (on b64 b65) 139 | (on b65 b23) 140 | (on b23 b70) 141 | (on b70 b50) 142 | (on b50 b11) 143 | (clear b47) 144 | (on-table b6) 145 | (on b47 b38) 146 | (on b38 b14) 147 | (on b14 b3) 148 | (on b3 b6) 149 | (clear b59) 150 | (on-table b4) 151 | (on b59 b60) 152 | (on b60 b46) 153 | (on b46 b41) 154 | (on b41 b21) 155 | (on b21 b31) 156 | (on b31 b4)) 157 | (:goal (and 158 | (clear b39) 159 | (on-table b59) 160 | (on b39 b10) 161 | (on b10 b9) 162 | (on b9 b46) 163 | (on b46 b60) 164 | (on b60 b16) 165 | (on b16 b18) 166 | (on b18 b2) 167 | (on b2 b17) 168 | (on b17 b31) 169 | (on b31 b69) 170 | (on b69 b68) 171 | (on b68 b44) 172 | (on b44 b64) 173 | (on b64 b41) 174 | (on b41 b70) 175 | (on b70 b45) 176 | (on b45 b59) 177 | (clear b37) 178 | (on-table b50) 179 | (on b37 b35) 180 | (on b35 b65) 181 | (on b65 b52) 182 | (on b52 b57) 183 | (on b57 b50) 184 | (clear b36) 185 | (on-table b36) 186 | (clear b66) 187 | (on-table b29) 188 | (on b66 b11) 189 | (on b11 b42) 190 | (on b42 b29) 191 | (clear b58) 192 | (on-table b24) 193 | (on b58 b19) 194 | (on b19 b53) 195 | (on b53 b22) 196 | (on b22 b4) 197 | (on b4 b48) 198 | (on b48 b14) 199 | (on b14 b6) 200 | (on b6 b21) 201 | (on b21 b54) 202 | (on b54 b13) 203 | (on b13 b24) 204 | (clear b23) 205 | (on-table b12) 206 | (on b23 b40) 207 | (on b40 b1) 208 | (on b1 b43) 209 | (on b43 b3) 210 | (on b3 b5) 211 | (on b5 b32) 212 | (on b32 b8) 213 | (on b8 b56) 214 | (on b56 b55) 215 | (on b55 b51) 216 | (on b51 b67) 217 | (on b67 b27) 218 | (on b27 b33) 219 | (on b33 b61) 220 | (on b61 b38) 221 | (on b38 b62) 222 | (on b62 b12) 223 | (clear b15) 224 | (on-table b7) 225 | (on b15 b20) 226 | (on b20 b34) 227 | (on b34 b26) 228 | (on b26 b28) 229 | (on b28 b30) 230 | (on b30 b47) 231 | (on b47 b49) 232 | (on b49 b63) 233 | (on b63 b25) 234 | (on b25 b7)))) -------------------------------------------------------------------------------- /examples/blocksworld/problems/pfile_070.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_070) 3 | (:domain blocks) 4 | (:objects b1 5 | b2 6 | b3 7 | b4 8 | b5 9 | b6 10 | b7 11 | b8 12 | b9 13 | b10 14 | b11 15 | b12 16 | b13 17 | b14 18 | b15 19 | b16 20 | b17 21 | b18 22 | b19 23 | b20 24 | b21 25 | b22 26 | b23 27 | b24 28 | b25 29 | b26 30 | b27 31 | b28 32 | b29 33 | b30 34 | b31 35 | b32 36 | b33 37 | b34 38 | b35 39 | b36 40 | b37 41 | b38 42 | b39 43 | b40 44 | b41 45 | b42 46 | b43 47 | b44 48 | b45 49 | b46 50 | b47 51 | b48 52 | b49 53 | b50 54 | b51 55 | b52 56 | b53 57 | b54 58 | b55 59 | b56 60 | b57 61 | b58 62 | b59 63 | b60 64 | b61 65 | b62 66 | b63 67 | b64 68 | b65 69 | b66 70 | b67 71 | b68 72 | b69 73 | b70 74 | - BLOCK) 75 | (:init 76 | (hand-empty) 77 | (clear b38) 78 | (on-table b60) 79 | (on b38 b50) 80 | (on b50 b18) 81 | (on b18 b65) 82 | (on b65 b25) 83 | (on b25 b35) 84 | (on b35 b32) 85 | (on b32 b21) 86 | (on b21 b49) 87 | (on b49 b43) 88 | (on b43 b61) 89 | (on b61 b42) 90 | (on b42 b15) 91 | (on b15 b27) 92 | (on b27 b48) 93 | (on b48 b68) 94 | (on b68 b22) 95 | (on b22 b70) 96 | (on b70 b31) 97 | (on b31 b10) 98 | (on b10 b60) 99 | (clear b66) 100 | (on-table b44) 101 | (on b66 b5) 102 | (on b5 b39) 103 | (on b39 b44) 104 | (clear b33) 105 | (on-table b33) 106 | (clear b24) 107 | (on-table b26) 108 | (on b24 b41) 109 | (on b41 b52) 110 | (on b52 b53) 111 | (on b53 b2) 112 | (on b2 b26) 113 | (clear b69) 114 | (on-table b19) 115 | (on b69 b30) 116 | (on b30 b19) 117 | (clear b36) 118 | (on-table b11) 119 | (on b36 b46) 120 | (on b46 b56) 121 | (on b56 b51) 122 | (on b51 b8) 123 | (on b8 b1) 124 | (on b1 b6) 125 | (on b6 b58) 126 | (on b58 b14) 127 | (on b14 b34) 128 | (on b34 b11) 129 | (clear b59) 130 | (on-table b7) 131 | (on b59 b67) 132 | (on b67 b57) 133 | (on b57 b17) 134 | (on b17 b40) 135 | (on b40 b13) 136 | (on b13 b37) 137 | (on b37 b62) 138 | (on b62 b63) 139 | (on b63 b29) 140 | (on b29 b7) 141 | (clear b28) 142 | (on-table b4) 143 | (on b28 b54) 144 | (on b54 b45) 145 | (on b45 b55) 146 | (on b55 b23) 147 | (on b23 b3) 148 | (on b3 b12) 149 | (on b12 b47) 150 | (on b47 b16) 151 | (on b16 b20) 152 | (on b20 b64) 153 | (on b64 b9) 154 | (on b9 b4)) 155 | (:goal (and 156 | (clear b64) 157 | (on-table b63) 158 | (on b64 b20) 159 | (on b20 b56) 160 | (on b56 b38) 161 | (on b38 b12) 162 | (on b12 b66) 163 | (on b66 b67) 164 | (on b67 b28) 165 | (on b28 b33) 166 | (on b33 b23) 167 | (on b23 b63) 168 | (clear b11) 169 | (on-table b52) 170 | (on b11 b5) 171 | (on b5 b52) 172 | (clear b61) 173 | (on-table b44) 174 | (on b61 b21) 175 | (on b21 b55) 176 | (on b55 b37) 177 | (on b37 b65) 178 | (on b65 b44) 179 | (clear b32) 180 | (on-table b30) 181 | (on b32 b10) 182 | (on b10 b50) 183 | (on b50 b18) 184 | (on b18 b39) 185 | (on b39 b31) 186 | (on b31 b1) 187 | (on b1 b30) 188 | (clear b54) 189 | (on-table b22) 190 | (on b54 b53) 191 | (on b53 b25) 192 | (on b25 b42) 193 | (on b42 b9) 194 | (on b9 b40) 195 | (on b40 b57) 196 | (on b57 b36) 197 | (on b36 b22) 198 | (clear b27) 199 | (on-table b17) 200 | (on b27 b17) 201 | (clear b29) 202 | (on-table b8) 203 | (on b29 b43) 204 | (on b43 b34) 205 | (on b34 b24) 206 | (on b24 b13) 207 | (on b13 b8) 208 | (clear b41) 209 | (on-table b7) 210 | (on b41 b7) 211 | (clear b47) 212 | (on-table b4) 213 | (on b47 b51) 214 | (on b51 b16) 215 | (on b16 b6) 216 | (on b6 b62) 217 | (on b62 b60) 218 | (on b60 b15) 219 | (on b15 b58) 220 | (on b58 b69) 221 | (on b69 b49) 222 | (on b49 b4) 223 | (clear b14) 224 | (on-table b2) 225 | (on b14 b48) 226 | (on b48 b19) 227 | (on b19 b26) 228 | (on b26 b3) 229 | (on b3 b46) 230 | (on b46 b35) 231 | (on b35 b45) 232 | (on b45 b59) 233 | (on b59 b68) 234 | (on b68 b70) 235 | (on b70 b2)))) -------------------------------------------------------------------------------- /examples/robot/problems/pfile_30_30.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_30_30) 3 | (:domain robot) 4 | (:objects o1 5 | o2 6 | o3 7 | o4 8 | o5 9 | o6 10 | o7 11 | o8 12 | o9 13 | o10 14 | o11 15 | o12 16 | o13 17 | o14 18 | o15 19 | o16 20 | o17 21 | o18 22 | o19 23 | o20 24 | o21 25 | o22 26 | o23 27 | o24 28 | o25 29 | o26 30 | o27 31 | o28 32 | o29 33 | o30 34 | - PACKAGE 35 | c 36 | r1 37 | r2 38 | r3 39 | r4 40 | r5 41 | r6 42 | r7 43 | r8 44 | r9 45 | r10 46 | r11 47 | r12 48 | r13 49 | r14 50 | r15 51 | r16 52 | r17 53 | r18 54 | r19 55 | r20 56 | r21 57 | r22 58 | r23 59 | r24 60 | r25 61 | r26 62 | r27 63 | r28 64 | r29 65 | r30 66 | - ROOM 67 | d524 68 | d2224 69 | d1022 70 | d710 71 | d79 72 | d713 73 | d1021 74 | d122 75 | d117 76 | d1723 77 | d623 78 | d628 79 | d2829 80 | d324 81 | d626 82 | d1629 83 | d1428 84 | d214 85 | d215 86 | d212 87 | d1230 88 | d318 89 | d1620 90 | d428 91 | d010 92 | d1827 93 | d011 94 | d828 95 | d625 96 | d1929 97 | - ROOMDOOR) 98 | (:init 99 | (rloc c) 100 | (armempty) 101 | (door c r10 d010) 102 | (door c r11 d011) 103 | (door r1 r17 d117) 104 | (door r1 r22 d122) 105 | (door r2 r12 d212) 106 | (door r2 r14 d214) 107 | (door r2 r15 d215) 108 | (door r3 r18 d318) 109 | (door r3 r24 d324) 110 | (door r4 r28 d428) 111 | (door r5 r24 d524) 112 | (door r6 r23 d623) 113 | (door r6 r25 d625) 114 | (door r6 r26 d626) 115 | (door r6 r28 d628) 116 | (door r7 r9 d79) 117 | (door r7 r10 d710) 118 | (door r7 r13 d713) 119 | (door r8 r28 d828) 120 | (door r9 r7 d79) 121 | (door r10 c d010) 122 | (door r10 r7 d710) 123 | (door r10 r21 d1021) 124 | (door r10 r22 d1022) 125 | (door r11 c d011) 126 | (door r12 r2 d212) 127 | (door r12 r30 d1230) 128 | (door r13 r7 d713) 129 | (door r14 r2 d214) 130 | (door r14 r28 d1428) 131 | (door r15 r2 d215) 132 | (door r16 r20 d1620) 133 | (door r16 r29 d1629) 134 | (door r17 r1 d117) 135 | (door r17 r23 d1723) 136 | (door r18 r3 d318) 137 | (door r18 r27 d1827) 138 | (door r19 r29 d1929) 139 | (door r20 r16 d1620) 140 | (door r21 r10 d1021) 141 | (door r22 r1 d122) 142 | (door r22 r10 d1022) 143 | (door r22 r24 d2224) 144 | (door r23 r6 d623) 145 | (door r23 r17 d1723) 146 | (door r24 r3 d324) 147 | (door r24 r5 d524) 148 | (door r24 r22 d2224) 149 | (door r25 r6 d625) 150 | (door r26 r6 d626) 151 | (door r27 r18 d1827) 152 | (door r28 r4 d428) 153 | (door r28 r6 d628) 154 | (door r28 r8 d828) 155 | (door r28 r14 d1428) 156 | (door r28 r29 d2829) 157 | (door r29 r16 d1629) 158 | (door r29 r19 d1929) 159 | (door r29 r28 d2829) 160 | (door r30 r12 d1230) 161 | (closed d2224) 162 | (closed d713) 163 | (closed d1021) 164 | (closed d122) 165 | (closed d1723) 166 | (closed d2829) 167 | (closed d626) 168 | (closed d1629) 169 | (closed d214) 170 | (closed d212) 171 | (closed d1230) 172 | (closed d318) 173 | (closed d1929) 174 | (in o1 r26) 175 | (in o2 r25) 176 | (in o3 r9) 177 | (in o4 r12) 178 | (in o5 r29) 179 | (in o6 r13) 180 | (in o7 r26) 181 | (in o8 r7) 182 | (in o9 r9) 183 | (in o10 r4) 184 | (in o11 r13) 185 | (in o12 r22) 186 | (in o13 r1) 187 | (in o14 r13) 188 | (in o15 r8) 189 | (in o16 r14) 190 | (in o17 r11) 191 | (in o18 r21) 192 | (in o19 r24) 193 | (in o20 r22) 194 | (in o21 r30) 195 | (in o22 r17) 196 | (in o23 r7) 197 | (in o24 r2) 198 | (in o25 r25) 199 | (in o26 r26) 200 | (in o27 r10) 201 | (in o28 r9) 202 | (in o29 r30) 203 | (in o30 r26)) 204 | (:goal (and 205 | (in o1 r9) 206 | (in o2 r18) 207 | (in o3 r7) 208 | (in o4 r20) 209 | (in o5 r3) 210 | (in o6 r26) 211 | (in o7 r18) 212 | (in o8 r10) 213 | (in o9 r26) 214 | (in o10 r21) 215 | (in o11 r10) 216 | (in o12 r13) 217 | (in o13 r14) 218 | (in o14 r2) 219 | (in o15 r5) 220 | (in o16 r28) 221 | (in o17 r28) 222 | (in o18 r8) 223 | (in o19 r9) 224 | (in o20 r22) 225 | (in o21 r9) 226 | (in o22 r11) 227 | (in o23 r11) 228 | (in o24 r26) 229 | (in o25 r22) 230 | (in o26 r1) 231 | (in o27 r18) 232 | (in o28 r15) 233 | (in o29 r18) 234 | (in o30 r17)))) -------------------------------------------------------------------------------- /examples/blocksworld/problems/pfile_075.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_075) 3 | (:domain blocks) 4 | (:objects b1 5 | b2 6 | b3 7 | b4 8 | b5 9 | b6 10 | b7 11 | b8 12 | b9 13 | b10 14 | b11 15 | b12 16 | b13 17 | b14 18 | b15 19 | b16 20 | b17 21 | b18 22 | b19 23 | b20 24 | b21 25 | b22 26 | b23 27 | b24 28 | b25 29 | b26 30 | b27 31 | b28 32 | b29 33 | b30 34 | b31 35 | b32 36 | b33 37 | b34 38 | b35 39 | b36 40 | b37 41 | b38 42 | b39 43 | b40 44 | b41 45 | b42 46 | b43 47 | b44 48 | b45 49 | b46 50 | b47 51 | b48 52 | b49 53 | b50 54 | b51 55 | b52 56 | b53 57 | b54 58 | b55 59 | b56 60 | b57 61 | b58 62 | b59 63 | b60 64 | b61 65 | b62 66 | b63 67 | b64 68 | b65 69 | b66 70 | b67 71 | b68 72 | b69 73 | b70 74 | b71 75 | b72 76 | b73 77 | b74 78 | b75 79 | - BLOCK) 80 | (:init 81 | (hand-empty) 82 | (clear b41) 83 | (on-table b51) 84 | (on b41 b75) 85 | (on b75 b14) 86 | (on b14 b33) 87 | (on b33 b15) 88 | (on b15 b12) 89 | (on b12 b7) 90 | (on b7 b74) 91 | (on b74 b61) 92 | (on b61 b68) 93 | (on b68 b2) 94 | (on b2 b59) 95 | (on b59 b46) 96 | (on b46 b6) 97 | (on b6 b54) 98 | (on b54 b42) 99 | (on b42 b70) 100 | (on b70 b51) 101 | (clear b29) 102 | (on-table b30) 103 | (on b29 b23) 104 | (on b23 b73) 105 | (on b73 b19) 106 | (on b19 b3) 107 | (on b3 b40) 108 | (on b40 b69) 109 | (on b69 b36) 110 | (on b36 b66) 111 | (on b66 b50) 112 | (on b50 b10) 113 | (on b10 b62) 114 | (on b62 b57) 115 | (on b57 b25) 116 | (on b25 b56) 117 | (on b56 b45) 118 | (on b45 b39) 119 | (on b39 b32) 120 | (on b32 b72) 121 | (on b72 b8) 122 | (on b8 b4) 123 | (on b4 b5) 124 | (on b5 b63) 125 | (on b63 b49) 126 | (on b49 b53) 127 | (on b53 b44) 128 | (on b44 b64) 129 | (on b64 b55) 130 | (on b55 b67) 131 | (on b67 b16) 132 | (on b16 b60) 133 | (on b60 b9) 134 | (on b9 b1) 135 | (on b1 b48) 136 | (on b48 b20) 137 | (on b20 b37) 138 | (on b37 b18) 139 | (on b18 b24) 140 | (on b24 b38) 141 | (on b38 b52) 142 | (on b52 b26) 143 | (on b26 b27) 144 | (on b27 b31) 145 | (on b31 b30) 146 | (clear b65) 147 | (on-table b22) 148 | (on b65 b34) 149 | (on b34 b43) 150 | (on b43 b47) 151 | (on b47 b58) 152 | (on b58 b13) 153 | (on b13 b17) 154 | (on b17 b71) 155 | (on b71 b35) 156 | (on b35 b11) 157 | (on b11 b28) 158 | (on b28 b22) 159 | (clear b21) 160 | (on-table b21)) 161 | (:goal (and 162 | (clear b55) 163 | (on-table b67) 164 | (on b55 b1) 165 | (on b1 b15) 166 | (on b15 b68) 167 | (on b68 b7) 168 | (on b7 b2) 169 | (on b2 b65) 170 | (on b65 b50) 171 | (on b50 b19) 172 | (on b19 b42) 173 | (on b42 b13) 174 | (on b13 b28) 175 | (on b28 b67) 176 | (clear b75) 177 | (on-table b54) 178 | (on b75 b32) 179 | (on b32 b66) 180 | (on b66 b39) 181 | (on b39 b54) 182 | (clear b31) 183 | (on-table b53) 184 | (on b31 b34) 185 | (on b34 b58) 186 | (on b58 b52) 187 | (on b52 b61) 188 | (on b61 b64) 189 | (on b64 b33) 190 | (on b33 b45) 191 | (on b45 b73) 192 | (on b73 b53) 193 | (clear b70) 194 | (on-table b47) 195 | (on b70 b59) 196 | (on b59 b62) 197 | (on b62 b63) 198 | (on b63 b72) 199 | (on b72 b71) 200 | (on b71 b4) 201 | (on b4 b18) 202 | (on b18 b69) 203 | (on b69 b24) 204 | (on b24 b23) 205 | (on b23 b41) 206 | (on b41 b14) 207 | (on b14 b74) 208 | (on b74 b47) 209 | (clear b26) 210 | (on-table b46) 211 | (on b26 b43) 212 | (on b43 b16) 213 | (on b16 b29) 214 | (on b29 b35) 215 | (on b35 b10) 216 | (on b10 b38) 217 | (on b38 b46) 218 | (clear b8) 219 | (on-table b30) 220 | (on b8 b30) 221 | (clear b44) 222 | (on-table b22) 223 | (on b44 b49) 224 | (on b49 b17) 225 | (on b17 b48) 226 | (on b48 b27) 227 | (on b27 b60) 228 | (on b60 b12) 229 | (on b12 b22) 230 | (clear b21) 231 | (on-table b5) 232 | (on b21 b6) 233 | (on b6 b25) 234 | (on b25 b56) 235 | (on b56 b37) 236 | (on b37 b3) 237 | (on b3 b11) 238 | (on b11 b57) 239 | (on b57 b40) 240 | (on b40 b36) 241 | (on b36 b51) 242 | (on b51 b9) 243 | (on b9 b20) 244 | (on b20 b5)))) -------------------------------------------------------------------------------- /examples/robot/problems/pfile_10_70.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_10_70) 3 | (:domain robot) 4 | (:objects o1 5 | o2 6 | o3 7 | o4 8 | o5 9 | o6 10 | o7 11 | o8 12 | o9 13 | o10 14 | o11 15 | o12 16 | o13 17 | o14 18 | o15 19 | o16 20 | o17 21 | o18 22 | o19 23 | o20 24 | o21 25 | o22 26 | o23 27 | o24 28 | o25 29 | o26 30 | o27 31 | o28 32 | o29 33 | o30 34 | o31 35 | o32 36 | o33 37 | o34 38 | o35 39 | o36 40 | o37 41 | o38 42 | o39 43 | o40 44 | o41 45 | o42 46 | o43 47 | o44 48 | o45 49 | o46 50 | o47 51 | o48 52 | o49 53 | o50 54 | o51 55 | o52 56 | o53 57 | o54 58 | o55 59 | o56 60 | o57 61 | o58 62 | o59 63 | o60 64 | o61 65 | o62 66 | o63 67 | o64 68 | o65 69 | o66 70 | o67 71 | o68 72 | o69 73 | o70 74 | - PACKAGE 75 | c r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 - ROOM 76 | d69 d610 d110 d18 d56 d35 d78 d27 d34 d04 - ROOMDOOR) 77 | (:init 78 | (rloc c) 79 | (armempty) 80 | (door c r4 d04) 81 | (door r1 r8 d18) 82 | (door r1 r10 d110) 83 | (door r2 r7 d27) 84 | (door r3 r4 d34) 85 | (door r3 r5 d35) 86 | (door r4 c d04) 87 | (door r4 r3 d34) 88 | (door r5 r3 d35) 89 | (door r5 r6 d56) 90 | (door r6 r5 d56) 91 | (door r6 r9 d69) 92 | (door r6 r10 d610) 93 | (door r7 r2 d27) 94 | (door r7 r8 d78) 95 | (door r8 r1 d18) 96 | (door r8 r7 d78) 97 | (door r9 r6 d69) 98 | (door r10 r1 d110) 99 | (door r10 r6 d610) 100 | (closed d69) 101 | (closed d110) 102 | (closed d35) 103 | (closed d78) 104 | (closed d27) 105 | (closed d34) 106 | (in o1 r4) 107 | (in o2 r8) 108 | (in o3 r7) 109 | (in o4 r7) 110 | (in o5 r2) 111 | (in o6 r7) 112 | (in o7 r3) 113 | (in o8 r7) 114 | (in o9 r3) 115 | (in o10 r10) 116 | (in o11 r5) 117 | (in o12 r8) 118 | (in o13 r7) 119 | (in o14 r4) 120 | (in o15 r5) 121 | (in o16 r4) 122 | (in o17 r3) 123 | (in o18 r7) 124 | (in o19 r8) 125 | (in o20 r10) 126 | (in o21 r10) 127 | (in o22 r1) 128 | (in o23 r5) 129 | (in o24 r6) 130 | (in o25 r7) 131 | (in o26 r1) 132 | (in o27 r3) 133 | (in o28 r6) 134 | (in o29 r6) 135 | (in o30 r5) 136 | (in o31 r4) 137 | (in o32 r8) 138 | (in o33 r2) 139 | (in o34 r6) 140 | (in o35 r9) 141 | (in o36 r10) 142 | (in o37 r8) 143 | (in o38 r6) 144 | (in o39 r7) 145 | (in o40 r3) 146 | (in o41 r10) 147 | (in o42 r5) 148 | (in o43 r7) 149 | (in o44 r3) 150 | (in o45 r6) 151 | (in o46 r5) 152 | (in o47 r10) 153 | (in o48 r6) 154 | (in o49 r2) 155 | (in o50 r9) 156 | (in o51 r7) 157 | (in o52 r1) 158 | (in o53 r4) 159 | (in o54 r5) 160 | (in o55 r9) 161 | (in o56 r5) 162 | (in o57 r6) 163 | (in o58 r8) 164 | (in o59 r10) 165 | (in o60 r8) 166 | (in o61 r6) 167 | (in o62 r10) 168 | (in o63 r6) 169 | (in o64 r2) 170 | (in o65 r8) 171 | (in o66 r1) 172 | (in o67 r2) 173 | (in o68 r10) 174 | (in o69 r2) 175 | (in o70 r10)) 176 | (:goal (and 177 | (in o1 r3) 178 | (in o2 r5) 179 | (in o3 r4) 180 | (in o4 r8) 181 | (in o5 r8) 182 | (in o6 r7) 183 | (in o7 r4) 184 | (in o8 r3) 185 | (in o9 r6) 186 | (in o10 r2) 187 | (in o11 r5) 188 | (in o12 r10) 189 | (in o13 r5) 190 | (in o14 r5) 191 | (in o15 r3) 192 | (in o16 r4) 193 | (in o17 r5) 194 | (in o18 r9) 195 | (in o19 r10) 196 | (in o20 r2) 197 | (in o21 r3) 198 | (in o22 r2) 199 | (in o23 r6) 200 | (in o24 r6) 201 | (in o25 r8) 202 | (in o26 r5) 203 | (in o27 r6) 204 | (in o28 r10) 205 | (in o29 r1) 206 | (in o30 r3) 207 | (in o31 r3) 208 | (in o32 r8) 209 | (in o33 r10) 210 | (in o34 r5) 211 | (in o35 r9) 212 | (in o36 r8) 213 | (in o37 r7) 214 | (in o38 r6) 215 | (in o39 r3) 216 | (in o40 r3) 217 | (in o41 r7) 218 | (in o42 r9) 219 | (in o43 r4) 220 | (in o44 r2) 221 | (in o45 r4) 222 | (in o46 r9) 223 | (in o47 r5) 224 | (in o48 r9) 225 | (in o49 r6) 226 | (in o50 r6) 227 | (in o51 r6) 228 | (in o52 r5) 229 | (in o53 r10) 230 | (in o54 r4) 231 | (in o55 r7) 232 | (in o56 r9) 233 | (in o57 r4) 234 | (in o58 r6) 235 | (in o59 r8) 236 | (in o60 r7) 237 | (in o61 r9) 238 | (in o62 r3) 239 | (in o63 r9) 240 | (in o64 r9) 241 | (in o65 r1) 242 | (in o66 r3) 243 | (in o67 r4) 244 | (in o68 r4) 245 | (in o69 r4) 246 | (in o70 r1)))) -------------------------------------------------------------------------------- /examples/multiarm-blocksworld/problems/pfile_3_075.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_3_075) 3 | (:domain blocks) 4 | (:objects arm1 arm2 arm3 - ARM 5 | b1 6 | b2 7 | b3 8 | b4 9 | b5 10 | b6 11 | b7 12 | b8 13 | b9 14 | b10 15 | b11 16 | b12 17 | b13 18 | b14 19 | b15 20 | b16 21 | b17 22 | b18 23 | b19 24 | b20 25 | b21 26 | b22 27 | b23 28 | b24 29 | b25 30 | b26 31 | b27 32 | b28 33 | b29 34 | b30 35 | b31 36 | b32 37 | b33 38 | b34 39 | b35 40 | b36 41 | b37 42 | b38 43 | b39 44 | b40 45 | b41 46 | b42 47 | b43 48 | b44 49 | b45 50 | b46 51 | b47 52 | b48 53 | b49 54 | b50 55 | b51 56 | b52 57 | b53 58 | b54 59 | b55 60 | b56 61 | b57 62 | b58 63 | b59 64 | b60 65 | b61 66 | b62 67 | b63 68 | b64 69 | b65 70 | b66 71 | b67 72 | b68 73 | b69 74 | b70 75 | b71 76 | b72 77 | b73 78 | b74 79 | b75 80 | - BLOCK) 81 | (:init 82 | (hand-empty arm1) 83 | (hand-empty arm2) 84 | (hand-empty arm3) 85 | (clear b70) 86 | (on-table b63) 87 | (on b70 b5) 88 | (on b5 b61) 89 | (on b61 b52) 90 | (on b52 b36) 91 | (on b36 b35) 92 | (on b35 b47) 93 | (on b47 b51) 94 | (on b51 b39) 95 | (on b39 b60) 96 | (on b60 b12) 97 | (on b12 b63) 98 | (clear b8) 99 | (on-table b57) 100 | (on b8 b7) 101 | (on b7 b66) 102 | (on b66 b64) 103 | (on b64 b45) 104 | (on b45 b9) 105 | (on b9 b42) 106 | (on b42 b23) 107 | (on b23 b44) 108 | (on b44 b15) 109 | (on b15 b3) 110 | (on b3 b6) 111 | (on b6 b10) 112 | (on b10 b41) 113 | (on b41 b57) 114 | (clear b55) 115 | (on-table b50) 116 | (on b55 b69) 117 | (on b69 b34) 118 | (on b34 b74) 119 | (on b74 b13) 120 | (on b13 b30) 121 | (on b30 b19) 122 | (on b19 b25) 123 | (on b25 b65) 124 | (on b65 b50) 125 | (clear b24) 126 | (on-table b31) 127 | (on b24 b49) 128 | (on b49 b14) 129 | (on b14 b38) 130 | (on b38 b71) 131 | (on b71 b18) 132 | (on b18 b11) 133 | (on b11 b54) 134 | (on b54 b72) 135 | (on b72 b22) 136 | (on b22 b16) 137 | (on b16 b32) 138 | (on b32 b48) 139 | (on b48 b46) 140 | (on b46 b21) 141 | (on b21 b26) 142 | (on b26 b28) 143 | (on b28 b17) 144 | (on b17 b53) 145 | (on b53 b59) 146 | (on b59 b31) 147 | (clear b75) 148 | (on-table b27) 149 | (on b75 b58) 150 | (on b58 b67) 151 | (on b67 b37) 152 | (on b37 b73) 153 | (on b73 b56) 154 | (on b56 b20) 155 | (on b20 b40) 156 | (on b40 b62) 157 | (on b62 b4) 158 | (on b4 b29) 159 | (on b29 b33) 160 | (on b33 b1) 161 | (on b1 b43) 162 | (on b43 b27) 163 | (clear b68) 164 | (on-table b2) 165 | (on b68 b2)) 166 | (:goal (and 167 | (clear b57) 168 | (on-table b61) 169 | (on b57 b36) 170 | (on b36 b39) 171 | (on b39 b53) 172 | (on b53 b45) 173 | (on b45 b13) 174 | (on b13 b3) 175 | (on b3 b18) 176 | (on b18 b46) 177 | (on b46 b55) 178 | (on b55 b61) 179 | (clear b56) 180 | (on-table b58) 181 | (on b56 b37) 182 | (on b37 b58) 183 | (clear b70) 184 | (on-table b52) 185 | (on b70 b60) 186 | (on b60 b71) 187 | (on b71 b75) 188 | (on b75 b52) 189 | (clear b20) 190 | (on-table b43) 191 | (on b20 b69) 192 | (on b69 b72) 193 | (on b72 b47) 194 | (on b47 b33) 195 | (on b33 b7) 196 | (on b7 b59) 197 | (on b59 b68) 198 | (on b68 b74) 199 | (on b74 b15) 200 | (on b15 b12) 201 | (on b12 b73) 202 | (on b73 b29) 203 | (on b29 b43) 204 | (clear b40) 205 | (on-table b40) 206 | (clear b49) 207 | (on-table b9) 208 | (on b49 b67) 209 | (on b67 b28) 210 | (on b28 b44) 211 | (on b44 b65) 212 | (on b65 b32) 213 | (on b32 b10) 214 | (on b10 b25) 215 | (on b25 b1) 216 | (on b1 b21) 217 | (on b21 b5) 218 | (on b5 b27) 219 | (on b27 b63) 220 | (on b63 b17) 221 | (on b17 b31) 222 | (on b31 b38) 223 | (on b38 b19) 224 | (on b19 b34) 225 | (on b34 b6) 226 | (on b6 b11) 227 | (on b11 b23) 228 | (on b23 b62) 229 | (on b62 b2) 230 | (on b2 b30) 231 | (on b30 b51) 232 | (on b51 b54) 233 | (on b54 b24) 234 | (on b24 b22) 235 | (on b22 b41) 236 | (on b41 b66) 237 | (on b66 b42) 238 | (on b42 b35) 239 | (on b35 b9) 240 | (clear b16) 241 | (on-table b8) 242 | (on b16 b50) 243 | (on b50 b4) 244 | (on b4 b14) 245 | (on b14 b48) 246 | (on b48 b26) 247 | (on b26 b64) 248 | (on b64 b8)))) -------------------------------------------------------------------------------- /examples/blocksworld/problems/pfile_080.pddl: -------------------------------------------------------------------------------- 1 | (define 2 | (problem pfile_080) 3 | (:domain blocks) 4 | (:objects b1 5 | b2 6 | b3 7 | b4 8 | b5 9 | b6 10 | b7 11 | b8 12 | b9 13 | b10 14 | b11 15 | b12 16 | b13 17 | b14 18 | b15 19 | b16 20 | b17 21 | b18 22 | b19 23 | b20 24 | b21 25 | b22 26 | b23 27 | b24 28 | b25 29 | b26 30 | b27 31 | b28 32 | b29 33 | b30 34 | b31 35 | b32 36 | b33 37 | b34 38 | b35 39 | b36 40 | b37 41 | b38 42 | b39 43 | b40 44 | b41 45 | b42 46 | b43 47 | b44 48 | b45 49 | b46 50 | b47 51 | b48 52 | b49 53 | b50 54 | b51 55 | b52 56 | b53 57 | b54 58 | b55 59 | b56 60 | b57 61 | b58 62 | b59 63 | b60 64 | b61 65 | b62 66 | b63 67 | b64 68 | b65 69 | b66 70 | b67 71 | b68 72 | b69 73 | b70 74 | b71 75 | b72 76 | b73 77 | b74 78 | b75 79 | b76 80 | b77 81 | b78 82 | b79 83 | b80 84 | - BLOCK) 85 | (:init 86 | (hand-empty) 87 | (clear b62) 88 | (on-table b69) 89 | (on b62 b16) 90 | (on b16 b5) 91 | (on b5 b34) 92 | (on b34 b9) 93 | (on b9 b78) 94 | (on b78 b3) 95 | (on b3 b37) 96 | (on b37 b69) 97 | (clear b4) 98 | (on-table b44) 99 | (on b4 b66) 100 | (on b66 b64) 101 | (on b64 b8) 102 | (on b8 b20) 103 | (on b20 b55) 104 | (on b55 b50) 105 | (on b50 b65) 106 | (on b65 b29) 107 | (on b29 b44) 108 | (clear b74) 109 | (on-table b41) 110 | (on b74 b73) 111 | (on b73 b67) 112 | (on b67 b15) 113 | (on b15 b70) 114 | (on b70 b68) 115 | (on b68 b38) 116 | (on b38 b35) 117 | (on b35 b77) 118 | (on b77 b49) 119 | (on b49 b14) 120 | (on b14 b24) 121 | (on b24 b31) 122 | (on b31 b10) 123 | (on b10 b11) 124 | (on b11 b26) 125 | (on b26 b54) 126 | (on b54 b41) 127 | (clear b71) 128 | (on-table b39) 129 | (on b71 b52) 130 | (on b52 b1) 131 | (on b1 b39) 132 | (clear b57) 133 | (on-table b36) 134 | (on b57 b47) 135 | (on b47 b42) 136 | (on b42 b75) 137 | (on b75 b19) 138 | (on b19 b2) 139 | (on b2 b53) 140 | (on b53 b13) 141 | (on b13 b27) 142 | (on b27 b80) 143 | (on b80 b12) 144 | (on b12 b79) 145 | (on b79 b32) 146 | (on b32 b36) 147 | (clear b33) 148 | (on-table b33) 149 | (clear b30) 150 | (on-table b25) 151 | (on b30 b59) 152 | (on b59 b51) 153 | (on b51 b23) 154 | (on b23 b58) 155 | (on b58 b76) 156 | (on b76 b46) 157 | (on b46 b22) 158 | (on b22 b25) 159 | (clear b45) 160 | (on-table b7) 161 | (on b45 b7) 162 | (clear b28) 163 | (on-table b6) 164 | (on b28 b43) 165 | (on b43 b60) 166 | (on b60 b40) 167 | (on b40 b18) 168 | (on b18 b17) 169 | (on b17 b21) 170 | (on b21 b63) 171 | (on b63 b48) 172 | (on b48 b72) 173 | (on b72 b56) 174 | (on b56 b61) 175 | (on b61 b6)) 176 | (:goal (and 177 | (clear b4) 178 | (on-table b65) 179 | (on b4 b71) 180 | (on b71 b65) 181 | (clear b21) 182 | (on-table b62) 183 | (on b21 b14) 184 | (on b14 b22) 185 | (on b22 b23) 186 | (on b23 b46) 187 | (on b46 b2) 188 | (on b2 b68) 189 | (on b68 b3) 190 | (on b3 b63) 191 | (on b63 b31) 192 | (on b31 b6) 193 | (on b6 b17) 194 | (on b17 b47) 195 | (on b47 b20) 196 | (on b20 b24) 197 | (on b24 b62) 198 | (clear b36) 199 | (on-table b56) 200 | (on b36 b38) 201 | (on b38 b75) 202 | (on b75 b39) 203 | (on b39 b40) 204 | (on b40 b56) 205 | (clear b52) 206 | (on-table b51) 207 | (on b52 b64) 208 | (on b64 b80) 209 | (on b80 b51) 210 | (clear b45) 211 | (on-table b45) 212 | (clear b5) 213 | (on-table b42) 214 | (on b5 b48) 215 | (on b48 b9) 216 | (on b9 b59) 217 | (on b59 b42) 218 | (clear b30) 219 | (on-table b10) 220 | (on b30 b66) 221 | (on b66 b44) 222 | (on b44 b43) 223 | (on b43 b58) 224 | (on b58 b49) 225 | (on b49 b15) 226 | (on b15 b69) 227 | (on b69 b27) 228 | (on b27 b55) 229 | (on b55 b79) 230 | (on b79 b10) 231 | (clear b12) 232 | (on-table b8) 233 | (on b12 b67) 234 | (on b67 b25) 235 | (on b25 b13) 236 | (on b13 b34) 237 | (on b34 b76) 238 | (on b76 b33) 239 | (on b33 b78) 240 | (on b78 b28) 241 | (on b28 b60) 242 | (on b60 b35) 243 | (on b35 b53) 244 | (on b53 b77) 245 | (on b77 b70) 246 | (on b70 b19) 247 | (on b19 b16) 248 | (on b16 b50) 249 | (on b50 b37) 250 | (on b37 b41) 251 | (on b41 b11) 252 | (on b11 b7) 253 | (on b7 b72) 254 | (on b72 b26) 255 | (on b26 b73) 256 | (on b73 b54) 257 | (on b54 b18) 258 | (on b18 b32) 259 | (on b32 b61) 260 | (on b61 b57) 261 | (on b57 b74) 262 | (on b74 b29) 263 | (on b29 b8) 264 | (clear b1) 265 | (on-table b1)))) --------------------------------------------------------------------------------