1315.28 파생 술어의 개념과 정의
1. 파생 술어의 개념
파생 술어(derived predicate)는 PDDL 2.2에서 도입된 기능으로, 다른 술어들의 논리적 조합에 의해 자동으로 참/거짓이 결정되는 가상 술어이다(Edelkamp & Helmert, 2004). 일반 술어가 초기 상태에서 명시적으로 설정되고 액션의 효과에 의해 변경되는 것과 달리, 파생 술어는 :derived 규칙에 의해 현재 상태에서 추론된다.
파생 술어의 사용에는 :derived-predicates 요구사항의 활성화가 필요하다:
(:requirements :strips :typing :derived-predicates)
2. 형식적 정의
파생 술어는 규칙(rule)에 의해 정의된다. 규칙은 파생 술어의 인스턴스가 참이 되기 위한 조건을 논리식으로 명시한다:
(:derived (<predicate-head>) <logical-formula>)
여기서 <predicate-head>는 파생 술어의 이름과 매개변수, <logical-formula>는 파생 조건이다. 파생 술어 인스턴스는 논리식이 현재 상태에서 참일 때 자동으로 참이 되고, 거짓일 때 자동으로 거짓이 된다.
3. 기본 예시
3.1 연결성 검사
두 위치 사이의 간접적 연결(경로 존재) 여부를 파생 술어로 정의한다:
(:predicates
(connected ?w1 - waypoint ?w2 - waypoint) ;; 직접 연결 (기본 술어)
)
;; 직접 연결이면 도달 가능
(:derived (reachable ?from - waypoint ?to - waypoint)
(connected ?from ?to)
)
;; 중간 경유지를 통해서도 도달 가능 (재귀적 정의)
(:derived (reachable ?from - waypoint ?to - waypoint)
(exists (?mid - waypoint)
(and (connected ?from ?mid) (reachable ?mid ?to))
)
)
3.2 안전 조건
(:derived (zone_safe ?z - zone)
(and
(not (hazard_present ?z))
(not (human_in_zone ?z))
(emergency_system_active ?z)
)
)
이 파생 술어는 해당 구역에 위험이 없고, 사람이 없으며, 비상 시스템이 활성화되어 있을 때 자동으로 참이 된다.
4. 파생 술어와 일반 술어의 차이
| 특성 | 일반 술어 | 파생 술어 |
|---|---|---|
| 정의 방법 | :predicates 선언 | :derived 규칙 |
| 값 결정 | 초기 상태 또는 액션 효과 | 규칙에 의한 자동 추론 |
| 초기 상태 설정 | :init에서 명시 | 불필요 (규칙이 결정) |
| 액션 효과로 변경 | 가능 | 불가능 |
| 변경 시점 | 액션 적용 시 | 기반 술어 변경 시 자동 갱신 |
| 주요 용도 | 상태 표현 | 복합 조건의 추상화 |
핵심적 차이는, 파생 술어는 액션의 효과로 직접 변경할 수 없다는 것이다. 파생 술어의 값은 기반 술어(base predicate)의 상태에 의해 완전히 결정되며, 기반 술어가 변경되면 파생 술어의 값도 자동으로 갱신된다.
5. 파생 술어의 역할
5.1 전제 조건의 간결화
복잡한 논리식을 파생 술어로 추상화하면, 여러 액션의 전제 조건에서 반복적으로 사용되는 복합 조건을 간결하게 표현할 수 있다:
;; 파생 술어 없이: 반복적 복합 조건
(:action move
:precondition (and
(robot_at ?r ?from)
(connected ?from ?to)
(not (hazard_present ?to))
(not (human_in_zone ?to))
(emergency_system_active ?to)
))
(:action inspect
:precondition (and
(robot_at ?r ?loc)
(not (hazard_present ?loc))
(not (human_in_zone ?loc))
(emergency_system_active ?loc)
))
;; 파생 술어 사용: 간결한 전제 조건
(:derived (zone_safe ?z - zone) ...)
(:action move
:precondition (and (robot_at ?r ?from) (connected ?from ?to) (zone_safe ?to)))
(:action inspect
:precondition (and (robot_at ?r ?loc) (zone_safe ?loc)))
5.2 이행적 폐쇄(Transitive Closure)의 표현
그래프의 이행적 폐쇄, 즉 “간접적으로 도달 가능한 모든 노드“를 파생 술어의 재귀적 정의로 표현할 수 있다. 이는 STRIPS 수준의 일반 술어로는 직접 표현할 수 없는 속성이다.
6. 참고 문헌
- Edelkamp, S. & Helmert, M. (2004). “On the Implementation of MIPS.” Proceedings of the AIPS Workshop on the Competition.
- 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.