首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何适应GOAP AI模型中“目标”的变化?

如何适应GOAP AI模型中“目标”的变化?
EN

Stack Overflow用户
提问于 2021-08-20 10:02:03
回答 1查看 60关注 0票数 0

比如说,代理人想要执行一系列行动,要求不同的“目标”(捡起一件物品,吃一份食物等)。我们选择实现这一点的方式是,每个代理将其当前目标存储为一个字段,然后该字段可以表示为键值状态(以及其他状态),然后提供给GOAP规划者。

如果一系列操作要求代理人先吃蘑菇m,然后拿起一把剑s,问题就出现了。理想情况下,规划者可能会找到一条类似于此的操作路径:

找到m ->到m ->接m ->吃m ->找到s ->去s ->拾取s

当然,我们希望尽可能地概括我们的操作,因此我们当前的设计中有一些操作,比如goTo、pickUp、eat等等,这些操作都是广义的,可以简单地信任前面的"locate“操作来定位有效的目标。

换句话说,定位x将具有target == x的承诺状态,而像goTo这样的动作将具有所需的hasTarget == true状态和承诺状态isNearTarget == true。为pickUp提供了类似的“通用”需求和目标集。接下来,eat操作将具有类似于holdingTarget == truetarget == Food的需求,同时在食物被消耗后将目标设置为null。

那么,最大的问题是,当我被吃掉时会发生什么?规划师怎么知道下一步要找的是一把剑,而不是别的东西?如何才能在GOAP州中以确保下列行为符合预期的方式来表示这一点?

提出的一个想法是将行动分为三类:

  • 指定-承诺将目标设置为某一事物(即locateFood)的动作
  • 中介--做出广义目标承诺的行为(即goTo)
  • 终端-“消耗”目标的动作,取消目标(即吃)

然后,这种方法带来了一个问题,即知道什么是终结的,哪些不是终结的,这本身就像是一个讨厌的问题。

如果这太抽象,太难理解,我很抱歉--我试图把这个问题从我们的特定代码中概括出来,因为我不认为它是特定于我们的实现的东西,但很可能是我们对状态应该如何在GOAP中被表示的误解。我可以提供代码以及任何必要的澄清。

EN

回答 1

Stack Overflow用户

发布于 2021-12-22 17:26:51

首先,如果你展示了一些代码,那就太好了。第二,我希望你已经看过这个goap演示

这应该能回答你的问题。在采取行动之前必须满足先决条件。举个例子,如果你要求人工智能在拿剑之前吃下木屋m,我会这样做:

吃蘑菇动作:效果:"mushroomEaten“==真

拾剑行动:前提条件:如果"mushroomEaten“==真

然后

效果:"goPickUpSword“

我必须加以概括,因为您的问题也是一般性的,没有给出具体的代码示例。查看提供的链接,您将了解如何将操作链接在一起以完成目标。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68860422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档