【发布时间】:2019-11-30 15:45:41
【问题描述】:
我正在玩一款名为 Screeps 的游戏,您可以在其中使用 javascript 编写一个殖民地。游戏的核心是被称为小兵的可编写脚本的小单位,可以从不同的部分动态构建以赋予它们不同的属性。
我编写了一个方程系统,通过查看其部件组成来确定小兵在完成给定工作方面的效率。
例如,升级殖民地中心的工作的简化方程式是:
e = 10yx / ((x + y) * (15x + 2y))
x 是蠕变上 CARRY 部件的数量。
y 是蠕变上 WORK 部件的数量。
e 是工作分配的总有效性
这些公式对于确定哪些小兵应该分配哪些工作非常有用。但是,我想知道是否有办法为每个方程求解 e 的最大值?这将为我提供最有效的零件比例,从而为高需求的工作构建蠕变。
如果这是可能的,因为我正在考虑用另一个变量来扩展方程,比如 z 表示 MOVE 零件的数量,这仍然可能吗?
编辑:对上述等式进行反复试验
f(1, 1); // returns 0.294
f(1, 2); // returns 0.350
f(1, 3); // returns 0.357 --- Highest value, therefore best ratio
f(1, 4); // returns 0.347
f(1, 5); // returns 0.333
不使用试错法可以解决这个问题吗?如果方程有 3 个输入而不是 2 个,类似的方法会起作用吗?
【问题讨论】:
-
什么是
z?它在数学中没有显示z。 -
最大化
e只是将x和y设置为可能的最高值,即Infitinity。在你的情况下,我怀疑它是否真的要你的意思。您能否进一步描述“最大化e”的含义?是否使用指定的积分分配,例如Maximize(e) given that x+y<=n? -
对不起,当我第一次写 z 时,我的意思是 e。现已编辑完毕。
-
好的,我再试一次。我的问题是你如何确定 x:y 之间的比率,当输入到方程中时,它将导致 e 的最大可能值。比率很重要,因为 f(1,1) 和 f(2, 2) 将返回相同的数字。这是因为 e,工作分配的总有效性以每滴答 ⋅ 部分单位的输出来衡量。目前,我一直在使用 x 和 y 的不同比率的试错法,并选择返回 e 的最大值的那个。但一定有更好的办法。
-
请为
f编写显式函数。现在看起来你想要10yx / (x + y) * (15x + 2y)的最大值,其中x=1。不存在最大值。您可能需要额外的要求,例如 x 和 y 为正且总和为 1。