在解决这些类型的问题时是否存在任何非启发式方法

时间:2015-12-14 08:29:47

标签: algorithm greedy heuristics

我正在尝试解决以下问题。

Given the following:
resources: food, wood, stone, gold
units: peon(requirements: 50 food, town hall, 3 turns to make) which can produce: 10 amount of any resource or 3 building points
       warrior(requirements: 30 food, 20 wood, 4 turns to make, barracks)
       archer(requirements: 30 wood, 25 gold, archery, 3 turns to make)
buildings: town hall(requirements: 500 food, 500 points, 20 building points) required to produce peons, only one peon can be produced at a time
           barracks: 100 wood, 50 stone, 10 building points, required to produce warriors
           archery: 200 wood, 30 gold, 12 building points, at least one barracks, required to produce archers
and the following: starting resources, buildings, units and their quantities
                   final resources, buildings, units and their quantities
output: the minimum required turns to get from starting quantities to final quantities of resources, buildings and units
notes: you start with at least one town hall
       what's the point of having multiple town halls: they can produce peons faster

现在,我的第一种方法是使用启发式方法解决此问题,从最终状态中选择最昂贵的资源/建筑物/单元,并确定我需要什么才能达到该数量。

我的问题是:解决这个问题是否有任何非启发式方法/这类问题。

3 个答案:

答案 0 :(得分:1)

您可以在所有可能移动的搜索树中执行第一次呼吸搜索。

这可能需要很长时间,但可以保证找到最佳解决方案 wikipedia: breath first search

A * -search可以更快,但你需要找到一个从不低估解决方案剩余(未知)部分成本的启发式方法。
wikipedia: A*-search

答案 1 :(得分:1)

嗯,你可以通过一点分析来简化问题......

  

战士和弓箭手在问题上没有任何价值,所以你永远不会花费资源创造它们,因此不需要营房或射箭建筑物

你离开了:

  • 单位:peon(要求:50个食物,市政厅,3个转弯制作),可以生产:10个任意资源或3个建筑点

  • 建筑物:市政厅(要求:500个食品,500个点,20个建筑点)生产石子,一次只能生产一个peon

如果您只使用现有的peon和市政厅,则可以评估所需的转弯次数,直到您拥有所需的资源为止。

如果建造更多的市政厅会有所改善,你显然会想尽早开始建造市政厅。因此,推测性地分析这样做的影响并将其与早期结果进行比较。如果建筑物有所帮助,请做类似的分析,以决定是否在每个建筑物完工时再开始建造......

答案 2 :(得分:0)

似乎唯一的决定是在最终结果中是否建造不需要的额外建筑物。我认为可以使用成本效益方法来完成。例如。建造额外的市政厅,有一个已知的成本,效益取决于它的运作时间。 我认为使用启发式算法是可以的,优化问题的一般解决方案是NP难的。