什么是启发式算法的具体示例(例如Alpha-beta剪枝,例如:井字游戏),以及它们在其中的应用。我已经看到了一个关于启发式算法的解释,但我还是不明白它是如何使用估计值的。你能否给我一个具体的启发式算法示例并说明其工作原理?
什么是启发式算法的具体示例(例如Alpha-beta剪枝,例如:井字游戏),以及它们在其中的应用。我已经看到了一个关于启发式算法的解释,但我还是不明白它是如何使用估计值的。你能否给我一个具体的启发式算法示例并说明其工作原理?
如果您想了解关于使用不同的启发式算法来寻找给定迷宫路径的应用,也可以查看this answer。
Warnsdorff's rule是一种启发式算法,但A*
搜索算法不是。正如其名称所示,它是一种搜索算法,不依赖于问题本身。而启发式算法则依赖于具体问题。例如:您可以使用A*
(如果正确实现)来解决十五数码难题和找到迷宫的最短路径,但使用的启发式将是不同的。对于十五数码难题,您的启发式可能是有多少个方块没有在正确位置上:解决难题所需的移动次数始终大于或等于启发式。
要走出迷宫,您可以使用曼哈顿距离到您知道在迷宫外的某个点作为启发式。曼哈顿距离在类似游戏的问题中被广泛使用,因为它是水平和垂直方向上到达目标所需的“步数”。
Manhattan distance = abs(x2-x1) + abs(y2-y1)
启发式只是实际成本的近似值(如果是可采纳的,则始终低于实际成本)。近似值越好,搜索算法要探索的状态就越少。但是更好的近似通常意味着更多的计算时间,因此你必须找到一个折衷的解决方案。
你的问题引起了我的兴趣,因为在我的学习过程中我也听说过启发式算法,但从未看到过它的应用。我进行了一些谷歌搜索,并找到了这个链接:http://www.predictia.es/blog/aco-search
这段代码模拟了一种“蚁群优化”算法来搜索网站。 “蚂蚁”是工人,他们将通过网站进行搜索,有些将随机搜索,而其他人将遵循先前确定的“最佳路径”。
这些启发式中的最后一个可能会导致蚂蚁行进优化:有半打参数可以从0调整到1,优化器可以找到这些参数的最佳组合。目前我只是手动改进了其中一些。
这些启发式中的第二个很有趣:它可以通过完整的深度优先搜索实现最优分数,但当然这个目标是不可能的,因为这需要太多时间。一般来说,增加X会导致更好的启发式,但会大大增加计算时间。
所以,这就是启发式的一些例子。只要它能帮助你的算法表现更好,任何东西都可以成为启发式,而这也是使它们如此难以掌握的原因:它们不是确定性的。关于启发式的另一个问题是:它们应该提供快速和肮脏的结果,而真正的东西则需要在执行时间和准确性之间进行权衡。
原始问题要求提供启发式算法的具体例子。
其中一些具体例子已经给出。另一个例子是15数码难题中错位方块的数量或其改进版曼哈顿距离,基于错位方块。
之前的回答中还声称启发式算法总是依赖于问题,而算法则是独立于问题的。当然,也有依赖于问题的算法(例如,对于每个问题,你都可以给出一个立即解决该问题的算法,例如任何汉诺塔问题的最优策略已知),但也有独立于问题的启发式算法!
因此,也有不同种类的独立于问题的启发式算法。因此,在某种程度上,每个这样的启发式算法都可以被视为具体的启发式算法示例,而不像15数码难题那样专门针对特定问题。(从规划中取出的独立于问题的启发式算法示例包括FF启发式或Add启发式。)
这些与问题无关的启发式方法基于通用描述语言,然后执行问题放松。也就是说,问题放松仅基于问题描述的语法(当然还有其底层语义),而不“知道”它代表什么。如果您对此感兴趣,应该熟悉“规划”,更具体地说是“启发式搜索规划”。我还想提到,尽管这些启发式方法是与问题无关的,但它们当然依赖于问题描述语言。(例如,我之前提到的启发式方法是针对“规划问题”的,即使对于规划,也有各种不同的子问题类别,具有不同类型的启发式方法。)