1314.18 조건부 효과의 정의와 구문

1. 조건부 효과의 정의

조건부 효과(conditional effect)는 액션 실행 시 특정 조건이 성립하는 경우에만 적용되는 효과이다. 이는 동일한 액션이 현재 상태에 따라 서로 다른 결과를 산출할 수 있음을 표현하며, PDDL에서 when 구문을 통해 정의된다. 조건부 효과의 사용에는 :conditional-effects 또는 :adl 요구사항의 활성화가 필요하다.

형식적으로, 조건부 효과는 조건-효과 쌍(condition-effect pair) \langle c, e \rangle로 정의된다:

\text{when}(c, e): \quad s \models c \Rightarrow e \text{가 적용됨}

여기서 c는 가드 조건(guard condition)이고, e는 조건이 참일 때 적용되는 효과이다. 가드 조건의 평가는 액션 실행 직전의 상태를 기준으로 수행된다.

2. PDDL 구문

조건부 효과의 기본 구문은 다음과 같다:

(when <condition> <effect>)

<condition>은 전제 조건과 동일한 논리식 구문을 사용하며, <effect>는 가드 조건이 참일 때 적용되는 효과를 명시한다.

조건부 효과는 일반적으로 접합적 효과 내부에 배치된다:

(:action move
    :parameters (?r - robot ?from - waypoint ?to - waypoint)
    :precondition (and
        (robot_at ?r ?from)
        (connected ?from ?to)
    )
    :effect (and
        ;; 무조건적 효과
        (not (robot_at ?r ?from))
        (robot_at ?r ?to)
        ;; 조건부 효과: 화물을 운반 중이면 화물도 함께 이동
        (when (carrying ?r ?cargo)
            (and
                (not (cargo_at ?cargo ?from))
                (cargo_at ?cargo ?to)
            )
        )
    )
)

3. 가드 조건의 구문적 허용 범위

가드 조건에는 전제 조건에 사용 가능한 모든 논리적 구성이 허용된다:

;; 단순 술어 가드
(when (carrying ?r ?obj) (not (object_at ?obj ?from)))

;; 접합적 가드
(when (and (carrying ?r ?obj) (fragile ?obj))
    (damaged ?obj)
)

;; 부정적 가드
(when (not (shield_active ?r))
    (robot_damaged ?r)
)

;; 양화된 가드 (ADL 수준)
(when (forall (?s - sensor) (sensor_active ?r ?s))
    (full_scan_complete ?r ?loc)
)

4. 조건부 효과의 의미론

조건부 효과의 의미론을 형식적으로 정의한다. 상태 s에서 액션 a를 적용할 때, 조건부 효과 \text{when}(c_j, e_j)는 다음과 같이 처리된다:

\text{eff}^+(a, s) = \text{eff}^+_{\text{unconditional}}(a) \cup \bigcup_{\{j \mid s \models c_j\}} \text{eff}^+_j(a)

\text{eff}^-(a, s) = \text{eff}^-_{\text{unconditional}}(a) \cup \bigcup_{\{j \mid s \models c_j\}} \text{eff}^-_j(a)

여기서 \text{eff}^+_{\text{unconditional}}(a)는 무조건적 추가 효과, \text{eff}^+_j(a)j번째 조건부 효과의 추가 부분이다. 가드 조건 c_j가 현재 상태 s에서 참인 경우에만 해당 조건부 효과가 활성화된다.

결과 상태는 다음과 같이 계산된다:

s' = (s \setminus \text{eff}^-(a, s)) \cup \text{eff}^+(a, s)

5. 다중 조건부 효과

하나의 액션에 다수의 조건부 효과를 포함할 수 있다. 각 조건부 효과는 독립적으로 평가되며, 가드 조건이 참인 모든 조건부 효과가 동시에 적용된다:

(:action move_through_zone
    :parameters (?r - robot ?from - waypoint ?to - waypoint)
    :precondition (and (robot_at ?r ?from) (connected ?from ?to))
    :effect (and
        (not (robot_at ?r ?from))
        (robot_at ?r ?to)

        ;; 조건부 효과 1: 물체 운반
        (when (holding ?r ?obj)
            (and (not (object_at ?obj ?from)) (object_at ?obj ?to))
        )

        ;; 조건부 효과 2: 위험 구역 통과 시 센서 경고
        (when (hazardous_zone ?to)
            (sensor_alert ?r)
        )

        ;; 조건부 효과 3: 미탐사 구역 방문
        (when (not (explored ?to))
            (explored ?to)
        )
    )
)

세 가지 조건부 효과는 각각 독립적으로 평가된다. 로봇이 물체를 들고 있으면서 위험 구역의 미탐사 위치로 이동하는 경우, 세 가지 조건부 효과가 모두 활성화된다.

6. 조건부 효과와 무조건적 효과의 상호 작용

