如果我没有使用正确的条款或忽略了现有的解决方案,请原谅我。我对搜索算法及其背后的理论没有经验。我只是想解决一个问题。
我之前使用的是我被告知的A *算法来解决不同的问题。但是阅读它我已经意识到我所学到的并不是相当维基百科告诉我的。
我学到的是:
现在,如果我正确理解维基百科,那就是我应该做的事情:
我可以看到这对于不计算相当多的解决方案有什么帮助,但我的问题是我认为没有可能创建一个“乐观”的估计。
我不是在地理地图上搜索路径。我正在努力寻找最佳的行动顺序。 ABCDEFGH的最小序列是 - 比如说 - ABCDEFGH。你不能在E之前做F,但在特定的排序中重复先前的动作可能会使以后的行动更有效率。
我需要不同的搜索算法吗?我是否做了我最初学到的东西,并且认为做更多的工作是没有良好的启发式功能的代价?
我相信我的老师认识到了这个问题。我学到的只是A *,其启发函数为f(n)= 0。
答案 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 *直接吹出水面。