- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
据我了解,对于给定的评估节点,启发式算法的可接受性保持在“距离的实际成本”的范围内。我不得不为状态空间上的 A* 解决方案搜索设计一些启发式方法,并且使用有时可能返回负值的启发式方法获得了很多积极的效率,因此使某些节点与目标更“紧密地形成”国家在边疆的地位更高。
但是,我担心这是 Not Acceptable ,但无法在网上找到足够的信息来验证这一点。 I did find this one paper from the University of Texas这似乎在后来的证明之一中提到“......因为启发式函数是非负的”。任何人都可以证实这一点吗?我认为这是因为返回负值作为您的启发式函数会使您的 g-cost 变为负值(因此会干扰 A* 的“默认”dijkstra-esque 行为)。
最佳答案
结论:产生负值的启发式函数本身并不是 Not Acceptable ,但有可能破坏 A* 的保证。
有趣的问题。从根本上说,可接受性的唯一要求是启发式算法永远不会高估到目标的距离。 这很重要,因为在错误的地方高估可能会人为地使最佳路径看起来比另一条路径更糟糕,并阻止它被探索。因此,可以提供高估的启发式方法失去了对最优性的任何保证。 低估不会带来相同的成本。 如果您低估了朝着某个方向前进的成本,最终边权重的总和将大于朝着不同方向前进的成本,因此您也将探索该方向。唯一的问题是效率的损失。
如果您的所有边都有正成本,负启发式值只能是低估。 从理论上讲,低估只会比更精确的估计更糟糕,因为它提供的有关路径潜在成本的信息非常少,并且可能导致更多节点被扩展。尽管如此,它不会被拒绝。
但是,这里有一个示例说明 理论上,负启发式值可能会破坏 A* 的保证最优性:
在这个图中,通过节点 A 和 B 显然更好。这将有 3 个成本,而不是 6 个,这是通过节点 C 和 D 的成本。但是,C 和 D 的负启发式值D 将导致 A* 在探索节点 A 和 B 之前通过它们到达终点。本质上,启发式函数一直认为这条路径会变得更好,直到为时已晚。在 A* 的大多数实现中,这将返回错误的答案,尽管您可以通过继续探索其他节点来纠正此问题,直到 f(n) 的最大值大于您找到的路径的成本。请注意,此启发式没有任何 Not Acceptable 或不一致的地方。我真的很惊讶非负性没有更频繁地被提及作为 A* 启发式的规则。
当然,这表明您不能随意使用返回负值的启发式方法而不用担心后果。尽管是负面的,但对于给定问题的给定启发式算法恰好能很好地解决问题,这是完全有可能的。对于您的特定问题,不太可能发生这样的事情(我发现它对您的问题非常有效,并且仍然想更多地考虑为什么会这样,这真的很有趣)。
关于a-star - 产生负值的启发式函数是否 Not Acceptable ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30067813/
场景: Suppose I have a large pseudorandom graph complete with edge weights, but without any coordinate
我有一个巨大的人名列表,我必须在巨大的文本中进行搜索。 只有名称的一部分可以出现在文本中。并且可能存在拼写错误、打字错误或缩写。文本没有标记,因此我不知道文本中人名的开头位置。我不知道这个名字是否会出
我在尝试总结这些启发式算法的最坏情况比率时遇到了一些麻烦(这意味着它满足三角不等式)旅行商问题: 最近的邻居 最近的插入 最便宜的插入 最远插入 最近的邻居: Here它表示 NN 的 w-C 比率为
我正在为 2048 开发一个 AI。到目前为止它非常简单,我基本上是在尝试制作一个由递减方 block 组成的“蛇”,所以完美的游戏应该是这样的: ,虽然这和这个一样好: . 我的启发式方法是使用一个
我从 stdin 中读取了一个正整数 N,然后我试图确定 N 是否是素数。 我知道我可以将 N 除以所有正数直到 sqrt(N),但这很耗时,而且我的算法有时会给出误报,所以我正在寻找一种启发式方法来
我对高估/低估这两个术语感到困惑。我完全了解 A* 算法的工作原理,但我不确定高估或低估启发式算法的效果。 取直接鸟瞰线的平方是否高估?为什么它会使算法不正确?所有节点都使用相同的启发式。 直接鸟瞰线
我有一个问题,由一个有墙、目标和代理的方形迷宫组成。代理只能水平/垂直移动。在每一步,每个智能体从 1 个方格移动。 我必须实现 A* 算法来解决问题,但我很难找到一个很好的启发式算法来解决它。 每次
首先,我看到了这个答案,是的,它解释了 X-Y 启发式算法,但是示例板太简单了,我无法理解一般的启发式算法。 X-Y heuristic function for solving N-puzzle 有
我正在尝试为清晰 map 的吃 bean 人游戏想出一个又好又快的启发式方法。 我的启发式方法是尝试计算吃 bean 人到达 map 上每个有食物的点所需的最小可能距离。我当前的算法基本上是 Prim
我只是玩弄 Python 并发现了一件有趣的事情:我的计算机(i5,3 GHz)在尝试计算 10 ** 10 ** 10 几个小时后就停止运行了。我知道数学不是创建 Python 的目的,但我想知道是
我理解杀手启发式背后的想法以及它为什么有帮助。我正在努力解决的是如何在 Alpha-Beta 搜索例程中实现它。特别是如何保证只先尝试兄弟节点的杀手级 Action ?伪代码会有很大帮助。 最佳答案
我已经实现了 Clarke-Wright 启发法来解决 TSP(基于伪代码 here )。我已附上我在 Matlab 中的实现。然而,它对我来说不够快,并且需要 O(n2) 空间(因为成对距离)。我想
我是一名优秀的程序员,十分优秀!