1315.17 scale-up과 scale-down 연산자
1. scale-up 연산자
scale-up 연산자는 수치 함수의 현재 값에 지정된 배수를 곱하는 갱신 연산이다:
s'[f] = s[f] \times v
구문: (scale-up <function-instance> <numeric-expression>)
;; 처리 속도를 2배로 증가
(scale-up (processing_speed ?r) 2)
;; 센서 감도를 1.5배로 향상
(scale-up (sensor_range ?s) 1.5)
;; 출력을 150%로 증가
(scale-up (power_output ?r) 1.5)
2. scale-down 연산자
scale-down 연산자는 수치 함수의 현재 값을 지정된 값으로 나누는 갱신 연산이다:
s'[f] = s[f] / v
구문: (scale-down <function-instance> <numeric-expression>)
;; 속도를 절반으로 감소
(scale-down (speed ?r) 2)
;; 전력을 3분의 1로 감소
(scale-down (power_output ?r) 3)
;; 센서 범위를 75%로 축소 (4/3으로 나눔 = 0.75 곱함과 동치)
(scale-down (sensor_range ?s) (/ 4 3))
3. increase/decrease와의 비교
| 특성 | increase/decrease | scale-up/scale-down |
|---|---|---|
| 연산 유형 | 가산적 (additive) | 승산적 (multiplicative) |
| 수학적 의미 | f \pm v | f \times v 또는 f / v |
| 변경량의 의미 | 절대량 | 비율/배수 |
| 주요 용도 | 비용 누적, 자원 소모 | 모드 전환, 성능 조정 |
| 사용 빈도 | 높음 | 상대적으로 낮음 |
4. 로봇 도메인에서의 활용
4.1 성능 모드 전환
(:action activate_turbo_mode
:parameters (?r - robot)
:precondition (and
(robot_active ?r)
(not (turbo_mode ?r))
(>= (battery_level ?r) 50)
)
:effect (and
(turbo_mode ?r)
(scale-up (speed ?r) 2)
(scale-up (energy_consumption_rate ?r) 3)
)
)
(:action deactivate_turbo_mode
:parameters (?r - robot)
:precondition (turbo_mode ?r)
:effect (and
(not (turbo_mode ?r))
(scale-down (speed ?r) 2)
(scale-down (energy_consumption_rate ?r) 3)
)
)
4.2 환경 영향 모델링
(:action enter_rough_terrain
:parameters (?r - ground_robot ?zone - rough_zone)
:precondition (robot_at ?r ?zone)
:effect (and
(in_rough_terrain ?r)
(scale-down (speed ?r) 2)
(scale-up (energy_consumption_rate ?r) 1.5)
)
)
4.3 센서 모드 전환
(:action activate_high_resolution_mode
:parameters (?r - robot ?s - camera)
:precondition (and (has_sensor ?r ?s) (not (high_res_mode ?s)))
:effect (and
(high_res_mode ?s)
(scale-up (data_size_per_scan ?s) 4)
(scale-up (scan_quality ?s) 2)
(scale-down (scan_speed ?s) 2)
)
)
5. 주의사항
-
0으로 나누기 방지:
scale-down의 나누기 값이 0이면 정의되지 않는다. 전제 조건에서 양수임을 보장해야 한다. -
반복 적용의 누적 효과:
scale-up을 반복 적용하면 값이 지수적으로 증가한다. 모드 전환 패턴에서는 활성화와 비활성화를 쌍으로 설계하여 값이 원래 수준으로 복원되도록 해야 한다. -
정밀도 문제: 부동소수점 곱셈과 나눗셈의 반복 적용은 정밀도 손실을 야기할 수 있다.
scale-up(f, 2)후scale-down(f, 2)의 결과가 원래 값과 정확히 같지 않을 수 있다. -
플래너 지원:
scale-up과scale-down은increase와decrease보다 플래너 지원이 제한적일 수 있다. 대상 플래너의 지원 범위를 사전에 확인해야 한다. -
대안적 표현:
scale-up(f, v)는assign(f, (* f v))와,scale-down(f, v)는assign(f, (/ f v))와 동치이다. 플래너가scale-up/scale-down을 지원하지 않으면assign과 산술 표현식으로 대체할 수 있다.
6. 참고 문헌
- 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.