Artificial intelligence 什么';PDDL中链接和路径的区别是什么?
在PDDL中的driverlog域中,我们指定了链接和路径Artificial intelligence 什么';PDDL中链接和路径的区别是什么?,artificial-intelligence,planning,pddl,Artificial Intelligence,Planning,Pddl,在PDDL中的driverlog域中,我们指定了链接和路径 (define (domain driverlog) (:requirements :typing) (:types location locatable - object driver truck obj - locatable ) (:predicates (at ?obj - locatable ?loc - location) (in ?obj1
(define (domain driverlog)
(:requirements :typing)
(:types location locatable - object
driver truck obj - locatable
)
(:predicates
(at ?obj - locatable ?loc - location)
(in ?obj1 - obj ?obj - truck)
(driving ?d - driver ?v - truck)
(link ?x ?y - location) (path ?x ?y - location)
(empty ?v - truck)
)
在问题中定义它的方式是:
(define (problem DLOG-2-2-2)
(:domain driverlog)
(:objects
driver1 - driver
driver2 - driver
truck1 - truck
truck2 - truck
package1 - obj
package2 - obj
s0 - location
s1 - location
s2 - location
p1-0 - location
p1-2 - location
)
(:init
(at driver1 s2)
(at driver2 s2)
(at truck1 s0)
(empty truck1)
(at truck2 s0)
(empty truck2)
(at package1 s0)
(at package2 s0)
(path s1 p1-0)
(path p1-0 s1)
(path s0 p1-0)
(path p1-0 s0)
(path s1 p1-2)
(path p1-2 s1)
(path s2 p1-2)
(path p1-2 s2)
(link s0 s1)
(link s1 s0)
(link s0 s2)
(link s2 s0)
(link s2 s1)
(link s1 s2)
)
路径和链接之间有什么区别?我曾试图创造一个类似的问题,但忽略了路径,我不断得到无法解决的问题。如何正确定义路径
谢谢 这些是用户定义的谓词:
(define (domain driverlog)
...
(:predicates
...
(link ?x ?y - location) (path ?x ?y - location)
...
)
)
因此,可以通过检查相应的模型来推断它们的语义
link
和path
都是二进制谓词,它们将两个位置关联起来,大概是在可以从一个位置移动到另一个位置时。此连接是单向的
我从中了解到,定义了以下操作:
(:action DRIVE-TRUCK
:parameters
(?truck
?loc-from
?loc-to
?driver)
:precondition
(and (TRUCK ?truck) (LOCATION ?loc-from) (LOCATION ?loc-to) (DRIVER ?driver)
(at ?truck ?loc-from)
(driving ?driver ?truck) (link ?loc-from ?loc-to))
:effect
(and (not (at ?truck ?loc-from)) (at ?truck ?loc-to)))
(:action WALK
:parameters
(?driver
?loc-from
?loc-to)
:precondition
(and (DRIVER ?driver) (LOCATION ?loc-from) (LOCATION ?loc-to)
(at ?driver ?loc-from) (path ?loc-from ?loc-to))
:effect
(and (not (at ?driver ?loc-from)) (at ?driver ?loc-to)))
因此,如果可以将卡车从一个地方开到另一个地方,两个位置似乎有链接,如果可以从一个地方走到另一个地方,两个位置有路径
关于这件事真的没什么可说的了
之所以不断收到UNSAT
,是因为您将驾驶员和卡车放置在两个不同的位置:
由于s0
和s2
之间的唯一连接是链接,因此驾驶员不可能到达卡车(反之亦然)。这是因为DRIVE-TRUCK
的先决条件是(driving?driver?TRUCK)
,只有当驾驶员在卡车的同一位置时,才由车载卡车设置
您可以通过在s0
和s2
之间创建路径来解决此问题。然而,这似乎违反了模型的命名约定,模型仅使用链接互连sX
。更好的解决方案是更改初始状态,将卡车放置在每个驾驶员的相同位置,或者至少放置在行走
操作可以到达的位置
(at driver1 s2)
(at driver2 s2)
(at truck1 s0)
(at truck2 s0)