将负数转为概率的正数

时间:2010-10-14 08:34:43

标签: math

我想创建一个以特定方向发送像素的数组。

它有四个选项:前进,后退,左,右

每个方向都有一个相关的分数,即在特定方向上发送像素的概率。

示例:

Direction[Forward] = 20;
Direction[Backward] = 12;
Direction[Left] = -5;
Direction[Right] = 2;

如何使方向数组中每个键的数字等于移动像素的概率?我希望负数可以发挥概率,尽管机会很小。

目前我将每个方向键复制到一个新数组中,作为概率得分的次数,然后针对新数组生成一个随机数,但这对负数不起作用,所以我将它们更改为+1 in预先。显然,这不会扩大到负数。

如何为每个数组键创建概率,无论它是正数还是负数?

6 个答案:

答案 0 :(得分:3)

在数学意义上没有负概率,但你可以使用一个函数将每个数字映射到正数,如指数函数:

double totalProbability = 0;
probabilty = new array
foreach (key in Direction)
{
  probability[key] = exp(Direction[key];
  totalProbability  += probability[key];
}
//ensure the sum of all probabilities is 1
foreach (key in Direction)
{
  probability[key] /= totalProbability;
}

答案 1 :(得分:1)

我不认为这里有负分。如果您希望这些数字与概率相对应,那么否定就没有意义。如果你想让你的像素很少离开,你只需要确保左分数比其他分数小得多。但是一旦你达到0它就永远不会离开,而更小的得分(即负数)则没有实际意义。因此,我只需将负分数替换为0,除非您能对这些分数提供更有意义的解释。

至于获得分数概率,一旦所有分数都是非负的,这很容易做到:

  1. 让S为所有分数的总和。
  2. 将每个分数除以S.结果是概率。
  3. 在你的例子中(-5替换为0)你有S = 20 + 12 + 2 = 34,这给出了向前移动的概率为20/34 = 58.8%,向后移动的概率为12/34 = 35.3%,对,2/34 = 5.9%。 (如你所见,我做了相同的舍入,所以你没有得到概率的1的精确和,如果你用double或类似的东西计算,这将会发生类似的事情。)

答案 2 :(得分:1)

我不知道你问题的答案是什么,但对于所有那些说负面概率毫无意义且不符合逻辑的人来说,这里是alternative view。量子物理学中的负概率已经被认真对待了很长一段时间。

也许真正的问题是随机数,范围从-1到+1。随机数似乎是设置像素在给定方向上移动的概率。如果您将该范围更改为[0,1],则此问题可能会消失,整个算法更有意义。

你有四个方向:右(正x),前(正z?),左(负x)和后(负z?)。你已经内置了方向性;没有必要在负数上签字。为每个方向设置范围[0,1],问题可能没有实际意义。

答案 3 :(得分:0)

即使在阅读了所有这些之后,我仍然有点为什么你最终会得到负数而感到困惑,但是每种语言都有一个absolute function,它总能返回任何数字的正版本。

答案 4 :(得分:0)

new Random().Next(3) - 1; // returns random number between -1 and +1

答案 5 :(得分:0)

找出最小的数字并从所有概率中减去它(和额外的1)(在这种情况下,减去-6并得到[26,18,1,8])。然而,这将不会保持一个事件与另一个事件相比的“双重概率”......但是,使用负概率无论如何都不是很合乎逻辑......

相关问题