1314.34 수치 플루언트와 함수 기반 효과

1314.34 수치 플루언트와 함수 기반 효과

1. 수치 플루언트의 정의

수치 플루언트(numeric fluent)는 PDDL 2.1에서 도입된 기능으로, 상태 변수에 실수 값을 부여할 수 있게 한다(Fox & Long, 2003). 고전적 PDDL의 술어가 참/거짓의 이진 값만 가지는 것과 달리, 수치 플루언트는 연속적인 수치 값을 표현한다. :numeric-fluents 또는 :fluents 요구사항의 활성화가 필요하다.

수치 플루언트는 :functions 절에서 선언된다:

(:requirements :strips :typing :numeric-fluents)

(:functions
    (battery_level ?r - robot)
    (distance ?from - waypoint ?to - waypoint)
    (speed ?r - robot)
    (fuel_capacity ?v - vehicle)
    (total_cost)
)

각 함수 선언은 매개변수화된 수치 변수를 정의한다. (battery_level ?r - robot)는 각 로봇에 대해 배터리 잔량을 나타내는 수치 값을 관리한다.

2. 초기 값의 설정

문제 파일의 :init 절에서 수치 플루언트의 초기 값을 설정한다:

(:init
    (= (battery_level robot1) 100)
    (= (speed robot1) 2.0)
    (= (distance wp1 wp2) 10)
    (= (distance wp2 wp3) 15)
    (= (total_cost) 0)
)

(= (function-name args) value) 형식으로 초기 값을 명시한다. 초기화되지 않은 수치 플루언트의 값은 정의되지 않은 것으로 간주된다.

3. 함수 기반 효과의 유형

수치 플루언트를 변경하는 효과는 다음의 다섯 가지 유형으로 분류된다:

3.1 assign (할당)

수치 플루언트에 새로운 값을 직접 할당한다:

(assign (battery_level ?r) 100)
(assign (status_code ?r) 0)

3.2 increase (증가)

수치 플루언트의 값을 지정된 양만큼 증가시킨다:

(increase (total_distance ?r) (distance ?from ?to))
(increase (items_collected ?r) 1)

3.3 decrease (감소)

수치 플루언트의 값을 지정된 양만큼 감소시킨다:

(decrease (battery_level ?r) (energy_cost ?from ?to))
(decrease (fuel_level ?v) 5)

3.4 scale-up (스케일 업)

수치 플루언트의 값을 지정된 배수로 증가시킨다:

(scale-up (processing_speed ?r) 2)

3.5 scale-down (스케일 다운)

수치 플루언트의 값을 지정된 배수로 감소시킨다:

(scale-down (power_output ?r) 0.5)

4. 수치 효과의 구문

수치 효과는 :effect 절 내에서 다른 효과와 접합적으로 결합된다:

(:action move
    :parameters (?r - robot ?from - waypoint ?to - waypoint)
    :precondition (and
        (robot_at ?r ?from)
        (connected ?from ?to)
        (>= (battery_level ?r) (energy_cost ?from ?to))
    )
    :effect (and
        (not (robot_at ?r ?from))
        (robot_at ?r ?to)
        (decrease (battery_level ?r) (energy_cost ?from ?to))
        (increase (total_distance ?r) (distance ?from ?to))
        (increase (total_cost) (distance ?from ?to))
    )
)

5. 수치 표현식

수치 효과의 변경량은 산술 표현식으로 정의할 수 있다:

;; 상수 값
(decrease (battery_level ?r) 10)

;; 다른 수치 플루언트 참조
(decrease (battery_level ?r) (energy_cost ?from ?to))

;; 산술 연산
(decrease (battery_level ?r) (* (distance ?from ?to) (consumption_rate ?r)))

;; 복합 표현식
(increase (total_cost) (+ (distance ?from ?to) (* (weight ?cargo) 0.1)))

6. 로봇 도메인에서의 수치 플루언트 활용

6.1 에너지 관리

(:functions
    (battery_level ?r - robot)
    (energy_cost ?from - waypoint ?to - waypoint)
    (charge_rate ?station - charging_station)
)

(:action charge
    :parameters (?r - robot ?station - charging_station)
    :precondition (and (robot_at ?r ?station) (< (battery_level ?r) 100))
    :effect (assign (battery_level ?r) 100)
)

6.2 적재 용량 관리

(:functions
    (current_load ?r - robot)
    (max_load ?r - robot)
    (weight ?obj - object)
)

(:action load_cargo
    :parameters (?r - robot ?obj - object ?loc - waypoint)
    :precondition (and
        (robot_at ?r ?loc)
        (object_at ?obj ?loc)
        (<= (+ (current_load ?r) (weight ?obj)) (max_load ?r))
    )
    :effect (and
        (holding ?r ?obj)
        (not (object_at ?obj ?loc))
        (increase (current_load ?r) (weight ?obj))
    )
)

6.3 시간 추적

(:functions (total_time))

(:action move
    :parameters (?r - robot ?from - waypoint ?to - waypoint)
    :effect (and
        (not (robot_at ?r ?from))
        (robot_at ?r ?to)
        (increase (total_time) (/ (distance ?from ?to) (speed ?r)))
    )
)

7. 설계 지침

  1. 수치 플루언트는 정량적 제약이 중요한 경우에만 사용하라. 이진 술어로 충분한 경우 불필요한 복잡성을 추가하지 말아야 한다.

  2. 수치 플루언트의 초기화를 빠짐없이 수행하라. 초기화되지 않은 수치 플루언트를 참조하면 정의되지 않은 동작이 발생한다.

  3. 수치 플루언트의 유효 범위를 전제 조건으로 보호하라. 배터리 잔량이 음수가 되지 않도록 (>= (battery_level ?r) (cost)) 조건을 설정해야 한다.

  4. 플래너의 수치 플루언트 지원 범위를 확인하라. 모든 플래너가 수치 플루언트를 지원하는 것은 아니며, 지원하더라도 비선형 표현식에 제한이 있을 수 있다.

8. 참고 문헌

  • Fox, M. & Long, D. (2003). “PDDL2.1: An Extension to PDDL for Expressing Temporal Planning Domains.” Journal of Artificial Intelligence Research, 20, 61–124.
  • Hoffmann, J. (2003). “The Metric-FF Planning System: Translating ‘Ignoring Delete Lists’ to Numeric State Variables.” Journal of Artificial Intelligence Research, 20, 291–341.
  • Haslum, P., Lipovetzky, N., Magazzeni, D., & Muise, C. (2019). An Introduction to the Planning Domain Definition Language. Morgan & Claypool Publishers.