python - 如何在 python 中模拟 biased die?

标签 python numpy probability

我想模拟 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/

相关文章:

python - 数组中不同文件的总和

python - 如何使用 Discord.py 向所有文本 channel 发送消息?

python - np.where 具有多个条件

python - 如何将多项式拟合到带有误差线的数据

python - 显示分组数据的时间序列和平均值

python - 链接来自不同函数的变量以打印它们

python - Numpy 多维数组切片

php - 选择一个随机行,但有赔率

java - Java 中的加权随机概率

python - 从有界域 zipf 分布中抽样