我正在研究涉及车厂的游戏的某些方面。我正在尝试编写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%)
我将如何实现这一目标:
答案 0 :(得分:2)
我选择了一个简单的贪婪算法:
以下是算法如何进行给定示例:
- 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