大数定理: 在随机事件的大量重复出现中,往往呈现几乎必然的规律,这个规律即大数定律。通俗说,这个定理就是在试验不变的条件下,重复试验多次,随机事件的频率近似于它的概率。偶然中包含某种必然。

个人理解:蒙特卡洛就是一种根据制定好的规则基于不确定性不断演算得到结果的思想

单倍下注:
每次下注赌注不变,一直赌下去,代码如下

import random
import matplotlib.pyplot as pltdef rollDice():roll = random.randint(1,100)if roll == 100:return Falseelif roll <= 50:return Falseelif 100>roll>50:return Truedef simple_bettor(funds,initial_wager,wager_count):value = funds           # 资金wager = initial_wager   # 赌注wX = []                 # wager XvY = []                 # value YcurrentWager = 1while currentWager <= wager_count:if rollDice():value += wagerwX.append(currentWager)vY.append(value)else:value -= wagerwX.append(currentWager)vY.append(value)currentWager += 1plt.plot(wX,vY)         # 画图# 分类if value<=0:return "broke"elif value<funds:return "lose"elif value>funds:return "win"elif value==funds:return "equal"x = 0
# 赌博人数
people = 100
# funds 赌金
funds = 10000
# 赌注
initial_wager = 100
# 模拟赌博次数
count = 1000num_win = 0
num_lose = 0
num_broke = 0
num_equal = 0while x < people:result = simple_bettor(funds,initial_wager,count)x += 1if result == 'win':num_win += 1elif result == 'lose':num_lose += 1elif result == 'broke':num_broke += 1elif result == 'equal':num_equal += 1print("%d people are betting"%people)
print("people betting %d times"%count)
print("num_win:",num_win)
print("num_lose:",num_lose)
print("num_equal:",num_equal)
print("num_broke:",num_broke)
print("broken rate:",num_broke/people)plt.ylabel("money in hand")
plt.xlabel("betting Count")
plt.show()

结果分析:根据大数定理,单倍下注赌久必输


双倍下注法:
破解大数定理,使用双倍下注
在下注过程中如果输了,则翻倍下注。
比如第一次下注10元输了,则第二轮下注20元
第二轮输了则下注40元。(万一赢了就会把之前输的赚回来)。在资源有限的情况下,这真是个好方法吗?

import random
import matplotlib.pyplot as pltfig = plt.figure(figsize=(10,10))
# 赌博人数
sampleSize = 100
# 赌资
startingFunds = 10000
# 每次赌金
wagerSize = 100
# 赌博次数
wagerCount = 30def rollDice():roll = random.randint(1,100)if roll == 100:return Falseelif roll <= 50:return Falseelif 100>roll>=50:return Truedef double_bettor(funds,initial_wager,wager_count):global double_bustsglobal double_loseglobal double_profitsvalue = funds           # 资金wager = initial_wager   # 赌注wX = []                 # wager XvY = []                 # value YcurrentWager = 1previousWager = 'win'previousWagerAmount = initial_wagerwhile currentWager <= wager_count:if previousWager == 'win':if rollDice():value += wagerwX.append(currentWager)vY.append(value)else:value -= wagerpreviousWager = 'loss'previousWagerAmount = wager     # 前一次赌注wX.append(currentWager)vY.append(value)if value < 0:double_busts += 1breakelif previousWager == 'loss':if rollDice():wager = previousWagerAmount * 2if(value - wager) < 0:          # 钱不够时wager = valuevalue += wagerwager = initial_wagerpreviousWager = 'win'wX.append(currentWager)vY.append(value)else:wager = previousWagerAmount * 2if(value - wager) < 0:wager = valuevalue -= wagerpreviousWager = 'loss'previousWagerAmount = wagerwX.append(currentWager)vY.append(value)if value <= 0:double_busts += 1breakcurrentWager += 1plt.plot(wX,vY)         # 画图# 分类if value>funds:double_profits += 1elif value<funds:double_lose += 1def Print_result():print("总赌金:",startingFunds)print("开始每次赌金:",wagerSize)print("赌博次数:",wagerCount)print("赌钱人数:",sampleSize)print("Doubler Bettor Bust Chances:",(double_busts/sampleSize)*100.00)print("Doubler Bettor Profit Chances:",(double_profits/sampleSize)*100.00)print("Doubler Bettor Lose Chances:",(double_lose/sampleSize)*100.00)x = 0
double_busts = 0.0
double_profits = 0.0
double_lose = 0.0while x < sampleSize:double_bettor(startingFunds,wagerSize,wagerCount)x += 1plt.axhline(0,color='r')
plt.ylabel("Account Value")
plt.xlabel("Wager Count")
Print_result()
plt.show()

