1315.2 기본 타입과 사용자 정의 타입

1. 기본 타입

PDDL의 타입 시스템에서 기본 타입(primitive type)은 시스템이 암묵적으로 제공하는 최상위 타입이다. :typing 요구사항이 활성화된 도메인에서 모든 사용자 정의 타입의 루트(root)는 object 타입이다. 타입이 명시적으로 지정되지 않은 모든 변수와 객체는 object 타입으로 간주된다.

;; 타입 미지정 시 암묵적으로 object 타입
(:action generic_action
    :parameters (?x ?y)          ;; 모두 object 타입
    ...)

;; 명시적 object 타입 지정 (동일)
(:action generic_action
    :parameters (?x - object ?y - object)
    ...)

PDDL 2.1에서는 수치 함수의 반환 타입으로 number 타입이 추가로 사용된다. number는 실수 값을 나타내는 기본 타입이며, 객체 타입 계층과는 독립적이다:

(:functions
    (battery_level ?r - robot) - number
    (distance ?from - waypoint ?to - waypoint) - number
)

2. 사용자 정의 타입

사용자 정의 타입(user-defined type)은 도메인의 :types 절에서 도메인 설계자가 정의하는 타입이다. 기본 구문은 다음과 같다:

(:types
    <type-name>+ - <parent-type>
)

2.1 단순 타입 선언

상위 타입 없이 선언된 타입은 암묵적으로 object의 하위 타입이 된다:

(:types robot waypoint item)
;; 동치: (:types robot waypoint item - object)

2.2 계층적 타입 선언

(:types
    entity - object
    robot human obstacle - entity
    ground_robot aerial_robot - robot
    location - object
    waypoint station - location
)

이 선언은 다음의 타입 계층을 형성한다:

object
├── entity
│   ├── robot
│   │   ├── ground_robot
│   │   └── aerial_robot
│   ├── human
│   └── obstacle
└── location
    ├── waypoint
    └── station

2.3 동일 수준 복수 타입 선언

동일한 상위 타입을 공유하는 여러 타입을 한 줄에 선언할 수 있다:

(:types
    ;; ground_robot과 aerial_robot은 모두 robot의 하위 타입
    ground_robot aerial_robot underwater_robot - robot

    ;; package와 tool은 모두 item의 하위 타입
    package tool sensor_module - item
)

3. 타입의 의미론

타입 \tau에 속하는 객체의 집합을 \text{objects}(\tau)라 하면, 타입 계층에서의 하위 타입 관계 \preceq에 의해:

\tau_1 \preceq \tau_2 \Rightarrow \text{objects}(\tau_1) \subseteq \text{objects}(\tau_2)

즉, 하위 타입의 객체 집합은 상위 타입의 객체 집합의 부분 집합이다. ground_robot 타입의 모든 객체는 robot 타입에도 속하며, entity 타입과 object 타입에도 속한다.

이 성질에 의해, 상위 타입으로 선언된 매개변수에 하위 타입의 객체가 바인딩될 수 있다:

;; robot 타입 매개변수에 ground_robot, aerial_robot 모두 바인딩 가능
(:action communicate
    :parameters (?r - robot ?msg - message)
    ...)
;; ground_robot1, aerial_robot1 모두 ?r에 바인딩 가능

4. 문제 파일에서의 타입 사용

문제 파일의 :objects 절에서 각 객체에 타입을 할당한다:

(:objects
    robot1 robot2 - ground_robot
    drone1 - aerial_robot
    wp1 wp2 wp3 wp4 - waypoint
    charging_dock - station
    box1 box2 - package
    wrench - tool
)

5. 타입 선언의 제약 사항

  1. 순환 참조 금지: 타입 계층에서 순환이 발생하면 안 된다. A - BB - A를 동시에 선언할 수 없다.

  2. 중복 선언 금지: 동일한 타입을 서로 다른 상위 타입의 하위로 중복 선언하면 파서에 따라 오류가 발생하거나 예측 불가능한 동작을 초래할 수 있다.

  3. 타입 이름 제약: 타입 이름은 알파벳, 숫자, 하이픈, 밑줄로 구성되며 알파벳으로 시작해야 한다. PDDL 예약어와 동일한 이름을 사용할 수 없다.

6. 로봇 도메인에서의 타입 설계 지침

  1. 도메인의 개념적 범주를 타입으로 매핑하라. 로봇, 위치, 물체, 도구 등 도메인에서 자연스럽게 구분되는 범주가 타입이 된다.

  2. 타입 계층의 깊이를 3–4 수준으로 제한하라. 과도하게 깊은 계층은 도메인의 복잡성을 증가시키고 가독성을 저하시킨다.

  3. 액션에서 실제로 구분이 필요한 수준으로만 타입을 세분화하라. 모든 액션에서 동일하게 취급되는 객체를 불필요하게 세분화하지 않는다.

  4. 향후 확장을 고려하여 중간 타입 계층을 설계하라. 초기에 단일 타입으로 충분하더라도, 향후 하위 타입 추가가 예상되면 중간 계층을 미리 설계하는 것이 바람직하다.

7. 참고 문헌

  • McDermott, D., Ghallab, M., Howe, A., Knoblock, C., Ram, A., Veloso, M., Weld, D., & Wilkins, D. (1998). “PDDL—The Planning Domain Definition Language.” Technical Report CVC TR-98-003, Yale Center for Computational Vision and Control.
  • Fox, M. & Long, D. (2003). “PDDL2.1: An Extension to PDDL for Expressing Temporal Planning Domains.” Journal of Artificial Intelligence Research, 20, 61–124.
  • Haslum, P., Lipovetzky, N., Magazzeni, D., & Muise, C. (2019). An Introduction to the Planning Domain Definition Language. Morgan & Claypool Publishers.