gpt4 book ai didi

java - 如何模拟指数增长

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:15:57 30 4
gpt4 key购买 nike

我正在开发一款游戏,我希望在游戏中以指数级增长 - 因此,例如,从 2 人增加到 3 人可能与从 200 万增加到 300 万人所花的时间大致相同。但是,如果可能的话,我希望这种增长是随机的,以使其更真实。到目前为止,我有一个效果很好的方法:

if (buildingCount > populationCount && foodCount > populationCount)
for(int i=1;i<populationCount;i++) {
int randomInt = random.nextInt(1000);
if (randomInt == 42) {
Data.main.setPopulationCount(populationCount+1);
}
}
if ((buildingCount < populationCount || foodCount < populationCount)&&populationCount>2)
for(int i=1;i<populationCount;i++) {
int randomInt = random.nextInt(1000);
if (randomInt == 888) {
Data.main.setPopulationCount(populationCount-1);
}

但是,我意识到这是不可持续的。它每秒运行大约 60 次(在那个数量级),一旦达到数百万次的水平,它可能最终每秒运行数十亿次操作——对于这样一个简单的检查来说有点多了。如果必须的话,我会把它放在一个时间间隔内,但我宁愿让它随机。

我试图找到概率的方程式,但结果是:

Σ(99^r/1000^(r+1)) from r=0 to p (where p = probability)

是否有任何简单的方法可以将该概率更改为测试,或者 Java 中是否有更简单的方法来实现这样的目的。

如果有帮助,我正在使用 LibGdx 作为引擎。

最佳答案

看起来,假设随机数的分布是均匀的,对于 n.

为了模拟这一点,将 populationCount 除以 500 并使用 ThreadLocalRandom#nextGaussian 可能是个好主意确定将 populationCount 增加多少,让您摆脱 for 循环:

if (buildingCount > populationCount && foodCount > populationCount) {
if (populationCount > 1000) {
int randomNum = (int) ((ThreadLocalRandom.current().nextGaussian() / 2 + 0.5) * populationCount / 500);

Data.main.setPopulationCount(populationCount + randomNum);
} else {
// Original for-loop here for populations less than 1000.
}
}

对于 10,000 的人口,这将使人口平均增加 10(范围从 020 在这种情况下,但由于使用了 nextGaussian,所以倾向于 10 的平均值。

关于java - 如何模拟指数增长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49778887/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com