1315.34 파생 술어를 활용한 도메인 간소화
1. 간소화의 원리
파생 술어를 활용한 도메인 간소화는 반복적으로 등장하는 복합 논리 조건을 파생 술어로 추상화하여, 액션의 전제 조건을 간결하게 만드는 기법이다. 이는 코드 리팩토링에서의 “공통 코드 추출(extract common code)” 패턴과 유사하다.
2. 간소화 전후 비교
2.1 간소화 전: 반복적 복합 조건
(:action move
:parameters (?r - robot ?from ?to - waypoint)
:precondition (and
(robot_at ?r ?from)
(connected ?from ?to)
(not (in_error ?r))
(robot_active ?r)
(>= (battery_level ?r) 10)
(not (blocked ?to))
(not (hazard_at ?to))
)
:effect (...))
(:action pick_up
:parameters (?r - robot ?obj - object ?loc - waypoint)
:precondition (and
(robot_at ?r ?loc)
(object_at ?obj ?loc)
(gripper_free ?r)
(not (in_error ?r))
(robot_active ?r)
(>= (battery_level ?r) 10)
)
:effect (...))
(:action scan
:parameters (?r - robot ?loc - waypoint)
:precondition (and
(robot_at ?r ?loc)
(sensor_active ?r)
(not (in_error ?r))
(robot_active ?r)
(>= (battery_level ?r) 10)
)
:effect (...))
세 액션 모두 (not (in_error ?r)), (robot_active ?r), (>= (battery_level ?r) 10) 조건을 반복한다.
2.2 간소화 후: 파생 술어로 추상화
(:derived (robot_operational ?r - robot)
(and
(not (in_error ?r))
(robot_active ?r)
(>= (battery_level ?r) 10)
)
)
(:derived (location_safe ?loc - waypoint)
(and (not (blocked ?loc)) (not (hazard_at ?loc))))
(:action move
:parameters (?r - robot ?from ?to - waypoint)
:precondition (and
(robot_at ?r ?from)
(connected ?from ?to)
(robot_operational ?r)
(location_safe ?to)
)
:effect (...))
(:action pick_up
:parameters (?r - robot ?obj - object ?loc - waypoint)
:precondition (and
(robot_at ?r ?loc)
(object_at ?obj ?loc)
(gripper_free ?r)
(robot_operational ?r)
)
:effect (...))
(:action scan
:parameters (?r - robot ?loc - waypoint)
:precondition (and
(robot_at ?r ?loc)
(sensor_active ?r)
(robot_operational ?r)
)
:effect (...))
3. 간소화의 정량적 효과
| 측면 | 간소화 전 | 간소화 후 | 개선 |
|---|---|---|---|
| 전제 조건 총 리터럴 수 | 18 | 11 (+2 규칙) | 38% 감소 |
| 조건 수정 시 변경 위치 | 3개 액션 | 1개 파생 술어 | 유지보수 비용 감소 |
| 가독성 | 낮음 (반복 패턴) | 높음 (추상화) | 의미 명확화 |
4. 간소화 적용 기준
다음 조건을 만족하는 복합 조건에 파생 술어를 적용한다:
- 반복 사용: 2개 이상의 액션에서 동일한 조건 패턴이 반복된다.
- 의미적 단위: 추출된 조건이 독립적인 의미를 가진다(예: “로봇 작동 가능”, “구역 안전”).
- 변경 단위: 향후 조건이 수정될 때 일괄 변경이 필요한 경우이다.
단일 액션에서만 사용되는 조건이나, 의미적 독립성이 없는 조건은 파생 술어로 추출하지 않는다.
5. 로봇 도메인의 간소화 패턴
5.1 로봇 준비 상태
(:derived (robot_ready ?r - robot)
(and (robot_operational ?r) (not (robot_busy ?r)) (comm_enabled ?r)))
5.2 태스크 수행 가능
(:derived (can_execute ?r - robot ?t - task ?loc - waypoint)
(and (robot_at ?r ?loc) (task_at ?t ?loc) (robot_ready ?r)
(has_tool_for ?r ?t) (not (task_completed ?t))))
5.3 충전 필요 여부
(:derived (needs_charging ?r - robot)
(< (battery_level ?r) (low_battery_threshold ?r)))
6. 주의사항
-
과도한 추상화 자제: 모든 조건을 파생 술어로 추출하면 오히려 도메인이 복잡해진다. 반복 빈도와 의미적 독립성을 기준으로 선별적으로 적용한다.
-
플래너 호환성: 파생 술어를 지원하지 않는 플래너에서는 이 간소화를 적용할 수 없다. 대안으로 전제 조건의 반복을 수용하거나, 전처리 스크립트로 파생 술어를 전개(inline)한다.
-
디버깅 시 계층 추적: 파생 술어의 값이 예상과 다른 경우, 기반 술어부터 계층적으로 추적하여 원인을 식별한다.
7. 참고 문헌
- Thiébaux, S., Hoffmann, J., & Nebel, B. (2005). “In Defense of PDDL Axioms.” Artificial Intelligence, 168(1–2), 38–69.
- Haslum, P., Lipovetzky, N., Magazzeni, D., & Muise, C. (2019). An Introduction to the Planning Domain Definition Language. Morgan & Claypool Publishers.