分配数字,以便每个桶相对均匀

时间:2018-01-16 06:13:54

标签: algorithm math distribution

我正在研究涉及车厂的游戏的某些方面。我正在尝试编写Resupply(stock)方法,以便它将重新提供此库软件对象,以便软件仓库中的每个资源尽可能均匀分布。

该仓库具有有限的最大容量(意味着不应该超出其容量的库存积压)。仓库定义了一组有限的资源,它们具有数量(项目数量),以及乘数(即。您可以拥有4个Wood单位,但由于它们的大尺寸,它们的乘数为2,因此4个单元总共占用8个单位)

以这个仓库为例:

仓库A的最大容量为100,当前容量为50(所以50%已满)

此库中有4种类型的资源

A: 4 Units, Multiplier of 4     - (4 * 4) / 100 = 16%
B: 3 Units, Multiplier of 3     - (3 * 3) / 100 = 9%
C: 15 Units, Multiplier of 1    - (15 * 1) / 100 = 15%
D: 5 Units, Multiplier of 2     - (5 * 2) / 100 = 10%

现在说我希望通过给它25个新单位来补充这个仓库(这些单位是神奇的,并且出于游戏目的可以将自己分配给任何资源桶)。

我如何最好地分配这25个点,以便资源A,B,C,D的分配或多或少相等?

让我们说第一遍我们将2个单位添加到B,将3个单位添加到D:

B: Add 2 Units - (3 + 2) * 3    - 15 / 100 = 0.15
D: Add 3 Units - (5 + 3) * 2    - 16 / 100 = 0.16

在给出5个单位后,A,B,C,D在仓库中的存储量几乎相同。 (16%,15%,15%,16%)

我将如何实现这一目标:

  • 在软件仓库中定义了多个资源?
  • 最大容量是多少?
  • 有任何n流量吗?
  • 从不添加超过最大容量的单位? (丢弃额外的单位)

1 个答案:

答案 0 :(得分:2)

我选择了一个简单的贪婪算法:

  • 忽略任何在不超过的情况下无法增加的资源 仓库容量
  • 其余资源的
  • 找到最少量的资源 空间
    • 如果有平局,请选择乘数较小的资源
  • 向该资源类型添加1个单位
  • 重复,直到使用所有新单位或没有任何资源 增加

以下是算法如何进行给定示例:

      -  B  D  D  B  D  C  B  C  D  A  C  C  D  B  C  C  D  A  C  B  C  D  C  C  D
4 A  16 16 16 16 16 16 16 16 16 16 20 20 20 20 20 20 20 20 24 24 24 24 24 24 24 24
3 B   9 12 12 12 15 15 15 18 18 18 18 18 18 18 21 21 21 21 21 21 24 24 24 24 24 24
1 C  15 15 15 15 15 15 16 16 17 17 17 18 19 19 19 20 21 21 21 22 22 23 23 24 25 25
2 D  10 10 12 14 14 16 16 16 16 18 18 18 18 20 20 20 20 22 22 22 22 22 24 24 24 26