我有4个零件,每个零件10000次,应该适合大小写,零件的尺寸由均匀,正常和三角形分布给出,通过随机生成每个分布的附加尺寸的数字。
对于每4个部分,是否适合做出决定。但这不应成为一个问题。
我以某种方式管理了统一和正常的分配:
public double uniformDistrubution(double min, double max) {
Random rand = new Random();
return Math.random() * max + min;
}
public double normalDistrubution(double mean, double std) {
Random rng = new Random();
return mean + std * rng.nextGaussian();
}
但我无法弄清楚三角形的那个。我的尺寸是:
a = 7:6,b = 8:0,c = 8:4
答案 0 :(得分:3)
使用代码this Wikipedia formula,您可以使用以下内容生成三角形分布:
public double triangularDistribution(double a, double b, double c) {
double F = (c - a) / (b - a);
double rand = Math.random();
if (rand < F) {
return a + Math.sqrt(rand * (b - a) * (c - a));
} else {
return b - Math.sqrt((1 - rand) * (b - a) * (b - c));
}
}
作为旁注,在正态分发中,您不应每次都创建一个Random
对象:只创建一次并重复使用它。
答案 1 :(得分:2)
要添加@Tunaki的优秀答案,如果您使用对称三角形进行采样,您可以通过使用具有两个自由度的Irwin-Hall分布(然后按比例缩放)
链接https://en.wikipedia.org/wiki/Irwin%E2%80%93Hall_distribution
代码
public double IH2() {
return Math.random() + Math.random();
}