蒙特卡洛模拟
Monte Carlo Simulation
Introduction
蒙特卡洛是西欧小国摩纳哥最著名的一区,以豪华的赌场闻名于世。(赌场,意味着大量重复的随机过程)
蒙特卡洛模拟是一种,通过大量随机采样,预测不确定事件可能结果的的数学技术。这个想法的数学保证是大数定律(Law of large numbers):样本数量越多,则其算术平均值就有越高的概率接近期望值
例子:相邻K的概率
问题:如果我们随机打乱一副牌(54张,加大小王),并按照打乱后的顺序依次平铺在桌面上,请问出现“两个K相邻”的概率是多少?
首先我们从理论上求解一下这个问题。设
现在我们用蒙特卡洛模拟来尝试一下!
编写随机过程如下:
import random
length=54
cards=[0]*length
def init():
for i in range(length):
cards[i]=i
def debug():
print(cards)
def check():
for i in range(length-1):
if cards[i]//4==12 and cards[i]//4==cards[i+1]//4:
return True
return False
def monte_carlo(n):
ans=0
for i in range(n):
init()
random.shuffle(cards)
ans+=check()
return ans/n*100
rep=[100,1000,10000,15000,20000,30000]
data=[]
for i in range(len(rep)):
data.append(monte_carlo(rep[i]))
运行程序,看看我们的结果
顺着随机采样次数变多,结果与理论值越来越接近~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律