首页 > 其他分享 >蒙特卡洛模拟

蒙特卡洛模拟

时间:2023-07-25 20:25:43浏览次数:36  
标签:def 相邻 range 随机 cards 蒙特卡洛 模拟

Monte Carlo Simulation

Introduction

蒙特卡洛是西欧小国摩纳哥最著名的一区,以豪华的赌场闻名于世。(赌场,意味着大量重复的随机过程)

蒙特卡洛模拟是一种,通过大量随机采样,预测不确定事件可能结果的的数学技术。这个想法的数学保证是大数定律(Law of large numbers):样本数量越多,则其算术平均值就有越高的概率接近期望值

例子:相邻K的概率

问题:如果我们随机打乱一副牌(54张,加大小王),并按照打乱后的顺序依次平铺在桌面上,请问出现“两个K相邻”的概率是多少?

首先我们从理论上求解一下这个问题。设\(P(k相邻)\)表示题目所示条件的概论。根据总概率为1的条件,显而易见,\(P(k相邻)=1-P(k不相邻)\)。要想计算k不相邻的情况,可以先把剩余50张牌完全打乱,然后将4张k随机插到由50张版形成的间隔中。

\[P(k相邻)=1-P(k不相邻)=1-\frac{\frac{51!}{(51-4)!}\times50!}{54!}\approx20.98\% \]

现在我们用蒙特卡洛模拟来尝试一下!

编写随机过程如下:

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]))

运行程序,看看我们的结果
image

顺着随机采样次数变多,结果与理论值越来越接近~

标签:def,相邻,range,随机,cards,蒙特卡洛,模拟
From: https://www.cnblogs.com/ticmis/p/17580911.html

相关文章

  • 3.1 模拟 参考代码
    P2670[NOIP2015普及组]扫雷游戏#include<cstdio>charmine[105][105];intdx[8]={-1,-1,-1,0,0,1,1,1};intdy[8]={-1,0,1,-1,1,-1,0,1};intmain(){intn,m;scanf("%d%d",&n,&m);for(inti=0;i<n;......
  • CSP模拟4
    悲,昨天存本地忘发了,今天又不想写模拟5的。考了四道ARC就离谱。A.LIStoOriginalSequence首先考虑\(k=1\),唯一的方案就是倒序输出\(1\)到\(n\)。我们可以想到,这道题的方法是向已经确定的序列\(A\)中插入其他数。对于一个数\(x(x<A_i)\),是不能把它放在\(A_i......
  • uni-app 中模拟器真机运行项目
    1.安装模拟器MuMu 2.配置环境变量找到HbuilderX的安装目录,查找adb.exe文件,复制serve.exe所在文件目录的路径,配置到系统变量的Path中         3.在模拟器中进行配置注意:端口为7555不同模拟器的默认端口是不一样的adb的路径一定是HbuilderX的adb路径,使......
  • 【Python】蒙特卡洛模拟 | PRNG 伪随机数发生器 | LCG 线性同余算法 | 马特赛特旋转算
    ......
  • memcpy/memmove模拟实现
    void*my_memmove(void*dest,constvoid*src,size_tnum){ assert(dest&&src); void*ret=dest; if((char*)dest<(char*)src)//从前向后移 { while(num--) { *(char*)dest=*(char*)src; dest=(char*)dest+1; src=(char*)src+1; } } else......
  • SpringBoot中使用测试框架MockMvc来模拟HTTP请求测试Controller接口
    场景Java中进行单元测试junit.Assert断言、Mockito模拟对象、verify验证模拟结果、Java8中lambda的peek方法使用:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/127492361上面讲了开发过程中一些测试方法。如果需要在代码中直接测试某个Controller接口,除了每次启......
  • 在 Arch 配置 i3-wm 终端模拟器 xterm
    在Arch配置i3-wm终端模拟器xterm关于怎么在Arch安装i3-wm可以查看上一篇文章......
  • 「赛后总结」20230724 CSP 模拟赛
    「赛后总结」20230724CSP模拟赛点击查看目录目录「赛后总结」20230724CSP模拟赛总结。题解T1最长上升子序列ARC125C思路代码T2独特序列ARC125D思路代码T3最大GCDARC126C思路代码T4连续子段ARC126D思路代码想听歌,想看巨人,但是没有条件。总结。rk1三个首杀,前......
  • CSP 模拟 4
    今日推歌:SerenadeinG‘EinekleineNachtmusik’K525-WolfgangAmadeusMozart今天比赛直接搬的ARC125,126的CD题,那这样我也能出模拟赛(但是为什么HZOI2022都不写比赛题解,差评今天被HZOI2023,2024薄纱,我直接退役得了T1最长上升子序列考虑一个明显字典序不是......
  • strncmp/strstr 模拟实现
    constchar*my_strstr(constchar*str1,constchar*str2){ assert(str1&&str2); if(!*str2)//逆反逻辑,非0为真,假假为真 returnstr1; constchar*p1=NULL;//不改变str1和str2 constchar*p2=NULL; constchar*start=str1; while(*start) { p1=start;//p1需......