1315.11 함수의 매개변수와 타입 제약
1. 함수 매개변수의 역할
PDDL 함수의 매개변수는 수치 플루언트가 적용되는 객체를 식별하는 역할을 한다. 각 매개변수에 타입을 지정하면, 해당 함수의 유효한 인스턴스가 타입 호환 객체 조합으로 제한된다.
(:functions
(battery_level ?r - robot)
;; ?r은 robot 타입 → battery_level은 로봇 객체에 대해서만 정의됨
;; (battery_level robot1) ✓
;; (battery_level wp1) ✗ (waypoint는 robot이 아님)
)
2. 매개변수 타입 제약의 효과
2.1 인스턴스 수 제한
타입 제약은 함수 인스턴스의 수를 제한한다. 도메인에 로봇 3대, 웨이포인트 20개, 물체 10개가 있을 때:
;; 타입 없이: (distance ?x ?y)
;; 인스턴스 수: 33 × 33 = 1,089
;; 타입 사용: (distance ?from - waypoint ?to - waypoint)
;; 인스턴스 수: 20 × 20 = 400
2.2 초기화 범위의 명확화
타입 제약은 문제 파일에서 초기화해야 하는 함수 인스턴스의 범위를 명확히 한다:
;; 거리 함수: waypoint × waypoint 조합만 초기화
(:init
(= (distance wp1 wp2) 10)
(= (distance wp2 wp3) 15)
;; (= (distance robot1 wp1) 5) ;; 타입 불일치로 무의미
)
2.3 액션에서의 참조 정합성
액션 내에서 함수를 참조할 때, 전달되는 변수의 타입이 함수 선언의 매개변수 타입과 호환되어야 한다:
(:functions (energy_cost ?from - waypoint ?to - waypoint))
(:action move
:parameters (?r - robot ?from - waypoint ?to - waypoint)
:precondition (>= (battery_level ?r) (energy_cost ?from ?to))
;; ?from: waypoint ✓, ?to: waypoint ✓ → 타입 정합
:effect (decrease (battery_level ?r) (energy_cost ?from ?to))
)
3. 타입 계층과 함수 매개변수
함수 매개변수의 타입이 상위 타입으로 선언되면, 모든 하위 타입의 객체에 대해 함수가 정의된다:
(:types
location - object
waypoint station - location
)
(:functions
(distance ?from - location ?to - location)
;; waypoint와 station 모두에 대해 인스턴스화 가능
;; (distance wp1 wp2) ✓
;; (distance wp1 station1) ✓
;; (distance station1 station2) ✓
)
이는 이질적인 위치 유형 간의 거리도 모델링해야 하는 경우에 유용하다.
4. 다항 함수의 매개변수 설계
다항 함수에서 각 매개변수의 타입 조합이 함수의 의미론적 범위를 결정한다:
;; 2항 함수: 두 동일 타입 매개변수
(:functions (distance ?from ?to - waypoint))
;; waypoint × waypoint 조합
;; 2항 함수: 두 다른 타입 매개변수
(:functions (lift_capacity ?r - robot ?g - gripper))
;; robot × gripper 조합
;; 3항 함수: 세 매개변수
(:functions (transport_cost ?from - waypoint ?to - waypoint ?cargo_type - cargo))
;; waypoint × waypoint × cargo 조합 → 인스턴스 수 급증 주의
3항 이상의 함수는 인스턴스 수가 급격히 증가하므로, 가능하면 2항 이하로 설계하는 것이 권장��다.
5. either 타입의 함수 매개변수
함수 매개변수에도 either 타입을 사용할 수 있다:
(:functions
(processing_time ?item - (either package fragile_item))
)
이 선언은 package와 fragile_item 타입의 객체에 대해 처리 시간을 정의한다.
6. 설계 지침
-
함수 매개변수의 수를 최소화하라. 매개변수가 증가하면 초기화해야 하는 인스턴스 수가 기하급수적으로 증가한다.
-
가능한 한 구체적인 타입을 사용하라. 넓은 타입은 불필요한 인스턴스를 생성한다.
-
함수 매개변수의 순서를 술어와 일관되게 유지하라. 동일 도메인에서 위치 쌍을 사용하는 술어와 함수는 동일한 매개변수 순서를 따라야 한다.
-
비대칭 함수에 주의하라.
distance가 비대칭인 경우(예: 경사 지형) 양방향 모두 초기화해야 한다. 대칭인 경우에도 PDDL은 자동 대칭화를 지원하지 않으므로 양방향 초기화가 필���하다.
7. 참고 문헌
- 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.