检查启发式方法是否兼容

check if heuristics is compatible

本文关键字:是否 启发式方法 检查      更新时间:2023-10-16

我知道兼容的启发式方法是在这些情况下的一种:h(n(< = c(n,a,n'( h(n'(。
和可允许的启发式方法处于状态:0< = h(n(< =实际成本。但是,我不知道该如何检查此启发式方法是否兼容:
一个经纪人住在NXN GRIDWORLD中。代理人的当前位置由代表行的元组(xa; ya(给出当前的列。代理想要达到的目标位置由元组(XG; YG(表示。代理只能一次向上移动,向下,左或右1平方。

h(a(=(xa -xg( (ya -yg(
我可以有一些提示吗?非常感谢。

对于*探路,据我所知,在您的情况下,出租车距离是一个很好的启发式。更多信息在这里:https://en.wikipedia.org/wiki/a* _search_algorithm。

编辑:正如@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*搜索算法,因此开始访问书籍并祝你好运!