【问题标题】:optimal search algorithm without admissible heuristic没有允许启发式的最优搜索算法
【发布时间】:2016-05-12 18:16:47
【问题描述】:

如果我没有使用正确的术语或忽略了现有的解决方案,请原谅我。我在搜索算法及其背后的理论方面没有经验。我只是想解决一个问题。

我之前曾使用我被告知的 A* 算法来解决不同的问题。但仔细阅读后,我意识到我所学到的并不是完全维基百科告诉我的。

我学到的是:

  • 从您的源节点开始
  • 为您可以采取的每条路径打开一个新的解决方案
  • 为您可以从那里采取的每条路径递归地创建一个新的子解决方案
  • 当您使用多种解决方案到达同一个地方时,放弃那些花费比最快解决方案更长的人

现在,如果我正确理解维基百科,这就是我应该做的:

  • 从您的源节点开始
  • 为您可以采取的每条路径打开一个新的解决方案
  • 按“路径成本”+“目标估计成本”对解决方案进行排序
  • 采用最便宜的解决方案并为每个可能的路径创建子解决方案
  • 将这些溶液依次放入其他溶液中,然后重复冲洗

我可以看到这将如何帮助不计算那么多解决方案,但我的问题是我看不到创建“乐观”估计的可能性。

我不是在地图上寻找路径。我正在尝试找到最佳的操作顺序。有一个最小的序列——比如说——ABCDEFGH。您不能在 E 之前执行 F,但以特定顺序重复先前的操作可能会使以后的操作更有效率。

我需要不同的搜索算法吗?我是否按照我最初所学的去做,只是接受这样一个事实,即做更多的工作是没有好的启发式函数的代价?

我相信我的老师已经意识到了这个问题。我学到的只是 A*,启发式函数 f(n) = 0。

【问题讨论】:

  • 没有可接受启发式的 A* 基本上是 BFS,在最坏的情况下它将探索所有可能的状态。会找到解决方案,但最坏的情况仍然是蛮力。

标签: algorithm search a-star


【解决方案1】:

我不是在地图上寻找路径。我试图找到 最佳动作顺序。有一个最小的序列 - 比如说 - ABCDEFGH。你不能在 E 之前做 F 而是重复前面的动作 特定的顺序可能会使以后的操作更有效率。

我不清楚您是否可以重复一个动作,即解决方案是 ABCDEFGH,但 ABBBBCDEFGH 可能吗?

如果没有,那么您也许可以使用 A* 算法,实现如下:

1. At some stage (say the first, "empty"), you have one of several actions
   available.
2. The cost of going from Empty City to A City is the cost of action A.

3. The cost of going from Empty City to B city is the cost of action B.

当您到达 B 时,执行 C 的成本是常数(如果不是,则您不能按原样使用 A*)并且您插入从 B 出发的成本City 到 C City 作为 C 的成本。

因此,您可以处理一个动作具有不同成本的情况,前提是这种差异完全由之前的状态描述。例如,如果你做了 A 或 B,你只能做 C,并且 C 的成本是 5 和 8,你输入 A 和 C 之间的“距离”为 5,输入 B 到 C 的“距离”为 8。

如果说 D 的成本取决于前两个状态,您仍然可以使用更复杂的 A* 实现,其中定义虚拟“城市”BC、AB 和 AC,从 BC 到 D 的距离为“D 完成 B 和 C 的成本”,等等。从 A 到达 BC 的成本是“B 给定 A 的成本,C 给定 A 和 B 的成本”。因此,如果这些成本取决于之前的状态,事情就会变得更加复杂。

最后,这个修订后的 A* 的复杂性会增加,直到它成为您的算法,其中每个状态都可能取决于所有先前状态的序列。越是这样,你的算法就越方便;每个状态对自身的成本越高,A* 就越方便。

当然,闭环的可能性(访问相同的状态/动作两次,使其成为循环图)将 A* 直接从水中吹出来。

【讨论】:

  • 这肯定会是一个可能相当复杂的自定义成本计算。我可以处理那部分。我只是想知道当我没有真正的启发式函数时,我是否用 A* 押错了马。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-12
  • 1970-01-01
  • 2021-02-11
  • 2010-12-07
  • 2019-07-28
  • 1970-01-01
相关资源
最近更新 更多