最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

python與概率簡單實(shí)踐——擲骰子

2021-11-30 11:57 作者:與時(shí)代脫軌的級(jí)數(shù)  | 我要投稿

獨(dú)立擲一六面骰子(即點(diǎn)數(shù)為1,2,3,4,5,6),記錄每次擲出的點(diǎn)數(shù),當(dāng)點(diǎn)數(shù)大于20時(shí),停止投擲,問投擲次數(shù)的期望?

推而廣之,設(shè)面數(shù)為x,設(shè)定的點(diǎn)數(shù)和為y,滿足此題意的期望為多少?


不妨先將問題簡化一下,兩面的骰子,大于3停止,此時(shí)可以用人腦窮舉


窮舉結(jié)果

都滿足題意

簡單計(jì)算可得期望為,投擲次數(shù)的加權(quán)平均,投擲次數(shù)越多,權(quán)值越小

(相當(dāng)于多投擲了,得到這個(gè)結(jié)果的概率也就小,本題中得到任一結(jié)果的概率為(1/2)^n,n為投擲次數(shù),2為骰子面數(shù)

(注意這些結(jié)果的概率和可不唯一,因?yàn)槲覀冎皇呛Y選出了一些合題意的結(jié)果,加權(quán)平均的真正目的是每種投擲情況出現(xiàn)的概率不一樣)

結(jié)果為:2.875)

我們考慮用計(jì)算機(jī)模擬

兩種思路:

1,暴力窮舉出所有情況,求加權(quán)平均

2,用生成隨機(jī)數(shù)的功能模擬投擲過程,用頻率逼近概率

思路1代碼如下:


#窮舉
import numpy as np
surface_number=2 #設(shè)定骰子面數(shù)
define_sum=3 #設(shè)定超過的值,大于此值即停止投擲
success_list=[] #記錄所有窮舉出合題意的結(jié)果

def ?method_of_exhaustion(lists): #此函數(shù)用來窮舉
? ?for i in range(surface_number,0,-1):
? ?#從面數(shù)到1循環(huán)(1到面數(shù)也可),覆蓋所有的情況
? ? ? ?if sum(lists)+i>define_sum:
? ? ? ? ? ?#原來的和加上某點(diǎn)超過規(guī)定值,則合適,記錄入succee_list
? ? ? ? ? ?success_list.append(lists+[i])
? ? ? ?else:
? ? ? ? ? ?method_of_exhaustion(lists+[i])
? ? ? ? ? ?#加上還不夠,加上此值后遞歸運(yùn)行次函數(shù)繼續(xù)擲骰子


medium=[]#從沒有擲骰子開始
method_of_exhaustion(medium)#運(yùn)行函數(shù)

#print(success_list) #顯示結(jié)果(因后續(xù)情況可能過于冗長,此處注釋掉)
#print(len(success_list)) #結(jié)果數(shù)

#需要求加權(quán)平均值的數(shù)據(jù)列表
elements = []
#對應(yīng)的權(quán)值列表
weights = []
for i in success_list:
? ?length=len(i)
? ?elements.append(length)
? ?weights.append((1/surface_number)**(length))
a=np.average(elements, weights=weights)
print(a)

'''
驗(yàn)證數(shù)據(jù)的正確性,可自行驗(yàn)證,此處注釋掉
每個(gè)單獨(dú)的結(jié)果需要滿足:
1,和大于規(guī)定值
2,除去最后一個(gè)數(shù),和小于規(guī)定值
ha=0
for i in success_list:
? ?if sum(i)<=20:
? ? ? ?ha=1
? ?medium=i
? ?medium.pop()
? ?if sum(medium)>20:
? ? ? ?ha=1
print(ha)#ha為0說明正確
'''


其中用到了numpy求加權(quán)平均

顯示結(jié)果的輸出如下

思路2代碼如下:


import random
#用隨機(jī)數(shù)模擬

experiment=10 #模擬次數(shù)
tries=5000#每次模擬實(shí)驗(yàn)次數(shù)

surface_number=2?#設(shè)定骰子面數(shù)
define_sum=3?? ?#設(shè)定和超過多少停止

for _ in range(experiment):
? ?success_list=[] #用于收集所有合法的結(jié)果
? ?for _ in range(0,tries):
? ? ? ?medium = [] #單次實(shí)驗(yàn)前要清空
? ? ? ?while True:
? ? ? ? ? ?value=random.randint(1,surface_number) #等概率生成隨機(jī)數(shù)
? ? ? ? ? ?medium.append(value)
? ? ? ? ? ?if sum(medium)>define_sum:#直到大于所規(guī)定值,停止投擲
? ? ? ? ? ? ? ?success_list.append(medium)
? ? ? ? ? ? ? ?break

? ?sums=0
? ?for i in success_list:
? ? ? ?sums+=len(i)
? ?print(sums/len(success_list))#期望值


我們選擇模擬10次,每次有5000組平行實(shí)驗(yàn),下面看輸出結(jié)果:

輸出結(jié)果

觀察到每次實(shí)驗(yàn)都很接近理論值

進(jìn)一步,我們可以任意修改surface_number,define_sum? ??

來任意設(shè)定骰子面數(shù)以及和超過多少停止

比如6面骰子,大于20停止(不包括20),仍是上述代碼,修改參數(shù)即可:

隨機(jī)數(shù)法運(yùn)行結(jié)果
窮舉法結(jié)果(暴力算法可能與嚴(yán)格值有些許誤差)

可以看到兩者十分接近

數(shù)學(xué)推導(dǎo)待續(xù)

python與概率簡單實(shí)踐——擲骰子的評論 (共 條)

分享到微博請遵守國家法律
四平市| 仪陇县| 观塘区| 抚宁县| 桂林市| 龙川县| 邯郸市| 隆化县| 板桥市| 龙山县| 牙克石市| 陵川县| 叶城县| 祁阳县| 廉江市| 巧家县| 余庆县| 开阳县| 霞浦县| 西峡县| 祁东县| 南乐县| 镇沅| 岳普湖县| 彰化县| 乌拉特前旗| 蚌埠市| 奉节县| 仙桃市| 新昌县| 内乡县| 钟祥市| 淮北市| 宁波市| 沙田区| 翼城县| 宾川县| 确山县| 会理县| 浠水县| 桑日县|