结果分析:
初看貌似是个好方法,真是这样?
可见随着次数的增多,破产率猛增

两种方法联合演示:

import random
import matplotlib.pyplot as pltfig = plt.figure(figsize=(10,10))
# 赌博人数
sampleSize = 100
# 赌资
startingFunds = 10000
# 每次赌金
wagerSize = 100
# 赌博次数
wagerCount = 30000def rollDice():roll = random.randint(1,100)if roll == 100:return Falseelif roll <= 50:return Falseelif 100>roll>=50:return Truedef double_bettor(funds,initial_wager,wager_count,color):global double_bustsglobal double_profitsvalue = funds           # 资金wager = initial_wager   # 赌注wX = []                 # wager XvY = []                 # value YcurrentWager = 1previousWager = 'win'previousWagerAmount = initial_wager# 开始下注while currentWager <= wager_count:if previousWager == 'win':if rollDice():value += wagerwX.append(currentWager)vY.append(value)else:value -= wagerpreviousWager = 'loss'previousWagerAmount = wager     # 前一次赌注wX.append(currentWager)vY.append(value)if value < 0:double_busts += 1breakelif previousWager == 'loss':if rollDice():wager = previousWagerAmount * 2if(value - wager) < 0:          # 钱不够时wager = valuevalue += wagerwager = initial_wagerpreviousWager = 'win'wX.append(currentWager)vY.append(value)else:wager = previousWagerAmount * 2if(value - wager) < 0:wager = valuevalue -= wagerpreviousWager = 'loss'previousWagerAmount = wagerwX.append(currentWager)vY.append(value)if value <= 0:double_busts += 1breakcurrentWager += 1plt.plot(wX,vY,color)         # 画图# 分类if value>funds:double_profits += 1def simple_bettor(funds,initial_wager,wager_count,color):global simple_bustsglobal simple_profitsvalue = funds           # 资金wager = initial_wager   # 赌注wX = []                 # wager XvY = []                 # value YcurrentWager = 1# 开始下注while currentWager <= wager_count:if rollDice():value += wagerwX.append(currentWager)vY.append(value)else:value -= wagerwX.append(currentWager)vY.append(value)if value <= 0:simple_busts += 1breakcurrentWager += 1plt.plot(wX,vY,color)         # 画图# 分类if value > funds:simple_profits += 1def Print_result():print("总赌金:",startingFunds)print("开始每次赌金:",wagerSize)print("赌博次数:",wagerCount)print("赌钱人数:",sampleSize)print("Double Bettor Bust Chances:",(double_busts/sampleSize)*100.00)print("Simple Bettor Bust Chances:",(simple_busts/sampleSize)*100.00)print("Double Bettor Profit Chances:",(double_profits/sampleSize)*100.00)print("Simple Bettor Profit Chances:",(simple_profits/sampleSize)*100.00)x = 0
# 双倍下注法
double_busts = 0.0
double_profits = 0.0
# 单倍下注法
simple_profits = 0.0
simple_busts = 0.0while x < sampleSize:double_bettor(startingFunds,wagerSize,wagerCount,'c')simple_bettor(startingFunds, wagerSize, wagerCount,'k')x += 1plt.axhline(0,color='r')
plt.ylabel("Account Value")
plt.xlabel("Wager Count")
Print_result()
plt.show()

运行结果:
当赌博次数很大时,双倍下注破产率大于单倍下注法,但不管怎么说,100个人中赢的人很少,所以珍爱生命远离赌博。

模型小白,望大佬批评指点。
参考:https://www.bilibili.com/video/BV17D4y1o7J2?from=search&seid=15046903514947720514

