1315.19 비교 연산자를 이용한 수치 조건 검사
1. 비교 연산자의 종류와 의미론
PDDL 2.1에서 지원하는 수치 비교 연산자는 다섯 가지이다. 각 연산자는 두 수치 표현식 간의 관계를 평가하여 참 또는 거짓을 반환한다.
| 연산자 | 의미 | 형식적 정의 | 구문 예시 |
|---|---|---|---|
< | 미만 (less than) | x < y | (< (battery_level ?r) 20) |
<= | 이하 (less than or equal) | x \leq y | (<= (current_load ?r) (max_load ?r)) |
> | 초과 (greater than) | x > y | (> (fuel_level ?v) 0) |
>= | 이상 (greater than or equal) | x \geq y | (>= (battery_level ?r) (energy_cost ?from ?to)) |
= | 동등 (equal) | x = y | (= (error_count ?r) 0) |
2. 비교의 양변 구조
비교 연산자의 양변에는 다양한 수치 표현식을 배치할 수 있다:
2.1 함수 대 상수
(>= (battery_level ?r) 20)
(< (error_count ?r) 3)
(= (current_speed ?r) 0)
2.2 함수 대 함수
(>= (battery_level ?r) (energy_cost ?from ?to))
(<= (current_load ?r) (max_load ?r))
(< (battery_level ?r) (max_battery ?r))
2.3 산술 표현식 대 함수
(<= (+ (current_load ?r) (weight ?obj)) (max_load ?r))
(>= (battery_level ?r) (* 2 (energy_cost ?from ?to)))
(> (- (max_battery ?r) (battery_level ?r)) 10)
2.4 산술 표현식 대 산술 표현식
(>= (+ (battery_level ?r) (potential_charge ?station))
(* (distance ?r_loc ?dest) (energy_per_meter ?r)))
3. 엄격 비교와 비엄격 비교의 선택
3.1 자원 충분성에는 비엄격 비교 (>=)
자원이 정확히 필요량과 같아도 액션을 수행할 수 있어야 하므로:
;; 배터리가 비용과 정확히 같아도 이동 가능
(>= (battery_level ?r) (energy_cost ?from ?to))
3.2 양수 검사에는 엄격 비교 (>)
0은 포함하지 않고 양수만 허용할 때:
;; 연료가 0보다 커야 함 (0은 부족)
(> (fuel_level ?v) 0)
3.3 미달 감지에는 엄격 비교 (<)
임계값 이하로 떨어졌는지 감지할 때:
;; 배터리가 임계값 미만으로 떨어짐
(< (battery_level ?r) (low_battery_threshold ?r))
3.4 동등 비교 (=)
정확한 값 일치를 요구할 때:
;; 오류 없음 확인
(= (error_count ?r) 0)
;; 적재량이 0인 경우 (비어 있음)
(= (current_load ?r) 0)
동등 비교에서 부동소수점 정밀도 문제에 주의해야 한다. 연산의 결과로 발생하는 값에 대한 동등 비교는 정밀도 손실로 인해 실패할 수 있다.
4. 부정된 수치 비교
ADL 환경에서 수치 비교를 부정할 수 있다:
;; 배터리가 충분하지 않음
(not (>= (battery_level ?r) (energy_cost ?from ?to)))
;; 동치: (< (battery_level ?r) (energy_cost ?from ?to))
부정된 비교는 해당 비교의 보수(complement) 연산자로 대체하는 것이 더 명확하다.
5. 복합 수치 조건
여러 수치 비교를 논리 연산자로 결합할 수 있다:
:precondition (and
(>= (battery_level ?r) (energy_cost ?from ?to)) ;; 에너지 충분
(<= (+ (current_load ?r) (weight ?obj)) (max_load ?r)) ;; 용량 이내
(> (speed ?r) 0) ;; 이동 가능
(< (error_count ?r) (max_errors ?r)) ;; 오류 한도 이내
)
6. 설계 지침
- 안전 마진을 포함하라. 정확한 경계값 대신 여유를 둔 비교를 사용하면 실행 시 불확실성에 대한 내성이 높아진다.
- 비교 방향을 일관되게 사용하라. 도메인 전체에서 “자원 >= 요구량” 또는 “요구량 <= 자원” 중 하나의 패턴을 일관되게 사용한다.
- 동등 비교는 정수 값에 대해서만 사용하라. 부동소수점 값에 대한 동등 비교는 정밀도 문제를 야기할 수 있다.
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.