我知道兼容的启发式是在这些条件下:
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)
我可以提供一些提示吗?非常感谢你。
答案 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,所以开始上书并祝你好运!