1314.35 increase, decrease, assign 연산의 활용
1. 수치 갱신 연산의 개요
PDDL 2.1에서 수치 플루언트의 값을 변경하는 세 가지 핵심 연산은 increase, decrease, assign이다. 이 연산들은 액션의 효과에서 사용되며, 로봇 도메인에서 에너지 소모, 자원 관리, 비용 추적 등 정량적 상태 변화를 모델링하는 데 필수적이다.
2. increase 연산
increase 연산은 수치 플루언트의 현재 값에 지정된 양을 더한다:
f' = f + \Delta
구문: (increase <fluent> <expression>)
;; 이동 거리 누적
(increase (total_distance ?r) (distance ?from ?to))
;; 수집 아이템 수 증가
(increase (items_collected ?r) 1)
;; 총 비용 증가 (복합 표현식)
(increase (total_cost) (* (distance ?from ?to) (cost_per_unit)))
;; 적재량 증가
(increase (current_load ?r) (weight ?obj))
로봇 도메인에서의 주요 활용 사례:
- 이동 거리, 작업 시간, 에너지 소모 등의 누적 메트릭 추적
- 적재량, 수집 데이터량 등의 자원 축적
- 계획 비용 함수의 증분적 계산
3. decrease 연산
decrease 연산은 수치 플루언트의 현재 값에서 지정된 양을 뺀다:
f' = f - \Delta
구문: (decrease <fluent> <expression>)
;; 배터리 소모
(decrease (battery_level ?r) (energy_cost ?from ?to))
;; 연료 감소
(decrease (fuel_level ?v) (* (distance ?from ?to) (fuel_rate ?v)))
;; 잔여 용량 감소
(decrease (remaining_capacity ?container) (volume ?obj))
;; 남은 시간 감소
(decrease (time_remaining ?mission) (action_duration))
decrease 사용 시 결과 값이 음수가 될 수 있으므로, 전제 조건에서 충분한 잔량을 확인해야 한다:
:precondition (>= (battery_level ?r) (energy_cost ?from ?to))
:effect (decrease (battery_level ?r) (energy_cost ?from ?to))
4. assign 연산
assign 연산은 수치 플루언트의 값을 완전히 새로운 값으로 대체한다:
f' = v
구문: (assign <fluent> <expression>)
;; 배터리 완전 충전
(assign (battery_level ?r) (max_battery ?r))
;; 상태 코드 초기화
(assign (error_count ?r) 0)
;; 현재 속도 설정
(assign (current_speed ?r) (max_speed ?r))
;; 위치 좌표 갱신
(assign (position_x ?r) (waypoint_x ?to))
assign은 이전 값에 무관하게 새로운 값을 설정하므로, 초기화, 리셋, 절대 값 설정 등의 시나리오에 적합하다.
5. 세 연산의 비교
| 특성 | increase | decrease | assign |
|---|---|---|---|
| 연산 | f + \Delta | f - \Delta | v |
| 이전 값 참조 | 예 (현재 값에 가산) | 예 (현재 값에서 감산) | 아니오 (완전 대체) |
| 주요 용도 | 누적, 축적 | 소모, 감소 | 초기화, 리셋, 절대 설정 |
| 교환 법칙 | 해당 없음 | 해당 없음 | 해당 없음 |
| 역연산 | decrease | increase | 없음 (이전 값 복원 불가) |
6. 복합 표현식의 활용
세 연산 모두 변경량으로 산술 표현식을 사용할 수 있다:
;; 상수
(increase (total_cost) 10)
;; 수치 플루언트 참조
(decrease (battery_level ?r) (energy_cost ?from ?to))
;; 산술 연산
(decrease (fuel_level ?v) (* (distance ?from ?to) (consumption_rate ?v)))
;; 중첩 산술
(increase (score) (+ (* (distance ?from ?to) 2) (bonus_factor ?region)))
;; 다른 플루언트 간의 연산
(assign (efficiency ?r) (/ (work_done ?r) (energy_consumed ?r)))
7. 듀레이티브 액션에서의 수치 연산
듀레이티브 액션에서 수치 연산은 시간 주석과 결합된다:
(:durative-action move
:parameters (?r - robot ?from - waypoint ?to - waypoint)
:duration (= ?duration (/ (distance ?from ?to) (speed ?r)))
:condition (and
(at start (robot_at ?r ?from))
(at start (>= (battery_level ?r) (* ?duration (discharge_rate ?r))))
)
:effect (and
(at start (not (robot_at ?r ?from)))
(at end (robot_at ?r ?to))
(at end (decrease (battery_level ?r) (* ?duration (discharge_rate ?r))))
(at end (increase (total_distance ?r) (distance ?from ?to)))
)
)
8. 로봇 도메인 종합 예시
(:functions
(battery_level ?r - robot)
(max_battery ?r - robot)
(current_load ?r - robot)
(max_load ?r - robot)
(weight ?obj - object)
(distance ?from - waypoint ?to - waypoint)
(total_cost)
)
(:action charge_battery
:parameters (?r - robot ?station - charging_station)
:precondition (and
(robot_at ?r ?station)
(< (battery_level ?r) (max_battery ?r))
)
:effect (assign (battery_level ?r) (max_battery ?r))
)
(:action pick_up_item
: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))
)
)
(:action drop_item
:parameters (?r - robot ?obj - object ?loc - waypoint)
:precondition (and (robot_at ?r ?loc) (holding ?r ?obj))
:effect (and
(not (holding ?r ?obj))
(object_at ?obj ?loc)
(decrease (current_load ?r) (weight ?obj))
)
)
9. 참고 문헌
- 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.