PDDL-인공지능 분야 기획 언어 학습 노트-1

5321 단어 학습 노트pddl
전체 PDDL 프로그램 코드는 domain 파일과 problem 파일로 구성됩니다.이 두 가지를 상세히 소개하기 전에 PDDL 코드에서 흔히 볼 수 있는 데이터 구성원을 살펴보자(본 글에서 언급한 데이터 구성원은 가장 기초적인 문제를 해결하기 위한 간단한 요구 사항일 뿐 다른 것은 깊이 있게 공부한 후에야 알 수 있다)
  • objects: 기획 과정에서 관련된 대상
  • init: 초기 상태
  • goal: 목표, 즉 우리가 도달하고자 하는 목표 아래 각 대상의 상태
  • predicates:objects의 속성에 대한 설명은 True 또는False
  • 로 할 수 있습니다.
  • action:objects의 조작에 대해 action은 세 가지 설명을 포함해야 한다. 하나는 관련된 대상이고, 하나는 action을 진행하기 전에 관련된 대상의 상태, 그리고 action 이후의 대상의 상태
  • 그 중에서 init,goal,objects는 문제 파일의 구성 부분이고 기타는domain 파일의 구성이다.
    다음은 우리가 하나의 예를 통해 설명한다
    만약에 두 개의 방이 있는데 로마와 로마가 있다. 두 개의 공이 있는데 ball1과 ball2가 모두 로마에 있다. 우리는 로봇 로비가 있다. 로마에서 로비는 두 팔의 left와 right가 있다. 지금 우리는 로비에게 두 개의 공을 로마에서 로마로 옮기도록 해야 한다.

    domain


    domain의 정의
    (define (domain )
        (:predicates )
        (:action 
         :parameters 
         :precondition 
         :effect 
        )
    )
    

    우리는 예시 중의 문제에 대해domain objects라고 쓰는 것이 뚜렷하다. 구체적으로 우리가 문제를 쓸 때 우리가 지금 알아야 할 Objects의 속성은 다음과 같다. - 룸인지 아닌지를 판단한다. - 공인지 아닌지를 판단한다. - 공이 어느 방에 있는지 판단한다. - 로봇이 어느 방에 있는지 판단한다. - 로봇의 팔인지 판단한다. - 로봇의 팔이 한가한지 판단한다. - 로봇의 어느 팔이 어느 공을 들고 있는지 판단한다.
    이에 대응하여 먼저 domain의 첫 번째 단계를 완료합니다.
    (define (domain gripper-strips)
        (:predicates (room ?r)
                     (ball ?b)
                     (at ?b ?r)
                     (at-robby ?r)
                     (gripper ?g)
                     (free ?g)
                     (carry ?b ?g))
    )
    

    다음에 우리가 분석할 때 필요한 동작의 첫 번째 동작은pick동작, 즉 들어올리는 동작이다. 이 동작과 관련된 Objects는 공, 팔, 방이다.들고 있는 전제는 공과 로봇이 같은 방에 있고 로봇의 한 팔이 비어 있다는 것이다.이제 두 번째 할게요.
    (define (domain gripper-strips)
        (:predicates (room ?r)
                    (ball ?b)
                    (at ?b ?r)
                    (at-robby ?r)
                    (gripper ?g)
                    (free ?g)
                    (carry ?b ?g))
        (:action pick
            :parameters(?obj ?room ?gripper)
            :precondition (and (ball ?obj) (room ?room) (gripper ?gripper)
                        (free ?gripper) (at ?obj ?room) (at-robby ?room))
            :effect (and (not (free ?gripper)) (carray ?obj ?gripper) (not (at ?obj ?room)))
            )
    )
    

    두 번째 동작은 이동 동작이다. 로봇이 한 방에서 다른 방으로 이동하는 세 번째 동작은 내려놓는 것이다. 로봇이 어느 방에 도착하면 손 안의 공을 놓는다.
    (define (domain gripper-strips)
        (:predicates (room ?r)
                    (ball ?b)
                    (at ?b ?r)
                    (at-robby ?r)
                    (gripper ?g)
                    (free ?g)
                    (carry ?b ?g))
        (:action pick
            :parameters(?obj ?room ?gripper)
            :precondition 
                (and 
                    (ball ?obj) 
                    (room ?room) 
                    (gripper ?gripper)
                    (free ?gripper) 
                    (at ?obj ?room) 
                    (at-robby ?room)
                )
            :effect 
                (and 
                    (not 
                        (free ?gripper)
                    ) 
                    (carry ?obj ?gripper) 
                    (not (at ?obj ?room))
                )
            )
        (:action move
            :parameters (?from ?to)
            :precondition 
                (and 
                    (room ?from) 
                    (room ?to) 
                    (at-robby ?from)
                )
            :effect 
                (and 
                    (at-robby ?to)
                    (not 
                        (at-robby ?from)
                    )
                )
        )
        (:action drop
            :parameters (?room ?ball ?gripper)
            :precondition
                (and 
                    (room ?room) 
                    (ball ?ball) 
                    (at-robby ?room) 
                    (gripper ?gripper)
                    (not 
                        (free ?gripper)
                    ) 
                    (carry ?ball ?gripper)
                    (at-robby ?room))
            :effect 
                (and 
                    (free ?gripper) 
                    (at ?ball ?room) 
                    (not
                        (carry ?ball ?gripper)
                    )
                )
            )
    )
    

    Problem


    Problem의 구성원 포함objects,init,goal의 형식은 이렇다.
    (define (problem )
        (:domain )
        (:objects )
        (:init )
        (:goal )
    )
    

    이 문제에서 문제 코드는 이렇게 씁니다
    (define (problem solve)
        (:domain gripper-strips)
        (:objects 
            rooma roomb ball1 ball2 left right
        )
        (:init 
            (room rooma)
            (room roomb) 
            (ball ball1) 
            (ball ball2)
            (gripper left) 
            (gripper right) 
            (free left) 
            (free right)
            (at ball1 rooma) 
            (at ball2 rooma) 
            (at-robby rooma)
        )
        (:goal 
            (and
                (at ball1 roomb)
                 (at ball2 roomb)
            )
        )
    )
    

    상기 예에서 설명한 바와 같이 init일 때 변수 앞에는 ?를 추가할 필요가 없고 나중에 컴파일러가 오류를 보고할 수 있다. 이때의 init상태는 Objects가True를 위한 모든 속성을 제시하고goal은 and를 사용해야 한다. 이런 상태는 반드시 동시에 만족해야 하며 그렇지 않으면 오류를 보고해야 한다.

    좋은 웹페이지 즐겨찾기