经济生产者/消费者模拟

时间:2013-03-23 19:47:55

标签: simulation directed-acyclic-graphs consumer producer max-flow

你好精彩的社区!

我正在闲暇时间写一个小游戏。它发生在一个大型星系中,玩家可以控制一些星星。在这些星星上,您可以构建建筑物,每个都有一些数字(0 .. *)的输入,并产生一定数量的输出。这些建筑物具有最大容量/吞吐量,并且按比例缩小其输入会将其输出按比例缩小。我想找到一种优化(或近似)所有建筑物吞吐量的预算算法。这似乎是某种最大流量问题,但我读过的流量优化算法都没有不同类型的输入或相关输出。

我一直在玩的玩具“科技树”是:

Solar plant - None => 2 energy output.
Extractor   - 1 energy => 1 ore output
Refinery    - 1 energy, 1 ore => 1 metal
Shipyard    - 1 metal, 2 energy => 1 ship

我愿意接受次优算法,并且我愿意保证输入/输出没有周期(它们从建筑物到建筑物形成DAG)。这个想法是在没有玩家干预的情况下允许合理的吞吐量和技术树复杂性,因为在数百或数千颗星的规模上,允许玩家手动定义预算策略并不好玩,并且让那些没有生命的玩家变得明显优点

我目前的策略是建立一个DAG,并给予资源一个总排序(船舶比Metal更好比Ore好于能源),然后,循环遍历每个资源,找到最“后代” “生产这种资源的建筑物,允许它贪婪地从它的输入中掠夺(一个造船厂将需要2个能量,1个金属,然后炼油厂将获得1个能量和1个矿石等),然后找到任何”骗子“图表(太阳能发电厂提供4种能量,当它的最大值为2时),缩小其产量并向前传播变化。一旦为DAG解决了所有问题,从图中删除终端元素(造船厂)并从建筑物的最大吞吐量中减去每个边的“当前thruoghput”,然后为下一类资源重复该过程。如果有更好的方法,我想我会问比我聪明得多的人。 :)

0 个答案:

没有答案