JS反转概率

问题描述 投票:0回答:1

我正在生成一个对象网格,每个对象都有3种颜色之一。假设我正在填充特定的网格单元。我知道在此单元格周围有例如1个颜色为0的对象,1个颜色为1和2个颜色为2的对象,因此:

const surroundings = { 0: 1, 1: 1, 2: 2 }

现在,我想为正在使用的当前单元格分配颜色。我需要计算要使用的每种颜色的概率。为了使它看起来令人愉悦,我希望它与周围环境有所不同。因此,在上述情况下,概率可能是{ 0: 0.4, 1: 0.4, 2: 0.2 }

我确信概率论中已经实现了这种操作,但是我很难找到正确的条件。在示例中,我给出的概率可能不同,因为我不知道如何计算它们。但是对于颜色01,它们应该肯定相等,而对于颜色2,它应该最小。

javascript probability probability-density probability-theory
1个回答
2
投票

您可以获得reciprocal和和并返回它的一部分。

function getPro(array) {
    var inv = array.map(v => 1 / v),
        sum = inv.reduce((a, b) => a + b);
    return inv.map(v => v / sum);
}


console.log(getPro([1, 1, 2]));
console.log(getPro([1, 1, 1]));
console.log(getPro([2, 4, 6]));

0
投票

我将使用周围频率的总和来求逆:

let surrounding = [1, 2, 1];
let sum = surrounding[0] + surrounding[1] + surrounding[2];
let inverted = [sum-surrounding[0], sum-surrounding[1], sum-surrounding[2]];
console.log(inverted);

// Pick a random color according to inverted probabilities:
let invSum = 2*sum;
let rnd = Math.floor(Math.random() * invSum);
let color = rnd < inverted[0] ? 0
          : rnd < inverted[0] + inverted[1] ? 1
          : 2;
console.log(color); 
© www.soinside.com 2019 - 2024. All rights reserved.