1315.46 드론 배송 도메인의 ���급 PDDL 모델링
1. 드론 배송 도메인의 구조
드론 배송 도메인은 타입 시스템, 수치 함수, 파생 술어의 결합 활용이 필요한 대표적인 복합 로봇 도메인이다. 다중 드론이 다양한 화물을 여러 고객에게 배송하면서 에너지 제약, 적재 용량, 비행 규제, 기상 조건 등을 동시에 고려해야 한다.
2. 종합 도메인 정의
(define (domain drone_delivery)
(:requirements :strips :typing :numeric-fluents :derived-predicates :durative-actions)
;; 타입 계층
(:types
drone - object
small_drone large_drone - drone
location - object
depot customer_location landing_pad - location
airspace - location
package - object
standard_package express_package fragile_package - package
)
;; 기반 술어
(:predicates
(drone_at ?d - drone ?l - location)
(landed ?d - drone)
(airborne ?d - drone)
(holding ?d - drone ?p - package)
(gripper_free ?d - drone)
(package_at ?p - package ?l - location)
(delivered ?p - package ?dest - customer_location)
(connected_air ?a1 - airspace ?a2 - airspace)
(above ?a - airspace ?l - landing_pad)
(pad_free ?l - landing_pad)
(flight_permitted ?a - airspace)
(weather_ok ?a - airspace)
)
;; 수치 함수
(:functions
(battery_level ?d - drone)
(max_battery ?d - drone)
(payload_capacity ?d - drone)
(weight ?p - package)
(current_payload ?d - drone)
(air_distance ?a1 - airspace ?a2 - airspace)
(flight_speed ?d - drone)
(energy_per_km ?d - drone)
(takeoff_energy ?d - drone)
(landing_energy ?d - drone)
(charge_rate ?depot - depot)
(delivery_reward ?p - package)
(total_cost)
(total_reward)
(total_deliveries)
)
;; 파생 술어: 복합 조건 추상화
(:derived (drone_operational ?d - drone)
(and (not (drone_in_error ?d)) (>= (battery_level ?d) 5)))
(:derived (can_carry ?d - drone ?p - package)
(and (gripper_free ?d)
(<= (+ (current_payload ?d) (weight ?p)) (payload_capacity ?d))
(imply (fragile_package ?p) (has_cushioned_gripper ?d))))
(:derived (flight_safe ?a - airspace)
(and (flight_permitted ?a) (weather_ok ?a)))
(:derived (energy_for_flight ?d - drone ?from - airspace ?to - airspace)
(>= (battery_level ?d)
(+ (* (air_distance ?from ?to) (energy_per_km ?d))
(landing_energy ?d))))
;; 듀레이티브 ��션
(:durative-action takeoff
:parameters (?d - drone ?pad - landing_pad ?air - airspace)
:duration (= ?duration 10)
:condition (and
(at start (drone_at ?d ?pad))
(at start (landed ?d))
(at start (above ?air ?pad))
(at start (drone_operational ?d))
(at start (>= (battery_level ?d) (takeoff_energy ?d)))
(over all (flight_safe ?air))
)
:effect (and
(at start (not (landed ?d)))
(at start (not (drone_at ?d ?pad)))
(at start (pad_free ?pad))
(at end (airborne ?d))
(at end (drone_at ?d ?air))
(at end (decrease (battery_level ?d) (takeoff_energy ?d)))
)
)
(:durative-action fly
:parameters (?d - drone ?from - airspace ?to - airspace)
:duration (= ?duration (/ (air_distance ?from ?to) (flight_speed ?d)))
:condition (and
(at start (drone_at ?d ?from))
(at start (airborne ?d))
(at start (connected_air ?from ?to))
(at start (energy_for_flight ?d ?from ?to))
(over all (flight_safe ?from))
(over all (flight_safe ?to))
)
:effect (and
(at start (not (drone_at ?d ?from)))
(at end (drone_at ?d ?to))
(at end (decrease (battery_level ?d)
(* (air_distance ?from ?to) (energy_per_km ?d))))
(at end (increase (total_cost) (air_distance ?from ?to)))
)
)
(:durative-action land
:parameters (?d - drone ?air - airspace ?pad - landing_pad)
:duration (= ?duration 15)
:condition (and
(at start (drone_at ?d ?air))
(at start (airborne ?d))
(at start (above ?air ?pad))
(at start (pad_free ?pad))
(over all (flight_safe ?air))
)
:effect (and
(at start (not (airborne ?d)))
(at start (not (drone_at ?d ?air)))
(at start (not (pad_free ?pad)))
(at end (landed ?d))
(at end (drone_at ?d ?pad))
(at end (decrease (battery_level ?d) (landing_energy ?d)))
)
)
(:action pick_package
:parameters (?d - drone ?p - package ?loc - landing_pad)
:precondition (and
(drone_at ?d ?loc) (landed ?d) (package_at ?p ?loc)
(can_carry ?d ?p))
:effect (and
(holding ?d ?p) (not (package_at ?p ?loc))
(not (gripper_free ?d))
(increase (current_payload ?d) (weight ?p))))
(:action deliver_package
:parameters (?d - drone ?p - package ?dest - customer_location)
:precondition (and
(drone_at ?d ?dest) (landed ?d) (holding ?d ?p))
:effect (and
(delivered ?p ?dest) (gripper_free ?d) (not (holding ?d ?p))
(decrease (current_payload ?d) (weight ?p))
(increase (total_reward) (delivery_reward ?p))
(increase (total_deliveries) 1)))
(:action charge
:parameters (?d - drone ?depot - depot)
:precondition (and (drone_at ?d ?depot) (landed ?d))
:effect (assign (battery_level ?d) (max_battery ?d)))
)
3. 문제 정의 예시
(define (problem delivery_mission_1)
(:domain drone_delivery)
(:objects
drone1 - small_drone drone2 - large_drone
depot1 - depot
cust_A cust_B cust_C - customer_location
pad_depot pad_A pad_B pad_C - landing_pad
air1 air2 air3 air4 - airspace
pkg1 pkg2 - standard_package pkg3 - fragile_package
)
(:init
(= (battery_level drone1) 100) (= (max_battery drone1) 100)
(= (payload_capacity drone1) 5) (= (flight_speed drone1) 20)
(= (energy_per_km drone1) 2) (= (takeoff_energy drone1) 5)
(= (landing_energy drone1) 3)
(= (battery_level drone2) 150) (= (max_battery drone2) 150)
(= (payload_capacity drone2) 15) (= (flight_speed drone2) 15)
(= (energy_per_km drone2) 3) (= (takeoff_energy drone2) 8)
(= (landing_energy drone2) 5)
(= (weight pkg1) 2) (= (weight pkg2) 3) (= (weight pkg3) 1)
(= (delivery_reward pkg1) 10) (= (delivery_reward pkg2) 15)
(= (delivery_reward pkg3) 20)
(= (total_cost) 0) (= (total_reward) 0) (= (total_deliveries) 0)
;; ... 연결, 위치, 거리 정보
)
(:goal (and (delivered pkg1 cust_A) (delivered pkg2 cust_B) (delivered pkg3 cust_C)))
(:metric maximize (- (total_reward) (total_cost)))
)
4. 핵심 모델링 포인트
- 타입 계층으로 드론 및 화물 능력 분류: 소형/대형 드론, 일반/특급/취급주의 화물
- 수치 함수로 정량적 제약 관리: 배터리, 적재 용량, 거리, 비용, 보상
- 파생 술어로 복합 조건 추상화: 운영 가능성, 운반 가능성, 비행 안전성, 에너지 충분성
- 듀레이티브 액션으로 시간적 모델링: 이착륙, 비행의 소요 시간과 병렬 실행
5. 참고 문헌
- 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.
- Ghallab, M., Nau, D., & Traverso, P. (2004). Automated Planning: Theory and Practice. Morgan Kaufmann.