## Appendix A  
``` (define (domain MDCOVRPPD) (requirements:strips:typing:action-costs:disjunctive-preconditions:durative-actions) (types job agent position) (predicates (agent_at?a--agent?pt--position) (job_at?b--job?pt--position) (job_targetpos?b--job?pt--position) (matched_job_with_agent?b--job?a--agent) (moved_agent_to_job_startpos?a--agent?b--job) (moved_agent_to_job_targetpos?a--agent?b--job) (picked_job?b--job?a--agent) (placed_job?b--job) ) ) (functions (agent_id?a--agent) (agent_velocity?a--agent) (agent_loadingspace_capacity?a--agent) (agent_battery_level?a--agent) (agent_performance_residual?a--agent) (job_id?b--job) (distance_between_pts?pt1--position?pt2--position) (total_cost) (count_loaded_jobs?a--agent) ) (durative-action match_job_with_agent :parameters?b--job?b_pt--position?a--agent?a_pt--position) :duration (=?duration) :condition (and (at start (job_at?b?b_pt)) (at start (agent_at?a?a?a?a)) (over all (\(<\)(count_loaded_jobs?a) (agent_loadingspace_capacity?a))) (over all (\(>\)(agent_battery_level?a) 0.2)) ) :effect (and (at start (matched_job_with_agent?b?a))) ) (durative-action move_agent_to_job_startpos :parameters?a--agent?a_pt--position?b--job?b_pt--position) :duration (=?duration (/ (distance_between_pts?a_pt?b_pt) (*agent_velocity?a) (*agent_performance_residual?a) (agent_performance_residual?a)))) :condition (and (at start (matched_job_with_agent?b?a)) (at start (agent_at?a?a?a?b)) (at start (job_at?b?b?b_pt) (at start (\(>\)(agent_battery_level?a) 0.2))) :effect (and (at start (not (agent_at?a?a?a?b_pt))) (at start (not (matched_job_with_agent?b?a))) (at start (moved_agent_to_job_startpos?a?b)) (at end (increase (total_cost) (/ (distance_between_pts?a?a_pt?b_pt) (*agent_velocity?a) (agent_performance_residual?a) (agent_performance_residual?a))) (at end (decrease (agent_battery_level?a) (/ (distance_between_pts?a?a_pt?b_pt) 5000)))) (at end (agent_at?a?b_pt)) ) (durative-action pick_jobparameters (?b--job?a--agent?jb_start_pt--position) -duration (=?duration 60) -condition (and (at start (moved_agent_to_job_startpos?a?jb)) (at start (job_at?jb?jb_start_pt)) (at start (agent_at?a?jb_start_pt)) (over all (! (count_loaded_jobs?a) (agent_loadingspace_capacity?a))) ) -effect (and (at start (not (moved_agent_to_job_startpos?a?jb))) (at start (not (job_at?jb?jb_start_pt))) (at start (picked_job?jb?a)) (at end (increase (count_loaded_jobs?a) 1)) (at end (increase (total_cost) 60)) ) (:durative-action move_agent_to_job_targetpos :parameters (?a--agent?a_pt--position?jb--job?jb_pt--position) :duration (=?duration (/ (distance_between_pts?a_pt?jb_pt) (* (agent_velocity?a) (* (agent_performance_residual?a) (agent_performance_residual?a))))) :condition (and (at start (picked_job?jb?a)) (at start (agent_at?a?a_pt)) (at start (job_targetpos?b)?jb_pt) (at start (>agent_b_targetpos?jb_pt)) (at start (> (agent_b_targetpos?a) 0.2)) ) -effect (and (at start (not (picked_job?jb?a))) (at start (not (agent_at?a?a_pt))) (at start (not (moved_agent_to_job_startpos?a?jb))) (at start (moved_agent_to_job_targetpos?a?jb)) (at end (increase (total_cost) / (distance_between_pts?a_pt?jb_pt) (* (agent_performance_residual?a)))) (at end (decrease (agent_b_targetpos?a) / (distance_between_pts?a_pt?jb_pt) 5000))) (:durative-action place_job :parameters (?jb--job?a--agent?jb_target_pt--position) :duration (=?duration 60) :condition (and (at start (moved_agent_to_job_targetpos?a?jb)) (at start (job_targetpos?jb_target_pt)) (at start (agent_at?a?jb_target_pt)) :effect (and (at start (not (moved_agent_to_job_targetpos?a?jb))) (at start (not (job_targetpos?jb?jb_target_pt))) (at end (placed_job?jb)) (at end (decrease (count_loaded_jobs?a) 1)) (at end (increase (total_cost) 60)) ) )

## References

* (1) [PERSON]; [PERSON] The Truck Dispatching Problem. _Manag. Sci._**1959**, \(6\), 80-91. [CrossRef]
* (2) [PERSON]; [PERSON] Metaheuristic, models and software for the heterogeneous fleet pickup and delivery problem with split loads. _J. Comput. Sci._**2022**, _59_, 101549.