启发式的具体例子

时间:2011-12-09 12:42:35

标签: algorithm artificial-intelligence heuristics

启发式的具体例子是什么(例如Alpha-beta修剪,例如:tic-tac-toe以及它是如何适用的)。我已经看到了一个关于什么是启发式的回答问题,但我仍然没有得到它使用估计的东西。你能给我一个启发式的具体例子以及它是如何工作的吗?

6 个答案:

答案 0 :(得分:4)

最具说明性的是在知情搜索算法中使用启发式算法,例如A-Star。对于实际问题,您通常会有大的搜索空间,因此无法检查它的每个部分。为了避免这种情况,即首先尝试搜索空间中最有希望的部分,可以使用启发式算法。启发式算法可以估计可用的后续搜索步骤有多好。您将选择最有希望的下一步,即best-first。例如,如果您想要搜索两个城市之间的路径(即顶点,由一组道路连接,即形成图形的边缘),您可能希望选择到目标的直线距离作为启发式确定首先访问哪个城市(并查看它是否是目标城市)。

启发式应该具有与metrics类似的搜索空间属性,它们通常应该是乐观的,但这是另一个故事。提供有效且无副作用的启发式问题是另一个问题......

如果使用不同的启发式方法来查找通过给定迷宫的路径,请查看this answer

答案 1 :(得分:4)

Warnsdorff's rule是一种启发式方法,但A*搜索算法却不是。{顾名思义,它是一种搜索算法,它不依赖于问题。启发式是。一个例子:您可以使用A*(如果正确实施)来解决十五个谜题并找到迷宫中最短路的方法,但使用的启发式方法会有所不同。使用十五个谜题你的启发式可能是多少个瓷砖不合适:解决谜题所需的移动次数总是大于或等于启发式。

为了摆脱迷宫,你可以使用曼哈顿距离到你知道在迷宫之外的点作为你的启发式。曼哈顿距离广泛用于类似游戏的问题,因为它是达到目标所需的水平和垂直“步数”。

Manhattan distance = abs(x2-x1) + abs(y2-y1)

很容易看出,在最好的情况下(没有墙壁)与目标的确切距离,在其余部分你需要更多。这很重要:您的启发式必须乐观admissible heuristic),以便您的搜索算法是最佳的。它也必须是consistent。但是,在某些应用程序(例如具有非常大的地图的游戏)中,您使用不可接受的启发式算法,因为次优解决方案就足够了。

启发式只是实际成本的近似值(如果允许的话,总是低于实际成本)。近似越好,搜索算法必须探索的状态越少。但更好的近似通常意味着更多的计算时间,因此您必须找到妥协的解决方案。

答案 2 :(得分:1)

你的问题让我很感兴趣,因为我在学习期间也听说过启发式,但从未看过它的应用程序,我用Google搜索了一下,发现:http://www.predictia.es/blog/aco-search

此代码模拟“蚁群优化”算法以搜索网站。 “蚂蚁”是通过网站搜索的工作人员,有些人会随机搜索,有些人会遵循之前确定的“最佳路径”。

答案 3 :(得分:1)

一个具体的例子:我一直在为游戏JT's Block做一个求解器,它大致相当于Same Game。该算法对所有可能的命中执行广度优先搜索,存储值,并执行到下一层。问题是可能的命中数快速增长失控(每场比赛估计10e30个位置),因此我需要在每个回合中修剪位置列表,并且只选择其中的“最佳”。

现在,“最佳”位置的定义非常模糊:它们是预期会获得最佳最终得分的位置,但没有什么是肯定的。这里有启发式方法。我尝试过其中一些:

  • 按目前获得的分数排序位置
  • 通过x深度搜索获得的最佳分数增加分数
  • 使用瓷砖的数量,颜色及其接近度,根据复杂的公式提高分数
  • 通过调整参数并查看其执行方式来改进最后一次启发式
  • 等...

这些启发式算法中的最后一个可能会导致一个ant-march优化:有六个参数可以从0调整到1,优化器可以找到这些参数的最佳组合。目前我只是手动改进其中一些。

这个启发式的第二个很有意思:它可以通过完全深度优先搜索获得最佳分数,但是这样的目标当然是不可能的,因为它需要花费太多时间。通常,增加X可以获得更好的启发式算法,但会大大增加计算时间。

这就是启发式的一些例子。任何东西都可以是启发式的,只要它能帮助你的算法更好地运行,而这就是让它们难以掌握的原因:它们不是确定性的。启发式的另一点是:它们应该导致真实内容的快速和肮脏的结果,因此它们的执行时间和准确性之间存在交易。

答案 4 :(得分:0)

一些具体的例子:为了解决Knight's Tour问题,可以使用Warnsdorff's rule - 一种启发式方法。或者,为了解决Fifteen puzzle,可能的启发式是A* search algorithm

答案 5 :(得分:0)

原始问题要求启发式具体示例

已经给出了一些具体的例子。另一个是15拼图中错位的拼块数量或其改进,曼哈顿距离,基于错位的拼贴。

之前的答案之一还声称,启发式方法总是依赖于问题,而算法则与问题无关。当然,还有与问题相关的算法(例如,对于每个问题,你只需要提供一个能够立即解决这个问题的算法,例如任何已知的河内问题的最佳策略),也有与问题无关的启发式

因此,还存在不同类型的与问题无关的启发式方法。因此,以某种方式,每个这样的启发式都可以被视为具体的启发式示例,而不是针对像15拼图这样的特定问题。 (从规划中获取的与问题无关的启发式算法的例子是FF启发式或添加启发式。)

这些与问题无关的启发式算法基于一般描述语言,然后他们执行问题放松。也就是说,问题放松仅基于问题描述的语法(当然,它的基础语义)而不“知道”它代表什么。如果您对此感兴趣,您应该熟悉“规划”,更具体地说,“规划为启发式搜索”。我还想提一下,这些启发式算法虽然与问题无关,但当然依赖于问题描述语言。 (例如,我之前提到的启发式算法特定于“规划问题”,甚至在规划时,还有各种不同的子问题类,具有不同的启发式。)

相关问题