作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想模拟 N 面偏置模具?
def roll(N,bias):
'''this function rolls N dimensional die with biasing provided'''
# do something
return result
>> N=6
>> bias=( 0.20,0.20,0.15,0.15,0.14,0.16,)
>> roll(N,bias)
2
最佳答案
这里有一点数学知识。
一个普通的骰子会给每个数字 1-6 以相等的概率,即 1/6
。这称为 uniform distribution (它的离散版本,而不是连续版本)。这意味着如果 X
是一个描述单个角色结果的随机变量,那么 X~U[1,6]
- 意味着 X
是分布式的与掷骰子的所有可能结果相同,从 1 到 6。
这相当于在[0,1)
中选择一个数字,将其分成6个部分:[0,1/6)
,[1/6,2/6)
, [2/6,3/6)
, [3/6,4/6)
, [ 4/6,5/6)
, [5/6,1)
.
您正在请求不同的分布,这是有偏见的。实现这一点的最简单方法是根据您想要的偏差将 [0,1)
部分分成 6 个部分。因此,在您的情况下,您希望将其分为以下几类:[0,0.2)
, [0.2,0.4)
, [0.4,0.55)
, 0.55,0.7)
, [0.7,0.84)
, [0.84,1)
.
如果你看一下 wikipedia entry ,您会看到,在这种情况下,累积概率函数不会由 6 个等长部分组成,而是由 6 个长度不同的部分组成,具体取决于您给它们的偏差。质量分布也是如此。
回到问题,根据您使用的语言,将其翻译回您的掷骰子。在 Python 中,这是一个非常粗略但有效的示例:
import random
sampleMassDist = (0.2, 0.1, 0.15, 0.15, 0.25, 0.15)
# assume sum of bias is 1
def roll(massDist):
randRoll = random.random() # in [0,1]
sum = 0
result = 1
for mass in massDist:
sum += mass
if randRoll < sum:
return result
result+=1
print(roll(sampleMassDist))
关于python - 如何在 python 中模拟 biased die?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/479236/
我是一名优秀的程序员,十分优秀!