1315.15 decrease 연산자의 활용과 구문
1. decrease 연산자의 정의
decrease 연산자는 수치 함수의 현재 값에서 지정된 양을 빼는 갱신 연산이다. 형식적으로:
s'[f] = s[f] - v
여기서 s[f]는 현재 값, v는 감소량, s'[f]는 갱신 후 값이다.
2. 구문
(decrease <function-instance> <numeric-expression>)
3. 기본 활용 패턴
3.1 상수 감소
(decrease (battery_level ?r) 10)
(decrease (remaining_attempts) 1)
3.2 함수 값에 의한 감소
(decrease (battery_level ?r) (energy_cost ?from ?to))
(decrease (current_load ?r) (weight ?obj))
(decrease (remaining_capacity ?container) (volume ?item))
3.3 산술 표현식에 의한 감소
(decrease (battery_level ?r) (* (distance ?from ?to) (energy_per_meter ?r)))
(decrease (fuel_level ?v) (* ?duration (fuel_consumption_rate ?v)))
4. 로봇 도메인에서의 주요 활용
4.1 에너지 소모 모델링
(:action move
:parameters (?r - robot ?from - waypoint ?to - waypoint)
:precondition (and
(robot_at ?r ?from)
(connected ?from ?to)
(>= (battery_level ?r) (* (distance ?from ?to) (energy_per_meter ?r)))
)
:effect (and
(not (robot_at ?r ?from))
(robot_at ?r ?to)
(decrease (battery_level ?r) (* (distance ?from ?to) (energy_per_meter ?r)))
)
)
4.2 자원 소모 모델링
(:action use_consumable
:parameters (?r - robot ?item - consumable)
:precondition (and
(carrying ?r ?item)
(> (quantity ?item) 0)
)
:effect (and
(item_used ?item)
(decrease (quantity ?item) 1)
)
)
4.3 적재량 해제
(:action unload
:parameters (?r - robot ?cargo - object ?loc - waypoint)
:precondition (and (robot_at ?r ?loc) (holding ?r ?cargo))
:effect (and
(not (holding ?r ?cargo))
(object_at ?cargo ?loc)
(decrease (current_load ?r) (weight ?cargo))
)
)
4.4 듀레이티브 액션에서의 시간 비례 감소
(:durative-action move
:parameters (?r - robot ?from ?to - waypoint)
:duration (= ?duration (/ (distance ?from ?to) (speed ?r)))
:effect (and
(at end (decrease (battery_level ?r) (* ?duration (discharge_rate ?r))))
)
)
5. 음수 방지를 위한 전제 조건 보호
decrease 연산의 결과가 음수가 되면 비현실적 상태가 발생한다. 이를 방지하기 위해 전제 조건에서 충분한 잔량을 확인해야 한다:
;; 안전한 패턴: 감소 전 충분성 확인
:precondition (>= (battery_level ?r) (energy_cost ?from ?to))
:effect (decrease (battery_level ?r) (energy_cost ?from ?to))
;; 위험한 패턴: 충분성 미확인
:precondition (robot_at ?r ?from)
:effect (decrease (battery_level ?r) (energy_cost ?from ?to))
;; → 배터리가 부족해도 감소 적용, 음수 발생 가능
6. increase와의 대칭적 사용
increase와 decrease는 자원의 축적과 소모를 대칭적으로 모델링한다:
;; 적재: increase
(:action load :effect (increase (current_load ?r) (weight ?cargo)))
;; 하역: decrease
(:action unload :effect (decrease (current_load ?r) (weight ?cargo)))
;; 충전: increase (또는 assign)
(:action charge :effect (increase (battery_level ?r) (charge_amount)))
;; 소모: decrease
(:action move :effect (decrease (battery_level ?r) (energy_cost ?from ?to)))
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.