PDDL - 원숭이와 바나나 문제

codeblue·2023년 10월 18일

PDDL

목록 보기
1/1

PDDL을 이용하여 원숭이와 바나나 문제를 해결해 보았다.

다음과 같이 원숭이, 바나나, 상자가 있고 바나나가 천장에 매달려 있다고 가정할 때, 원숭이는 어떻게 해야 바나나를 얻을 수 있는가?

전체 code

domain.pddl

(define (domain monkey)	
(:requirements :strips :typing)

(:types
monkey box banana - object
location)

(:predicates
(at ?obj - object ?location - location)
(on ?x - object ?y - object)
(getbananas) ;; bananas get!
)

(:action move
:parameters (?m - monkey ?from - location ?to - location)
:precondition (and (at ?m ?from))
:effect (and (at ?m ?to) (not (at ?m ?from)))
)

(:action push
:parameters (?m - monkey ?box - box ?banana - banana ?from - location ?to - location)
:precondition (and (at ?m ?from) (at ?box ?from) (at ?banana ?to))
:effect (and (at ?m ?to) (not (at ?m ?from))
(at ?box ?to)(not (at ?box ?from)))
)

(:action jump
:parameters (?m - monkey ?box - box ?banana - banana ?p - location)
:precondition (and (at ?m ?p)(at ?box ?p)(at ?banana ?p))
:effect (and (on ?m ?box))
)

(:action get
:parameters (?m - monkey ?box - box ?banana - banana ?p - location)
:precondition (and (on ?m ?box) (at ?banana ?p) (at ?box ?p))
:effect (getbananas))
)

problem.pddl

(define (problem pb)
    	(:domain monkey)
  	(:objects p1 p2 p3 - location
  	monkey1 - monkey
  	banana1 - banana
  	box1 - box)
  	
  	(:init 
  	(at monkey1 p1)
  	(at banana1 p2)
  	(at box1 p3)
	)
	
  	(:goal (and (getbananas)))
)

각 action 설명

action move

precondition(전제 조건) : 원숭이가 from에 있음
effect(효과) : 원숭이가 to에 있음

(:action move
:parameters (?m - monkey ?from - location ?to - location)
:precondition (and (at ?m ?from))
:effect (and (at ?m ?to) (not (at ?m ?from)))
)

초기 위치에서 이동

action push

precondition(전제 조건) : 원숭이가 from에 있음, 박스가 from에 있음, 바나나가 to에 있음
effect(효과) : 원숭이가 to에 있음, 박스가 to에 있음

(:action push
:parameters (?m - monkey ?box - box ?banana - banana ?from - location ?to - location)
:precondition (and (at ?m ?from) (at ?box ?from) (at ?banana ?to))
:effect (and (at ?m ?to) (not (at ?m ?from))
(at ?box ?to)(not (at ?box ?from)))
)

박스를 바나나가 있는 지점으로 push

action jump

precondition(전제 조건) : 원숭이가 p에 있음, 박스가 p에 있음, 바나나가 p에 있음
effect(효과) : 원숭이가 박스 위에 있음

(:action jump
:parameters (?m - monkey ?box - box ?banana - banana ?p - location)
:precondition (and (at ?m ?p)(at ?box ?p)(at ?banana ?p))
:effect (and (on ?m ?box))
)

박스 위로 jump

action get

precondition(전제 조건) : 원숭이가 박스 위에 있음, 바나나가 p에 있음
effect(효과) : 바나나 획득!

(:action get
:parameters (?m - monkey ?box - box ?banana - banana ?p - location)
:precondition (and (on ?m ?box) (at ?banana ?p) (at ?box ?p))
:effect (getbananas))
)


아직은 어려운 pddl의 세계 ...

0개의 댓글