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. 타입 선언의 제약 사항
-
순환 참조 금지: 타입 계층에서 순환이 발생하면 안 된다.
A - B와B - A를 동시에 선언할 수 없다. -
중복 선언 금지: 동일한 타입을 서로 다른 상위 타입의 하위로 중복 선언하면 파서에 따라 오류가 발생하거나 예측 불가능한 동작을 초래할 수 있다.
-
타입 이름 제약: 타입 이름은 알파벳, 숫자, 하이픈, 밑줄로 구성되며 알파벳으로 시작해야 한다. PDDL 예약어와 동일한 이름을 사용할 수 없다.
6. 로봇 도메인에서의 타입 설계 지침
-
도메인의 개념적 범주를 타입으로 매핑하라. 로봇, 위치, 물체, 도구 등 도메인에서 자연스럽게 구분되는 범주가 타입이 된다.
-
타입 계층의 깊이를 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.