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))
)

이 선언은 packagefragile_item 타입의 객체에 대해 처리 시간을 정의한다.

6. 설계 지침

  1. 함수 매개변수의 수를 최소화하라. 매개변수가 증가하면 초기화해야 하는 인스턴스 수가 기하급수적으로 증가한다.

  2. 가능한 한 구체적인 타입을 사용하라. 넓은 타입은 불필요한 인스턴스를 생성한다.

  3. 함수 매개변수의 순서를 술어와 일관되게 유지하라. 동일 도메인에서 위치 쌍을 사용하는 술어와 함수는 동일한 매개변수 순서를 따라야 한다.

  4. 비대칭 함수에 주의하라. 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.