Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 回归目标导向行动计划_Algorithm_Artificial Intelligence_Regression_Depth First Search_Planning - Fatal编程技术网

Algorithm 回归目标导向行动计划

Algorithm 回归目标导向行动计划,algorithm,artificial-intelligence,regression,depth-first-search,planning,Algorithm,Artificial Intelligence,Regression,Depth First Search,Planning,我目前正在尝试从目标状态进行回归搜索,为我的GOAP planner找出将实现目标状态的行动列表。到目前为止,我写下的伪代码是这样的: closedList = list; s = stack; s.push(goal); while(s.size() > 0) { state = s.pop; if(!state exists in closedList) { closedList.add(state); for(action =

我目前正在尝试从目标状态进行回归搜索,为我的GOAP planner找出将实现目标状态的行动列表。到目前为止,我写下的伪代码是这样的:

closedList = list;
s = stack;
s.push(goal);
while(s.size() > 0)
{
    state = s.pop;
    if(!state exists in closedList)
    {
        closedList.add(state);
        for(action = firstAction; action != lastAction; action = nextAction)
        {
            if(action.getEffect() == state)
            {
                if(!action.ConditionsFulfilled())
                {
                    conditionList = action.getConditions;
                    for(i = 0; i < conditionList.size(); i++)
                    {
                        s.push(conditionList[i]);
                    }
                }
            }
        }
    }
}
closedList=列表;
s=堆栈;
s、 推动(目标);
而(s.size()>0)
{
state=s.pop;
如果(!状态存在于closedList中)
{
closedList.add(状态);
for(action=firstAction;action!=lastAction;action=nextAction)
{
if(action.getEffect()=状态)
{
如果(!action.ConditionsFulfilled())
{
conditionList=action.getConditions;
对于(i=0;i
我听说GOAP完全像A*算法,只是节点是状态,边是动作。但由于在A*中,节点没有任何必须满足的条件,因此我对如何使A*算法适应先决条件感到困惑。
我很难理解的是如何存储操作并比较操作的成本,以便找到最有效的路径。如果我们假设类操作有一个函数getCost(),它返回操作的成本,那么在考虑前提条件时,我该如何处理这个问题呢?

节点确实是世界状态。 边缘就是行动。但请注意,它们是定向边

如果有先决条件: 它们确定哪些边(动作)流出节点。 只有满足其先决条件的操作才是退出该状态节点的有效边

因此,要查找节点的邻居,您需要检查每个操作是否满足所有先决条件。如果是,请应用后置条件以查看操作将导致的节点。然后,该操作是这些状态(节点)之间的有效边

请参阅开源(面向目标的通用行动规划)以了解GOAP的实施情况。用C语言编写的代码解释了所有步骤。我是GPGOAP的作者

回归思考

现在是回归部分:我从未实现过从目标到当前世界状态的反向搜索。所以我在这方面的帮助有限

两个相邻节点仍将基于一个动作进行连接。现在,启用/禁用边不是基于操作的前提条件,而是基于操作的后条件。如果post条件与当前节点不匹配,则该操作将无效。如果是这样,我希望您通过强制操作的前提条件来添加邻居


你为什么喜欢向后搜索而不是向前搜索?

谢谢,我没有这么想。现在完全有意义了。向后搜索更有效。杰夫·奥金(Jeff Orkin)在一篇文章中简要地谈到了这一点:我成功地进行了回归搜索。现在我正在寻找正确的方法来改变动作的前提条件。你好,过了一会儿我又回到了这个项目。我以前没能解决这个问题。我现在的问题是在检查前提条件的同时进行广度优先搜索。如果我在目标上,并且我有实现该目标的优势(我所说的目标是指我们正在检查的当前状态),我如何确保一项行动能够进一步满足其先决条件?广度优先搜索如何确保树下的边缘有效?更新:我在做堆栈而不是优先级队列,我只是在脑子里把事情搞糊涂了。使用优先级队列后,一切都很简单,就像您描述的那样。非常感谢。