1315.29 파생 술어의 선언 구문

1. 기본 구문

파생 술어는 PDDL 도메인 파일에서 :derived 키워드를 사용하여 선언한다:

(:derived (<predicate-name> <typed-variable-list>)
    <logical-formula>
)

여기서:

  • <predicate-name>: 파생 술어의 이름
  • <typed-variable-list>: 타입이 지정된 매개변수 목록
  • <logical-formula>: 파생 조건을 정의하는 논리식

2. 선언 예시

2.1 단순 접합 조건

(:derived (robot_ready ?r - robot)
    (and
        (robot_active ?r)
        (not (robot_in_error ?r))
        (battery_sufficient ?r)
        (sensor_calibrated ?r)
    )
)

2.2 존재 양화 조건

(:derived (help_available ?r - robot)
    (exists (?helper - robot)
        (and
            (not (= ?helper ?r))
            (robot_available ?helper)
            (in_comm_range ?r ?helper)
        )
    )
)

2.3 전칭 양화 조건

(:derived (all_tasks_complete ?mission - mission)
    (forall (?t - task)
        (imply (task_of ?t ?mission)
            (task_completed ?t)
        )
    )
)

2.4 재귀적 정의

동일한 파생 술어에 대해 여러 규칙을 정의하여 선언적(disjunctive) 의미를 부여한다:

;; 기저 조건: 직접 연결
(:derived (reachable ?from - waypoint ?to - waypoint)
    (connected ?from ?to)
)

;; 재귀 조건: 간접 연결
(:derived (reachable ?from - waypoint ?to - waypoint)
    (exists (?mid - waypoint)
        (and
            (connected ?from ?mid)
            (reachable ?mid ?to)
        )
    )
)

동일 파생 술어에 대한 여러 규칙은 논리적 선언(OR)으로 해석된다. 즉, 어느 하나의 규칙이라도 참이면 파생 술어가 참이다.

3. 구문적 제약 사항

  1. 파생 술어는 :predicates에도 선언해야 한다. 파생 술어의 시그니처(이름과 매개변수 타입)는 :predicates 절에 선언되어야 하며, :derived 규칙은 그 술어의 값을 결정하는 방법을 정의한다.
(:predicates
    (reachable ?from - waypoint ?to - waypoint)  ;; 시그니처 선언
)

(:derived (reachable ?from - waypoint ?to - waypoint)  ;; 규칙 정의
    (connected ?from ?to)
)
  1. 파생 술어는 액션 효과에 나타날 수 없다. 파생 술어의 값은 규칙에 의해 자동으로 결정되므로, (:action ... :effect (derived_pred ...)) 형태는 허용되지 않는다.

  2. 초기 상태에서 파생 술어를 설정할 필요가 없다. 파생 술어의 초기 값은 초기 상태의 기반 술어로부터 자동으로 추론된다.

  3. 논리식에 사용 가능한 구성: and, or, not, forall, exists, imply, 원자 술어, 다른 파생 술어의 참조가 허용된다.

4. 파생 술어의 배치 위치

도메인 파일 내에서 :derived 규칙은 일반적으로 :predicates 선언과 :action 정의 사이에 배치한다:

(define (domain example)
    (:requirements :strips :typing :derived-predicates)
    (:types ...)
    (:predicates ...)    ;; 일반 술어 + 파생 술어 시그니처
    (:functions ...)

    ;; 파생 술어 규칙 정의
    (:derived ...)
    (:derived ...)

    ;; 액션 정의
    (:action ...)
    (:action ...)
)

5. 플래너 지원 현황

플래너파생 술어 지원비고
Fast Downward지원전처리에서 공리(axiom)로 변환
FF미지원
LAMA지원Fast Downward 기반
POPF제한적

Fast Downward 계열 플래너는 파생 술어를 공리(axiom)라는 내부 표현으로 변환하여 효율적으로 처리한다(Helmert, 2009).

6. 참고 문헌

  • Thiébaux, S., Hoffmann, J., & Nebel, B. (2005). “In Defense of PDDL Axioms.” Artificial Intelligence, 168(1–2), 38–69.
  • Helmert, M. (2009). “Concise Finite-Domain Representations for PDDL Planning Tasks.” Artificial Intelligence, 173(5–6), 503–535.
  • Haslum, P., Lipovetzky, N., Magazzeni, D., & Muise, C. (2019). An Introduction to the Planning Domain Definition Language. Morgan & Claypool Publishers.