蒙特卡洛—赌博模型笔记相关推荐

  1. python蒙特卡洛算法模拟赌博模型

    sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campai ...

  2. NLP模型笔记2022-31:neo4j+py2neo构建图GCN卷积神经网络数据集知识图谱(Karate俱乐部)

    [只展示图谱,下一篇文章给出GCN模型构建方法,将包含训练与预测两部分] 目录 往前文章链接 1.数据集 2.实现源码 3.图谱生成结果 参考资料 往前文章链接 NLP模型笔记2022-30:neo4 ...

  3. Pytorch训练Bilinear CNN模型笔记

    Pytorch训练Bilinear CNN模型笔记 注:一个项目需要用到机器学习,而本人又是一个python小白,根据老师的推荐,然后在网上查找了一些资料,终于实现了目的. 参考文献: Caltech ...

  4. 送你一份概率图模型笔记

    来源:NewBeeNLP 本文长度为2700字,建议阅读6分钟 本文为你分享一份概率图模型学习笔记,一起交流. 写在前面 其实接触概率图模型也有一段时间了,从开始入坑NLP起,也陆陆续续看了很多关于图 ...

  5. NLP:词向量与ELMo模型笔记

    目录: 基础部分回顾(词向量.语言模型) NLP的核心:学习不同语境下的语义表示 基于LSTM的词向量学习 深度学习中的层次表示以及Deep BI-LSTM ELMo模型 总结 1. 基础部分回顾(词 ...

  6. 数学之美-隐含马尔可夫模型-笔记

    <数学之美>吴军 著 第二版 --读书笔记 原理 通信模型: Created with Raphaël 2.1.2信息.上下文信息.上下文传递的信息传递的信息接收的信息接收的信息(s1,s ...

  7. 生成模型笔记预备知识笔记——概率分布变换

    最近准备课程分享,挑了一下最近比较火的AI作画方面的文章,结果发现这个领域水挺深的,也涉及到挺多数学方面的知识,得多做一下笔记.本文参考了这篇分享,算是这篇的一个读后笔记.PaperWeekly 第4 ...

  8. 生成模型笔记(六):生成模型

    尽人事以听天,吾唯日日谨慎而已. 本笔记仅为自己学习记录所用,参考的其他作者的内容见文中链接.如有不便,可以私信删除. 第六部分 生成模型 从这部分开始,正式进入生成模型的总结.之前的内容也都是在看生 ...

  9. 生物计算:SIR模型笔记

    1SIR模型 susceptible(易受感染的但没有被感染的) infected(感染的) recovered(恢复并免疫了的) 1.1  状态定义 第t天: 状态为S的人数 x(t) 状态为I的人 ...

  10. 字节跳动Deep Retrieval召回模型笔记

    今天讲讲字节的一个召回的文章:<Deep Retrieval: An End-to-End Learnable Structure Model for Large-Scale Recommend ...

最新文章

  1. 高级C语言教程-中断和设备驱动
  2. 用计算机弹没那种命,成熟小女人QQ个性网名 没那种命就别犯那种病
  3. 通过错误的sql来测试推理sql的解析过程
  4. 555定时器回差电压计算公式_555时基电路引脚解析
  5. jquery动画与事件案例
  6. [css] 举例说明你对相邻兄弟选择器的理解
  7. 405 - 不允许用于访问此页的 HTTP 谓词的处理办法
  8. java数字代码_Java基础08—数字类处理(示例代码)
  9. 「硬见小百科」30个EMC标准电路分享
  10. android 经纬度距离计算器,经纬度距离角度计算软件|经纬度距离角度计算器(geography) v2.0免费版_星星软件园...
  11. max点缓存烘焙帧_3DMAX怎么进行点缓存?
  12. 传智播客8月C/C++基础班开班
  13. 基于JAVA演唱会购票系统计算机毕业设计源码+系统+数据库+lw文档+部署
  14. Leaflet地图 - 绘制台风风圈 - 2
  15. 小技巧 - 如何在线下载 Google Play 里面的应用?
  16. dede模板加入php无法生成栏目,织梦后台更新后栏目无法生成,怎么办?
  17. 基于Scrapy的交互式漫画爬虫
  18. 计算:光速运行一年的长度是多少米?(测试整数运算溢出)
  19. 在线抓包工具Whistle
  20. 关闭Windows Update更新,解决服务主机本地系统CPU使用率高问题

热门文章

  1. GJB289A总线测试工装研究
  2. 飞机大战(源码+素材)
  3. Java实现的餐厅点餐系统源码Java点餐系统Java点餐系统Java网上订餐系统Java在线订餐系统
  4. cad道路里程桩号标注_CAD道路桩号自动编号插件
  5. 清除Tomcat日志
  6. 电大有计算机教程吗,电大教程 计算机概述.ppt
  7. 消灭WinRAR广告
  8. 工具类官网Web原型制作分享-Adobe
  9. Nxlog 配置总结
  10. 测试方法——正交表法