Artificial intelligence 当从目标回归规划时,我如何在GOAP中加入变量?

Artificial intelligence 当从目标回归规划时,我如何在GOAP中加入变量?,artificial-intelligence,planning,Artificial Intelligence,Planning,我正在阅读以下资源: 这是: 我用*做了一个向前搜索计划;但我现在正试图向后搜索效率收益 奥金特别说 图2中所示的规划示例由具有常数的操作组成 先决条件和效果的布尔值,但需要指出的是 前提条件和效果也可以用变量表示。规划者解决这些问题 从目标回归时的变量。变量为计划器增加了力量和灵活性, 因为它现在可以满足更一般的先决条件。例如,使用 将角色移动到可变目的地的效果要比Goto强大得多 移动到固定的预定位置的动作 因此,在实施之前,我并没有试图将其可视化;但我无法解决如何解决远离需要的变量:

我正在阅读以下资源:

这是:

我用*做了一个向前搜索计划;但我现在正试图向后搜索效率收益

奥金特别说

图2中所示的规划示例由具有常数的操作组成 先决条件和效果的布尔值,但需要指出的是 前提条件和效果也可以用变量表示。规划者解决这些问题 从目标回归时的变量。变量为计划器增加了力量和灵活性, 因为它现在可以满足更一般的先决条件。例如,使用 将角色移动到可变目的地的效果要比Goto强大得多 移动到固定的预定位置的动作

因此,在实施之前,我并没有试图将其可视化;但我无法解决如何解决远离需要的变量:

        KEY             CURRENT     GOAL

    itemStockpiled      false       true
    ------------------------------------------

                StockpileItem       Effect:     itemStockpiled true
                                    Precond:    hasItem ?itemId?     **** How can I test this?
                                                agentAtPosition ?stockPos?

    itemStockpiled      true        true
    hasItem             0           ?itemId?
    agentAtPosition     ???         ?stockPos?
    ------------------------------------------

                Goto                Effect:     agentAtPosition ?stockPos?  **** Where is this?

    itemStockpiled      true        true
    hasItem             0           ?itemId?
    agentAtPosition     ?stockPos?  ?stockPos?
    ------------------------------------------

                PickupItem          Effect:     hasItem ?itemId?
                                    Precond:    agentAtPosition ?itemPos?

    itemStockpiled      true        true
    hasItem             ?itemId?    ?itemId?
    agentAtPosition     ?stockPos?  ?itemPos?      **** So we need to go 
                                                   back to the item from
                                                   the stockpile pos
    ------------------------------------------

                Goto                Effect:     agentAtPosition ?itemPos?    **** Where is this?
                                    Precond:    foundItem true

    itemStockpiled      true        true
    hasItem             ?itemId?    ?itemId?
    agentAtPosition     ?itemPos?  ?itemPos?
    foundItem           false       true
    ------------------------------------------

                FindItem            Effect: foundItem true

    itemStockpiled      true        true
    hasItem             ?itemId?    ?itemId?
    agentAtPosition     ?itemPos?  ?itemPos?
    foundItem           true       true
    ------------------------------------------
你会在上面的评论中看到,在我还不知道在哪里找到路径之前,我不明白如何检查路径的存在性。对于项目,我可以使用布尔标志“hasItem”,并跟踪变量中的项目ID,直到
FindItem
成功(然后在执行路径时使用),该变量才会填充;但是,如果执行
GoTo
操作,这将如何工作

如果我使用世界状态变量“agentaposition”作为
Goto
的效果;将在计划中的两个不同点设置;这意味着需要“AgentPosition”为真的后续行动将已经满足其先决条件,从而有效地结束计划,错误地认为它找到了一条路径:

        KEY             CURRENT     GOAL

    itemStockpiled      false       true
    ------------------------------------------

                StockpileItem       Effect:     itemStockpiled true
                                    Precond:    hasItem true
                                                agentAtPosition true

    itemStockpiled      true        true
    hasItem             false       true
    agentAtPosition     false       true
    ------------------------------------------

                Goto                Effect:     agentAtPosition true

    itemStockpiled      true        true
    hasItem             false       true
    agentAtPosition     true        true
    ------------------------------------------

                PickupItem          Effect:     hasItem true
                                    Precond:    agentAtPosition true

    itemStockpiled      true        true
    hasItem             true        true
    agentAtPosition     true        true
    ------------------------------------------

我该如何解决这个问题呢?

看来GOPA是这样的:。 我会把参考资料联系起来

我不明白你想做什么,也不明白你引用的“Orkin”(我不知道)一段话。然而,这部分只是一种直觉:

变量为规划器增加了力量和灵活性,因为它现在可以满足更一般的先决条件

必须区分改变问题和改变解决方案。如果实现了A*正向搜索算法,则实现完全回归就是实现过状态s的回归操作:必须在s之前出现的部分状态s’如下所示: -A的先决条件在s中是正确的 -A的效果与s一致 -A与从s到s相关。如果没有否定的先决条件,那么在add(A)中至少有一个p不在s'中,但在s中

现在,“添加变量”听起来像是重新表述问题。在这种情况下,主要问题是: -那是不是重新制定的方案保留了所有的路径? 如果没有,它应该以精确的方式合并一些路径。否则,这不是一个重新制定的方案

因此,第一个问题不是关于向前或向后搜索,而是关于确认可能的路径。如果可能的路径是正确的,那么回归应该是可行的

除非你真的想做一些更聪明的事情,比如在必要的时候不包围对象

我建议首先关注一个更简单的版本,在这个版本中标准回归是有意义的,然后再重新审视你想要做的事情