用偏置骰子模拟一个卷

时间:2011-05-01 18:32:13

标签: language-agnostic random probability

我做了一个search,但没有得到任何正确的点击。也许我使用了错误的条款?

我想问的是模拟偏见角色的算法,而非标准的假设随机滚动。

如果你不能给我确切的答案(也许解释很冗长?)这不会是一个问题但我会很感激并指出我能读到的关于它的材料。 < / p>

我想到的是,例如,将偏差转移到5,6区域,这样数字滚动将有更高的机会获得5或6;这就是我想解决的问题。

[更新]

经过深思熟虑并检查了一些答案后,我意识到我想要实现的是 Roulette Wheel Selection 运算符,因为它具有更大的扇区,所以在遗传算法中使用意味着增加球落在那里的几率。我对这种想法是否正确?

5 个答案:

答案 0 :(得分:6)

通常,如果您的概率是{p1,p2,...,p6},请构造以下帮助程序列表:

{a1, a2, ... a5} = { p1, p1+p2, p1+p2+p3, p1+p2+p3+p4, p1+p2+p3+p4+p5}  

现在在[0,1]

中得到一个随机数X.

如果

        X <= a1  choose 1 as outcome  
   a1 < X <= a2  choose 2 as outcome 
   a2 < X <= a3  choose 3 as outcome  
   a3 < X <= a4  choose 4 as outcome  
   a4 < X <= a5  choose 5 as outcome  
   a5 < X        choose 6 as outcome 

或者,更有效的伪代码

   if     X > a5 then N=6
   elseif X > a4 then N=5
   elseif X > a3 then N=4
   elseif X > a2 then N=3
   elseif X > a1 then N=2
   else               N=1

修改

这相当于您在问题更新中提及的轮盘赌选择,如下图所示:

enter image description here

答案 1 :(得分:2)

制作可能值及其权重的二维数组。总结所有权重。随机选择范围为0到权重之和的值。 现在迭代数组,同时保持到目前为止看到的权重的累加器。一旦此值超过您的随机数,请选择此处所示的模具的值。

希望这有帮助

答案 2 :(得分:1)

嗯。假设您想获得六分之一的机会,并且有1/10的机会获得任何其他面孔。要模拟这一点,您可以在n中生成一个随机整数[1, 2, ... , 10],如果n位于[6, 7, 8, 9, 10]并且映射到n,结果将映射到六个否则。

答案 3 :(得分:1)

假设骰子偏向3。

不是从包含6个条目的数组1..6中选择一个随机条目,而是从数组1..6,3,3中选择一个随机条目。(8个条目)。

答案 4 :(得分:1)

通常相当容易的一种方法是从扩展范围内的随机数开始,并将该范围分解为不相等的部分。

例如,对于完全均匀(六面)的模具,每个数字应该达到时间的1/6 th 。让我们假设您决定百分比 - 所有其他数字应该占16%的时间,但是2%应该占17%的时间。

你可以通过生成1到100之间的数字来做到这一点。如果数字从1到16,则表示为1.如果它是从17到34,则表示为2.如果它是从34到50,它是一个3(其余的是每个16块)。