【发布时间】:2018-01-16 15:58:51
【问题描述】:
我正在研究我的游戏的某些方面,其中涉及到一个仓库。我正在尝试编写一个 Resupply(stock) 方法,以便它重新供应这个 depot 对象,以便 depot 中的每个资源尽可能均匀分布。
仓库的最大容量是有限的(这意味着仓库的库存不应超过其容量)。仓库定义了一组有限的资源,它们有一个数量(项目的数量)和一个乘数(即,您可以拥有 4 个单位的木材,但由于它们的尺寸很大,它们的乘数为 2,使得4 个单元总共占用 8 个单元的空间)
以仓库为例:
仓库 A 的最大容量为 100,当前容量为 50(所以 50% 已满)
这个depot中有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 的分配大致相等?
假设在第一次通过时,我们向 B 添加 2 个单位,向 D 添加 3 个单位:
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 个资源?
- 最大容量是多少?
- 有任何 n 当前容量?
- 永远不会添加超过最大容量的单元? (多余的单位被丢弃)
【问题讨论】:
-
n在问题中重新定义,资源数和当前容量
-
对于精确的解决方案,您可以使用混合整数编程。这个问题总体上感觉是 NP-hard。
标签: algorithm math distribution