检查启发式是否兼容

时间:2018-02-09 00:30:36

标签: c++ artificial-intelligence heuristics

我知道兼容的启发式是在这些条件下: h(n)&lt; = c(n,a,n&#39;)+ h(n&#39;)。和允许的启发式条件是:0 <= h(n)&lt; =实际成本。但是,我不知道如何检查这种启发式是否兼容:
代理人住在NxN gridworld中。代理的当前位置由表示行和的元组(Xa; Ya)给出 它当前所在的列。代理想要到达的目标位置由元组(Xg; Yg)表示。代理商只能 一次向上,向下,向左或向右移动1个方格。

h(a)=(Xa-Xg)+(Ya-Yg)
我可以提供一些提示吗?非常感谢你。

2 个答案:

答案 0 :(得分:2)

对于A *寻路,据我所知,出租车距离在你的情况下是一个很好的启发式。更多信息请点击此处:https://en.wikipedia.org/wiki/A*_search_algorithm

答案 1 :(得分:0)

编辑:正如@FeiXiang正确指出的那样,在您的情况下,您应该使用出租车距离也称为曼哈顿距离,其中唯一有效的移动是向上,向下,向左或向右。

如果(Xa, Ya)是您在网格中的当前位置Point a(Xb, Yb)是您的目的地Point b,那么您将计算曼哈顿距离,如下所示。

typedef std::pair<int, int> Point;
unsigned manhattanDistance(const Point &a, const Point &b)
{
    return abs(a.first - b.first) + abs(a.second - b.second);
}

互联网上有大量资源可以帮助A* search algorithm,所以开始上书并祝你好运!