赏金分配均等化

时间:2013-02-08 23:41:18

标签: algorithm math distribution

我需要一种算法,就像Travian中使用的算法一样。我想知道如何制作它以便有4种资源类型,当有人进行搜查时,它们需要花费很多,但是它们从每种资源类型中取得相同的百分比,具体取决于raid可用的数量。所以我可以说我可以突袭450个资源,但是后卫有300个木头,400个粘土,200个铁和100个小麦,我会考虑木材构成总资源的百分比,然后我会将其乘以赏金。问题是当我回合时,我会得到449/450或451/450。

那么有没有办法解决舍入问题,有人可以编译整个算法吗?我只是非常好奇,就像我平时一样,并且出于好奇心编译大量的算法,比如Elo,Torus和其他非常基本的算法。

3 个答案:

答案 0 :(得分:1)

您可以使用modulo计算余数,并随机分配余数。

答案 1 :(得分:1)

如果你希望它们都“均匀分布”,那么你偶尔会出现舍入问题。如果我的容量是100并且有三个相同的资源,你将永远无法通过四舍五入来实现它。

如果发生这种情况,只需选择一个来“修复”它。我通常会使用最后一个资源。像往常一样绕过除了最后一个之外的所有部分,然后从总数中减去它们(450或在你的例子中),这就是你的最后一个资源值。

答案 2 :(得分:0)

为什么你希望你的袭击者采取相应于突袭城镇资源的百分比? 据我说,袭击者应该根据他们的能力获得平衡的每种资源。

用你的例子:

Raiders capacity - 450
Wood - 300
Clay - 400
Iron - 200
Wheat - 100

While  Not Empty (Wood and clay and Iron and Wheat) and Not Full ( Raiders )
    Raiders pick up 1 each ressources

在此步骤之后,攻略有400个资源(因为没有更多的小麦)。

town Stack

Wood - 200
Clay - 300
Iron - 100
Wheat - 0

对剩余资源执行相同操作: 50 / 3 = 16

此突袭者堆栈之后是这样的:

Wood - 116
Clay - 116
Iron - 116
Wheat - 100
TOTAL : 448

然后你有两个解决方案,在最大的堆栈中选择资源或者继续你的循环。 如果你选择以最大的资源获取资源:

当前股票:

Wood - 184
Clay - 284
Iron - 84
Wheat - 0
TOTAL : 552

选择2个Clay单位,然后你得到以下结果:

Town Stack

Wood - 184
Clay - 282
Iron - 84
Wheat - 0
TOTAL : 550

攻略堆叠

Wood - 116
Clay - 118
Iron - 116
Wheat - 100
TOTAL : 450

这只是另一种观点。你觉得这很有意思吗?