没有允许启发式的最优搜索算法

时间:2016-02-03 13:51:54

标签: algorithm search a-star

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

我之前使用的是我被告知的A *算法来解决不同的问题。但是阅读它我已经意识到我所学到的并不是相当维基百科告诉我的。

我学到的是:

  • 从您的原始节点开始
  • 为您可以采取的每条路径打开新的解决方案
  • 递归地为您可以从那里获取的每个路径创建一个新的子解决方案
  • 当您使用多种解决方案抵达同一地点时,请删除花费时间超过最快的人

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

  • 从您的原始节点开始
  • 为您可以采取的每条路径打开新的解决方案
  • 按“路径成本”+“估算目标成本”
  • 订购解决方案
  • 采取最便宜的解决方案并为每条可能的路径创建子解决方案
  • 将这些溶液订购到其他溶液中,然后冲洗重复

我可以看到这对于不计算相当多的解决方案有什么帮助,但我的问题是我认为没有可能创建一个“乐观”的估计。

我不是在地理地图上搜索路径。我正在努力寻找最佳的行动顺序。 ABCDEFGH的最小序列是 - 比如说 - ABCDEFGH。你不能在E之前做F,但在特定的排序中重复先前的动作可能会使以后的行动更有效率。

我需要不同的搜索算法吗?我是否做了我最初学到的东西,并且认为做更多的工作是没有良好的启发式功能的代价?

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

1 个答案:

答案 0 :(得分: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开始的成本城市到C城的成本为C.

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

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

最后,这个修订后的A *的复杂性将会增长,直到它成为你的算法,其中每个状态都可能依赖于所有先前状态的序列。这越是真实,你的算法就越方便;每个州的成本越多,A *就越方便。

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