Я пытаюсь найти кратчайший путь в net узлов. Начинаются с x1y1 и заканчиваются x9y9 . Каждому перемещению от узла к узлу назначается определенная стоимость. Цель состоит в том, чтобы найти путь с наименьшей общей стоимостью. Описание проблемы Раздел: init содержит информацию о том, какие узлы подключены и какова стоимость соединения:
(:init
(neighbor x1y1 x1y2)
(neighbor x1y2 x1y3)
(neighbor x1y1 x2y1)
(neighbor x1y3 x9y9)
(neighbor x2y1 x9y9)
(on runner x1y1)
(= (cost-total) 0)
(= (cost-step x1y1 x1y2) 2)
(= (cost-step x1y2 x1y3) 2)
(= (cost-step x1y1 x2y1) 100)
(= (cost-step x1y3 x9y9) 2)
(= (cost-step x2y1 x9y9) 2)
)
Как видите, я установил стоимость соединения между x1y1 и x2y1 равной 100, так что следует избегать подключения. Но Планировщик всегда создает решение, которое включает это соединение, а не находит путь с меньшими общими затратами. Планировщик Выход: Выходные данные планировщика снимков экрана Я новичок в PDDL и понятия не имею, что не так. Поэтому я разместил весь код ниже:
Домен:
;Header and description
(define (domain domain_name)
;remove requirements that are not needed
(:requirements :strips :typing :fluents :action-costs)
;(:requirements :strips :fluents :durative-actions :timed-initial-literals :typing :conditional-effects :negative-preconditions :duration-inequalities :equality)
(:types player field
)
; un-comment following line if constants are needed
;(:constants )
(:predicates
(on ?player - player ?loc - field)
(neighbor ?start - field ?end - field)
)
(:functions
(cost-total)
(cost-step ?from - field ?to - field)
)
(:action move
:parameters (?player - player ?from - field ?to - field)
:precondition (and
(on ?player ?from)
(neighbor ?from ?to)
)
:effect (and
(on ?player ?to)
(not (on ?player ?from))
(increase (cost-total) (cost-step ?from ?to))
)
)
)
Проблема:
(define (problem problem_name) (:domain domain_name)
(:objects x1y1 x1y2 x2y1 x1y3 x9y9 - field
runner - player
)
(:init
(neighbor x1y1 x1y2)
(neighbor x1y2 x1y3)
(neighbor x1y1 x2y1)
(neighbor x1y3 x9y9)
(neighbor x2y1 x9y9)
(on runner x1y1)
(= (cost-total) 0)
(= (cost-step x1y1 x1y2) 2)
(= (cost-step x1y2 x1y3) 2)
(= (cost-step x1y1 x2y1) 100)
(= (cost-step x1y3 x9y9) 2)
(= (cost-step x2y1 x9y9) 2)
)
(:goal (and
(on runner x9y9)
))
;un-comment the following line if metric is needed
(:metric minimize (cost-total))
)