【问题标题】:check if heuristics is compatible检查启发式是否兼容
【发布时间】:2018-07-19 16:48:09
【问题描述】:

我知道兼容的启发式是在这些条件下: h(n) 并且可接受的启发式条件是:0 代理生活在 NxN 网格世界中。代理的当前位置由表示行的元组 (Xa; Ya) 给出,并且 它当前所在的列。代理想要到达的目标位置由元组 (Xg; Yg) 表示。代理只能 一次向上、向下、向左或向右移动 1 个方格。

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

【问题讨论】:

  • 这是用于 A* 寻路算法的吗?
  • 是的,这是用于 A* 寻路
  • 老实说,查找一个用 C++ 完成的简单 A* 并从中学习更容易。您对事物的高级描述只会混淆我认为的工作。

标签: c++ artificial-intelligence heuristics


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    编辑:正如@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 的帮助,所以开始阅读书籍吧,祝你好运!

    【讨论】:

    • 在他的问题中,唯一可能的移动是向上、向下、向左和向右。所以出租车距离比欧几里得距离更好。顺便说一句,您不需要取绝对值,因为您会立即将值平方。
    猜你喜欢
    • 2015-05-10
    • 2012-04-18
    • 2015-10-14
    • 2020-01-19
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多