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. 설계 지침
-
조건부 효과는 관련 상태 변경이 동일 행동의 부수 효과인 경우에 사용하라. 이동 시 화물의 동반 이동, 환경 조건에 따른 부차적 영향 등이 적합한 사례이다.
-
가드 조건은 단순하게 유지하라. 복잡한 중첩 논리식을 가드 조건으로 사용하면 평가 비용이 증가하고 도메인의 가독성이 저하된다.
-
조건부 효과의 수를 제한하라. 하나의 액션에 다수의 조건부 효과가 존재하면 플래너의 분석이 어려워진다. 조건부 효과가 3–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.