Семантика условия over all
действительно такая, как говорит @haz в своем ответе (это не позволяет планировщику планировать другое действие параллельно с вашим действием move
, которое нарушило бы условие over all
), но я думаю, что вас смущает разница между планированием и план выполнения. Во время выполнения плана (charge_level)
может неожиданно упасть ниже 12
в любой момент из-за неисправной батареи, неисправного датчика и т. д. В таком случае выполнение вашего плана должно остановить действие move
(и, следовательно, весь план) и перепланировать. В этот момент планировщик может выбрать любое действие, предварительное условие которого удовлетворяется в этом новом состоянии. Так что не обязательно at start (< (charge_level) 12)
.
Планировщик не может остановить или приостановить длительное действие PDDL во время расчета плана. Однако, если вы сообщите планировщику, как (charge_level)
меняется с течением времени, он может вычислить максимально возможную продолжительность действия move
, а затем сделать что-то еще, например. перезарядите аккумулятор, прежде чем запланировать еще один экземпляр действия move
в том же плане. В этом подходе нет никаких неудач, просто рассуждение о том, как долго может длиться данное действие, чтобы достичь цели, не нарушая никаких ограничений, включая over all
условий.
Если это поведение, которое вы хотите, вам нужно будет смоделировать (charge_level)
как постоянно меняющуюся функцию. Если вы хотите увидеть пример, вот генератор энергии или кофемашина. Вот взгляд из домена генератора:
В генераторе не должно заканчиваться топливо:
(over all (>= (fuel-level ?g) 0))
Топливо уменьшается на 1
единиц каждые #t
единиц времени.
(decrease (fuel-level ?g) (* #t 1))
Учитывая начальное (fuel-level)
, вычислить максимальную продолжительность действия несложно. Для этой гибкости вам нужно указать продолжительность действия без ограничений :duration (>= ?duration 0)
, как в кофемашина.
Теперь, чтобы иметь возможность обрабатывать такую модель, включая непрерывные числовые эффекты, вам нужно нужен планировщик, поддерживающий требование :continuous-effects
, например OPTIC или POPF.
person
Jan Dolejsi
schedule
25.09.2020