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/decreasescale-up/scale-down
연산 유형가산적 (additive)승산적 (multiplicative)
수학적 의미f \pm vf \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. 주의사항

  1. 0으로 나누기 방지: scale-down의 나누기 값이 0이면 정의되지 않는다. 전제 조건에서 양수임을 보장해야 한다.

  2. 반복 적용의 누적 효과: scale-up을 반복 적용하면 값이 지수적으로 증가한다. 모드 전환 패턴에서는 활성화와 비활성화를 쌍으로 설계하여 값이 원래 수준으로 복원되도록 해야 한다.

  3. 정밀도 문제: 부동소수점 곱셈과 나눗셈의 반복 적용은 정밀도 손실을 야기할 수 있다. scale-up(f, 2)scale-down(f, 2)의 결과가 원래 값과 정확히 같지 않을 수 있다.

  4. 플래너 지원: scale-upscale-downincreasedecrease보다 플래너 지원이 제한적일 수 있다. 대상 플래너의 지원 범위를 사전에 확인해야 한다.

  5. 대안적 표현: 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.