关于优化:在模拟中优化决策的最佳算法

Best algorithm for optimizing the decisions in a simulation

我正在寻找最佳算法来优化同时做出的决策,以便在合理的时间内找到快速的结果。 simultaion 做了许多"滴答",偶尔需要做出决定。最终达到目标状态。 (如果您做出非常糟糕的决定,可能永远无法达到目标状态)

有很多很多目标状态。我想以最少的滴答声找到目标状态(一个滴答声大致相当于现实生活中的一秒。"我基本上想决定在尽可能短的时间内达到目标的决定,

关于问题域的几点说明:

  • 我可以立即产生一系列选择,这些选择将导致解决方案。它不会是最佳的。
  • 我有一个合理的启发式函数来确定什么是一个好的决定
  • 我有一个合理的函数来确定从节点到目标的最小可能时间成本。

算法:

  • 我需要处理这个问题大约 10 秒钟,然后给出我能给出的最佳答案。
  • 我相信 A* 会为我找到最佳解决方案。问题是决策树太大了,我无法足够快地计算它。
  • IDA* 会在 10 秒内给我很好的前几个选择,但我需要一条通向目标的路径。

目前我正在考虑从已知的非最佳目标路径开始,然后可能使用模拟退火并尝试在 10 秒内改进它。

为了解决这类问题,有什么好的算法可以研究?


看看有限差异搜索,在最大差异搜索或光束搜索上以越来越宽松的限制重复。

如果您有一个很好的启发式算法,您应该能够使用它来比较个人选择 - 用于有限差异搜索,并比较部分解决方案,用于光束搜索。

看看你是否可以为部分解决方案的任何扩展设置一个上限。然后,您可以剪除部分解决方案,这些解决方案可能无法扩展以击败启发式方法的结果,或者是迄今为止在一系列迭代搜索中找到的最佳结果,深度不断增加。


让我们弄清楚一些事实。

1) 确定哪个决策最好的唯一方法是测试每个可能的决策并根据某些标准评估结果。

2) 我们极不可能有时间来决定通过每一个可能的决定,因此我们必须限制我们在未来多长时间内评估该决定。

3) 我们不太可能做出有史以来最好的举动。不只是经常,而是永远。除非您只有几个决定,否则每次您做出决定时,都会有一个更好的决定,而您却没有做出决定。

4) 我们可以利用我们之前的决定如何发挥作用。

把所有这些放在一起......假设当我们做出决定时,我们评估未来 30 个滴答声会发生什么,在 30 个滴答声中,我们可以检查实际发生的事情是否与我们在 30 个滴答刻前模拟的相符.如果是这样,我们知道该决定会导致可预测的结果,我们应该更少使用该决定。如果我们没有这样做,或者结果比我们希望的要好,我们应该更多地使用这个决定。

理想情况下,您可以在...模拟您的模拟...中使用您的逻辑来评估它。然后,当您进行"真实"模拟时,您就有更好的机会更早地做出更好的决定。当然,与模拟的模拟结果相比,给实际模拟结果的结果赋予更高的权重。