我做了一个search,但没有得到任何正确的点击。也许我使用了错误的条款?
我想问的是模拟偏见角色的算法,而非标准的假设随机滚动。
如果你不能给我确切的答案(也许解释很冗长?)这不会是一个问题但我会很感激并指出我能读到的关于它的材料。 < / p>
我想到的是,例如,将偏差转移到5,6区域,这样数字滚动将有更高的机会获得5或6;这就是我想解决的问题。
[更新]
经过深思熟虑并检查了一些答案后,我意识到我想要实现的是 Roulette Wheel Selection 运算符,因为它具有更大的扇区,所以在遗传算法中使用意味着增加球落在那里的几率。我对这种想法是否正确?
答案 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
修改
这相当于您在问题更新中提及的轮盘赌选择,如下图所示:
答案 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块)。