gpt4 book ai didi

java - 如何获得具有线性分布的随机日期?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:04:06 24 4
gpt4 key购买 nike

我想从值的(逆)线性分布中获得一个随机毫秒值(如果我没记错的话)。

本质上,我想在两个时间点 earlylate 其中 t 朝向 early 的概率比朝向 late 的概率大得多。 late 本身可能有 0.0 的概率。

我当前的 java 代码只使用均匀分布,所以我打算将其修改为(逆)线性分布:

public Date getRandomDate(Date early, Date late) {
long diff = late.getTime() - early.getTime();
final int randVal = rand.nextInt((int) diff);
Calendar cal = Calendar.getInstance();
cal.setTime(early);
cal.add(Calendar.MILLISECOND, randVal);
return cal.getTime();
}

最佳答案

搭便车 this answer对于类似的问题,您可以至少进行两次 rand 调用:

final int randVal = Math.min(rand.nextInt((int) diff), rand.nextInt((int) diff));

最后,这是另一种更复杂的方法,它使用 cumulative distribution function 求解 x (x^2):

int randVal = (int) Math.floor(diff * (1.0 - Math.sqrt(rand.nextDouble())));
if(randVal >= diff) randVal = 0; // handle the edge case

为了满足您的指定要求,已从 1.0 中减去平方根以反转分布,即将较大的密度置于范围的底部。

关于java - 如何获得具有线性分布的随机日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42439481/

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