3

我有 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

4

2 回答 2

6

将此 Wikipedia 公式编码,您可以生成具有以下内容的三角形分布:

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每次都创建一个对象:只创建一次并重用它。

于 2015-10-19T17:18:28.917 回答
2

为了补充@Tunaki的出色答案,如果您以对称三角形进行采样,则可以通过使用具有两个自由度的 Irwin-Hall 分布来获得(当然,然后对其进行缩放)

链接https://en.wikipedia.org/wiki/Irwin%E2%80%93Hall_distribution

代码

public double IH2() {
    return Math.random() + Math.random();
}
于 2015-10-19T17:45:55.023 回答