我目前正在尝试从目标状态进行回归搜索,以找出将为我的 GOAP 规划器实现目标状态的操作列表。到目前为止,我所记录的伪代码如下所示:
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]);
}
}
}
}
}
}
我听说 GOAP 与 A* 算法完全一样,只是节点是状态,边是动作。但是由于在 A* 中,节点不需要满足任何条件,这让我很困惑如何调整 A* 算法以处理先决条件。我正在努力理解的是如何存储动作并比较动作的成本以找到最有效的路径。如果我们假设类动作有一个函数 getCost() 返回动作的成本,那么在考虑先决条件时我将如何处理?