用什么算法来计算建造建筑物的最快订单?

时间:2016-02-01 20:44:55

标签: algorithm

对于我正在玩的游戏,我想知道建造一些建筑物的最快订单。有问题的游戏是OGame,如果你熟悉它,那么这是一个加分,但显然我会解释游戏的基础知识:

  • 玩家可以使用多种差异资源。
  • 玩家可以建造建筑物,一次最多建造一座建筑物。
  • 建筑物具有不同的级别,例如建筑物A级别1,建筑物A级别2等等
  • 建造建筑物的资源成本每级增加。
  • 建筑物也需要建造时间,每个级别也会增加。
  • 一些建筑物产生不同的资源,每个级别也会增加。
  • 一些建筑改变了计算,使建筑物的建造更快。

我已经明确选择不显示方程式,因为它们不是直截了当的,不需要建议算法。

我选择使用以下操作对此进行建模:

  • StartUpgradeBuildingAction :此操作通过从可用资源中减去费用来启动升级过程。
  • FinishUpgradeBuildingAction :此操作通过及时完成升级过程。这也产生了资源。
  • WaitAction :此操作将时间转发X秒,同时根据资源生成生成资源。

应该注意的是,状态空间是无限的,并且可以通过以下事实来表征:最终配置有多条路径(所有请求的建筑物都已建成),每条路径可能有不同的时间和不同的时间最终你最终得到的资源量。现在我最感兴趣的是最快的路径(顺序),如果有多个相等的路径,那么成本最低的路径应该是首选。

我已经尝试过以下方法:

  • 广度优先搜索
  • 深度优先搜索
  • Iterative Deepening Depth-First Search
  • Iterative Deepening A * Search
  • A *搜索

不幸的是,所有这些算法要么花费太长时间,要么使用太多内存。

由于谷歌搜索没有给我任何进一步的线索,我在这里提出以下问题:

  • 是否存在与我的问题相符的现有模型?我认为商业信息系统已经遇到过这种类型的问题。
  • 是否存在可提供最佳解决方案的算法?如果是这样,哪一个?
  • 是否有算法可以提供接近最佳解决方案的解决方案?如果是这样,哪一个?

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

没有一种算法可以为您的问题提供最佳解决方案。你尝试的方法都是合理的。然而,尝试A *搜索并不意味着很多,因为A *搜索依赖于评估特定配置的启发式方法(即,它为所构建的建筑物的时间,数量和选择的组合分配值,可用资源等)。有了良好的启发式,A *搜索可能会让您快速找到一个非常好的解决方案。找到这种启发式方法需要对参数有很好的了解(建筑成本,升级的好处等)。

但是,我的感觉是,您的问题的结构使得一系列构建决策在经过少量步骤后可以明显优于另一系列决策。假设您按此顺序构建建筑物A,B和C.一旦所需资源可用,您就会构建每个资源。然后你尝试订单C,A,B。你可能会发现另一种选择支配另一种选择,只要你拥有相同的建筑物,但在另一种选择中你拥有的资源比另一种更多。当然,如果您拥有许多不同的资源,这种可能性就会降低。您可能拥有更多的资源X但更少的Y会使情况更难以比较。如果它 可能,那么好的是你不需要启发式但你清楚地看到你应该遵循哪条路径以及哪条路要切断。

无论如何,我会探索一下你需要多少步骤才能找到你可以根据这样的考虑解散的路径。如果您发现它们很快,那么遵循广度优先策略并尽快修剪分支是有意义的。深度优先搜索承担了您花费大量时间探索劣质路径的风险。