一种概率变化的骰子模型

社会主义新天地 提交于 2019-12-10 13:40:17

玩家初始金币数为100
有一面骰子,玩家投掷到2,3,5 点的时候,获得金币数为当前金币数*对应的点数
其余点数,获得金币数为,当前金币数*0.5
若连续两次得到0.5的点数,则投掷结束
设计规则,计算期望

代码如下

import numpy as np #导入包名
import matplotlib.pyplot as plt
win_time=np.array([2,3,5,0.5])#各个奖励
ls_gold=[]
best_gold=[]
for j in range(5):
#单次游戏
     i=0
     d=0.1
     score=[]
     win_gold=100
     gold_record=[]
     while True:
         x = (1 - d)*0.5 #(*2点*)
         b = (1 - d)*0.3 #(*3点*)
         c = (1 - d)*0.2 #(*5点*)
         score.append(np.random.choice(a=win_time, size=1, replace=True, p=[x, b, c ,d]))#注意不要使用Append=()
         win_gold=win_gold*float(score[i])#获得奖金数等于上次奖金*本次奖励倍数
         gold_record.append(win_gold)#用来记录投掷次数不同时获得奖金数,寻找最佳停止时间
         if i>0 and score[i-1]==score[i] and score[i]==0.5:#break条件,注意此条件在所有条件之前
             ls_gold.append(win_gold)#子循环中的最终结果要在break前进行记录
             best_gold.append(max(gold_record))
             break#break终止的是if从属的上层循环,因为break终止后剩下语句都将不再执行,所以结果要在break前记录
         elif score[i]!=0.5:#d增加的条件
             d=d+0.1
         else:
             d=d       
         i=i+1#计数器在所有条件走完之后增加步长

print(ls_gold)
plt.hist(ls_gold)
#plt.hist(best_gold)
plt.show()

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!