我正在使用 PDDL 生成解决河内塔谜题的计划。我会给出所有问题的问题、规则、领域和情况说明书。
PDDL 告诉我目标可以简化为错误;但是,我知道这个难题是可以解决的。
谜:
有3个帖子。每个人身上都有戒指。每个帖子从下到上。第一个职位有第二大环。第二个柱子有最小的环,第二个最小的环在它上面。第三个柱子有第三大环,最大的环叠在上面。
规则:
这个游戏的规则是你只能在一个更大的戒指上堆叠一个戒指。你的目标是把所有的戒指放在同一个柱子上,从大到小堆叠。
我的代码
领域
(define (domain hanoi)
(:requirements :strips)
(:predicates (clear ?x) (on ?x ?y) (smaller ?x ?y))
(:action move
:parameters (?disc ?from ?to)
:precondition (and (smaller ?to ?disc) (on ?disc ?from)
(clear ?disc) (clear ?to))
:effect (and (clear ?from) (on ?disc ?to) (not (on ?disc ?from))
(not (clear ?to))))
)
问题
(define (problem hanoi5)
(:domain hanoi)
(:objects peg1 peg2 peg3 d1 d2 d3 d4 d5)
(:init
(smaller peg1 d1) (smaller peg1 d2) (smaller peg1 d3)
(smaller peg1 d4) (smaller peg1 d5)
(smaller peg2 d1) (smaller peg2 d2) (smaller peg2 d3)
(smaller peg2 d4) (smaller peg2 d5)
(smaller peg3 d1) (smaller peg3 d2) (smaller peg3 d3)
(smaller peg3 d4) (smaller peg3 d5)
(smaller d2 d1) (smaller d3 d1) (smaller d3 d2) (smaller d4 d1)
(smaller d4 d2) (smaller d4 d3) (smaller d5 d1) (smaller d5 d2)
(smaller d5 d3) (smaller d5 d4)
;(clear peg2) (clear peg3) (clear d1)
;(on d5 peg1) (on d4 d5) (on d3 d4) (on d2 d3) (on d1 d2))
(clear d2) (clear d4) (clear d1)
(on d2 peg1) (on d5 peg2) (on d4 d5) (on d3 peg3) (on d1 d3))
(:goal (and (on d5 d4) (on d4 d3) (on d3 d2) (on d2 d1)))
)
我在这里真的很茫然。谢谢!