我需要在PDDL中创建一个计划,访问n个地点的一个子集,每个地点都有一个分数。我需要最大化效用,效用定义为每个分数的总和。我如何在PDDL中表示这个领域?具体来说,我如何存储每个地点的分数?
回答:
我假设你熟悉动作成本和计划指标。如果不是,请在评论中说明。
我想,最简单的方法可能是通过动作成本来实现。需要解决的问题是,在你的情况下,计划的质量与执行计划后访问的地点相关,因此它不直接与你执行的动作的成本相关,而是与你产生的状态变量相关。假设每次执行一个导致代理访问某个位置的动作时,你都会提高计划的质量,那么你可能会得到错误的计划质量,因为你可以多次访问同一个位置。然而,你可以按以下方式解决这个问题:
你只需添加一个增加计划质量的动作increase-plan-quality(?location),形式如下:(1) 在每个位置上只能执行一次(2) 在每个位置上,只有当代理当前位于该位置时才可执行(3) 效果是通过该位置的分数增加计划的质量
然后,你只需要将计划指标设置为最大化即可,完成。
为什么这有效?(A) 如果你的代理在一个位置上,最大化指标会导致规划器应用增加质量的动作(由于(2),该动作是可应用的)(B) 这些额外的动作不会产生错误的计划质量,因为由于(1),每个这样的动作在每个位置上只能应用一次。唯一可能发生的情况是你已经访问了一个位置,但规划器没有应用增加计划质量的动作(尽管它可以这样做)。但这是规划器的选择,我想这不太可能发生。
另一种可能性是依赖所谓的状态依赖动作成本。但这个概念相当新(如果我记得正确的话,大约两年),所以我想只有有限数量的规划器可以处理它们,我还假设需要一个专门的语法,这不是标准PDDL规范的一部分。