조건부 효과와 무조건적 효과가 동일한 술어에 대해 상충하는 변경을 시도할 수 있다. 이 경우의 처리 규칙은 STRIPS 의미론을 따른다: 모든 활성화된 효과(무조건적 + 조건이 참인 조건부)의 삭제와 추가가 동시에 적용되며, 추가가 삭제에 우선한다.

:effect (and
    (not (status ?r active))      ;; 무조건적 삭제
    (when (emergency)
        (status ?r active)         ;; 조건부 추가: 긴급 시 active 유지
    )
)

emergency가 참인 경우, (status ?r active)가 삭제된 후 다시 추가되므로 결과적으로 상태에 존재한다. emergency가 거짓인 경우, 삭제만 적용되어 상태에서 제거된다.

7. 조건부 효과를 사용하지 않는 대안적 설계

조건부 효과는 액션 분할(action splitting)을 통해 제거할 수 있다. 각 가드 조건의 참/거짓 조합에 대응하는 별도의 액션을 정의하는 방식이다:

;; 조건부 효과 사용
(:action move
    :parameters (?r - robot ?from ?to - waypoint)
    :precondition (and (robot_at ?r ?from) (connected ?from ?to))
    :effect (and
        (not (robot_at ?r ?from))
        (robot_at ?r ?to)
        (when (carrying ?r ?obj)
            (and (not (object_at ?obj ?from)) (object_at ?obj ?to))
        )
    )
)

;; 액션 분할로 대체
(:action move_empty
    :parameters (?r - robot ?from ?to - waypoint)
    :precondition (and
        (robot_at ?r ?from)
        (connected ?from ?to)
        (gripper_free ?r)
    )
    :effect (and
        (not (robot_at ?r ?from))
        (robot_at ?r ?to)
    )
)

(:action move_carrying
    :parameters (?r - robot ?obj - object ?from ?to - waypoint)
    :precondition (and
        (robot_at ?r ?from)
        (connected ?from ?to)
        (carrying ?r ?obj)
    )
    :effect (and
        (not (robot_at ?r ?from))
        (robot_at ?r ?to)
        (not (object_at ?obj ?from))
        (object_at ?obj ?to)
    )
)

액션 분할은 STRIPS 호환성을 확보하고 플래너의 효율성을 향상시킬 수 있지만, 조건부 효과의 수가 많은 경우 분할된 액션의 수가 지수적으로 증가할 수 있다. k개의 독립적 조건부 효과가 있으면 최대 2^k개의 액션이 필요하다.

8. 플래너 호환성

조건부 효과에 대한 플래너 지원 현황은 다음과 같다:

플래너조건부 효과 지원처리 방식
FF지원내부 컴파일
Fast Downward지원전처리에서 제거 가능
POPF제한적 지원
LAMA지원
Graphplan미지원

Fast Downward와 같은 플래너는 전처리 단계에서 조건부 효과를 내부적으로 컴파일하여 STRIPS 수준으로 변환한 후 탐색을 수행한다(Helmert, 2006).

9. 설계 지침

  1. 조건부 효과는 관련 상태 변경이 동일 행동의 부수 효과인 경우에 사용하라. 이동 시 화물의 동반 이동, 환경 조건에 따른 부차적 영향 등이 적합한 사례이다.

  2. 가드 조건은 단순하게 유지하라. 복잡한 중첩 논리식을 가드 조건으로 사용하면 평가 비용이 증가하고 도메인의 가독성이 저하된다.

  3. 조건부 효과의 수를 제한하라. 하나의 액션에 다수의 조건부 효과가 존재하면 플래너의 분석이 어려워진다. 조건부 효과가 3–4개를 초과하면 액션 분해를 고려해야 한다.

  4. STRIPS 호환성이 필요한 경우 액션 분할을 사용하라. 조건부 효과를 지원하지 않는 플래너를 사용하거나, 최대 호환성이 요구되는 경우 액션 분할이 안전한 대안이다.

10. 참고 문헌

  • Pednault, E. P. D. (1989). “ADL: Exploring the Middle Ground Between STRIPS and the Situation Calculus.” Proceedings of the 1st International Conference on Principles of Knowledge Representation and Reasoning (KR), 324–332.
  • Ghallab, M., Nau, D., & Traverso, P. (2004). Automated Planning: Theory and Practice. Morgan Kaufmann.
  • Helmert, M. (2006). “The Fast Downward Planning System.” Journal of Artificial Intelligence Research, 26, 191–246.
  • Haslum, P., Lipovetzky, N., Magazzeni, D., & Muise, C. (2019). An Introduction to the Planning Domain Definition Language. Morgan & Claypool Publishers.
  • Nebel, B. (2000). “On the Compilability and Expressive Power of Propositional Planning Formalisms.” Journal of Artificial Intelligence Research, 12, 271–315.