1315.19 비교 연산자를 이용한 수치 조건 검사

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. 설계 지침

  1. 안전 마진을 포함하라. 정확한 경계값 대신 여유를 둔 비교를 사용하면 실행 시 불확실성에 대한 내성이 높아진다.
  2. 비교 방향을 일관되게 사용하라. 도메인 전체에서 “자원 >= 요구량” 또는 “요구량 <= 자원” 중 하나의 패턴을 일관되게 사용한다.
  3. 동등 비교는 정수 값에 대해서만 사용하라. 부동소수점 값에 대한 동등 비교는 정밀도 문제를 야기할 수 있다.

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.