1315.16 assign 연산자를 통한 값 할당

1. assign 연산자의 정의

assign 연산자는 수치 함수의 현재 값을 완전히 무시하고, 지정된 새 값으로 대체하는 갱신 연산이다. increasedecrease가 현재 값에 대한 상대적 변경인 반면, assign은 절대적 설정이다.

s'[f] = v

2. 구문

(assign <function-instance> <numeric-expression>)

3. 주요 활용 사례

3.1 배터리 완충

(:action full_charge
    :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))
)

3.2 상태 초기화 및 리셋

;; 오류 카운터 초기화
(assign (error_count ?r) 0)

;; 데이터 저장소 비우기 (업로드 후)
(assign (storage_used ?r) 0)

;; 현재 적재량 초기화
(assign (current_load ?r) 0)

3.3 속성 재설정

;; 속도 모드 변경
(:action set_high_speed
    :parameters (?r - robot)
    :precondition (robot_active ?r)
    :effect (assign (current_speed ?r) (max_speed ?r))
)

(:action set_low_speed
    :parameters (?r - robot)
    :precondition (robot_active ?r)
    :effect (assign (current_speed ?r) (* (max_speed ?r) 0.3))
)

3.4 센서 보정 후 정확도 설정

(:action calibrate_sensor
    :parameters (?r - robot ?s - sensor)
    :precondition (and (has_sensor ?r ?s) (not (sensor_calibrated ?s)))
    :effect (and
        (sensor_calibrated ?s)
        (assign (sensor_accuracy ?s) (max_accuracy ?s))
    )
)

4. assign과 increase/decrease의 비교

특성assignincrease/decrease
이전 값 참조불참조참조
연산 성격절대적 설정상대적 변경
역연산 가능불가 (이전 값 소실)가능 (역연산 적용)
주요 용도초기화, 리셋, 절대 설정누적, 소모, 증감

5. assign의 특수한 용도

5.1 함수 값의 복사

한 함수의 값을 다른 함수에 복사:

;; 현재 위치의 좌표를 저장
(assign (saved_x ?r) (current_x ?r))
(assign (saved_y ?r) (current_y ?r))

5.2 조건부 할당

조건부 효과와 결합하여 조건에 따라 다른 값을 할당:

:effect (and
    (when (priority_high ?task)
        (assign (urgency_score ?task) 10)
    )
    (when (priority_low ?task)
        (assign (urgency_score ?task) 1)
    )
)

6. 주의사항

  1. 이전 값의 소실: assign 적용 후 이전 값을 복원할 수 없으므로, 이전 값이 필요한 경우 별도 함수에 저장해야 한다.

  2. 계획의 비가역성: assign을 사용한 액션은 역방향으로 되돌리기 어려우므로, 후방 탐색 기반 플래너에서 처리가 복잡해질 수 있다.

  3. 메트릭과의 상호 작용: assign으로 메트릭 함수(예: total_cost)를 임의로 설정하면 비용 최적화가 무의미해질 수 있다. 메트릭 함수에는 increase만 사용하는 것이 안전하다.

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.