用于在游戏中寻找食物分配的最佳路线的算法

时间:2010-05-10 18:45:37

标签: algorithm graph mathematical-optimization path-finding

我正在设计一个城市建筑游戏并遇到了问题。

想象一下Sierra的 Caesar III 游戏机制:你有很多城区,每个城市都有一个市场。距离上有几个粮仓与定向加权图相连。差异:人(这里是汽车)是形成交通拥堵的单位(这里是图表权重)。

注意:在Ceasar游戏系列中,人们收获食物并将其储存在几个大粮仓中,而许多市场(小商店)从粮仓获取食物并将其运送给公民。

任务:告诉每个地区他们应该从哪里获取食物,同时减少时间并最大限度地减少城市道路上的拥堵情况。

地图示例

Example graph diagram

假设黄色区域需要相应的7,7和4个苹果。 蓝色粮仓因此有7个和11个苹果。

假设边缘权重与其长度成比例。然后,解决方案应该类似于边缘上指示的灰色数字。例如,第一区从1号获得4个苹果,从第2个粮仓获得3个苹果,而最后一个区从第2个粮仓获得4个苹果。

在这里,垂直道路首先被占用到最大值,然后其余的工人被送到对角线路径。

问题

我应该使用哪种实用且非常快速的算法?我正在看一些描述拥堵游戏的论文(拥堵游戏:竞争优化等),但无法全面了解。

6 个答案:

答案 0 :(得分:6)

您想查看Max-flow问题。在这种情况下,它似乎是一个二分图,它可以使事情更容易可视化。

答案 1 :(得分:4)

这是Multi-source Multi-sink Maximum Flow Problem,可以通过创建链接中所述的超级源和超级接收器轻松转换为简单的最大流问题。有许多有效solutions到最大流量问题。

答案 2 :(得分:4)

你可以做的一件事,就是解决另一个答案中讨论的增量更新问题,也可能对计算机来说更便宜,就是忘记全局最优解决方案。让每个村民参与ant colony optimization之类的活动。

考虑阻止示例中右下角黄色节点上的人员通过允许右手黄色节点上的人们提高“右手黄色节点”来挤出那些黄色节点上的人从右侧蓝色节点购买资源的价格,这将鼓励右下角黄色节点中的一些人将稍长的步行带到左侧蓝色节点。

答案 3 :(得分:2)

我同意Larry和mathmike,看来这个问题肯定是网络流的专业化。

另一方面,如果您的最终算法为每个市场找到其资源(粮仓)的生成树,首先根据最短路径贪婪地消耗这些资源,然后转移到下一个资源堆上,问题可能会变得更容易。

在首先使用最大容量的道路(最大化道路效率)方面考虑它可能会有所帮助,而不是试图最小化拥堵。

这是问题的根源 - 一般来说,在图形问题和游戏开发方面找到接近最优解决方案更容易,接近最优可能就足够了。

编辑:还想指出,mathmike与维基百科的链接也谈到Maximum Flow Problem with Vertex Capacities,你的每个粮仓都可以被认为是有限容量的顶点。

答案 4 :(得分:0)

你需要注意的是,你的游戏是连续的。如果你在时间t有一个解决方案X,并且发生了一些小变化(例如:玩家建造另一条道路,或者其中一个城市获得更多人口),Max Flow算法给你的解决方案可能会发生巨大变化< / strong>,但你可能希望t + 1处的解决方案与X类似。每个时间步的完全不同的解决方案是不现实的(在地图的南端建造了1条新路,所有路线都是自动重新计算)。

我会使用一些算法来计算初始解决方案(或者当发生重大变化时,如地震会破坏25%的道路),但大部分时间只会逐步更新:意思是,在解决方案上定义某种形式的有效转换(例如,1个城市试图从不同的粮仓获得1个食品单位) - 您尝试更新(模拟预期的拥堵),并保持更新的解决方案,如果它比现有解决方案在每场比赛结束或某个单位时间后运行此步骤N次。

它的计算效率都很高(不需要每秒运行完整的Max Flow),并且可以让你更加真实,平稳地改变行为。

答案 5 :(得分:0)

拥有一个动态模型行为可以产生一个合理的解决方案,而不是找到一个理想的驱动行为的解决方案。假设您单独计划每次旅行。如果你是一名司机并且你需要从A点到达B点,那么你将如何到达那里?您可能会考虑以下几点:

  1. 我知道这个时候的典型交通状况,我会试着找到通常很繁忙的道路。您可以将其建模为不同时间的平均流量值,因为驾车者不一定拥有关于当前流量的完美信息,但可以随时了解和识别趋势。

  2. 我不喜欢漫长而混乱的路线。在计划旅行时,你可能会惩罚那些有很多优势的人。

  3. 如果您的模型中包含速度限制和交通信号灯,我希望避免长时间低速限制和/或大量交通信号灯。我喜欢高速公路或高速公路,即使他们有更多的交通也可以长途旅行。

  4. 可能还有其他有趣的动态从行为上考虑问题而不是纯粹的优化。在现实生活中,交通很少融合到最优解决方案上,因此交通工程中的很大一部分挑战是提出激励,惩罚和设计,以鼓励驾驶员决策中自然动态的更好解决方案。