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
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))
import random
def roll(sides, bias_list):
assert len(bias_list) == sides
number = random.uniform(0, sum(bias_list))
current = 0
for i, bias in enumerate(bias_list):
current += bias
if number <= current:
return i + 1
这里有点数学。
一个普通的模具将以相同的概率给出每个数字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中,下面是一个非常粗略的示例,尽管可以工作:
更多的语言不可知,但你可以使用查找表。
使用0-1范围内的随机数并在表中查找值:
偏差是成比例的。
也可以使用整数(更好):
相关问题 更多 >
编程相关推荐