精华内容
下载资源
问答
  • 各种蒙特卡罗算法蒙特卡罗蒙特卡罗算法算法的应用,有实例,很好蒙特卡罗蒙特卡罗蒙特卡罗算法法
  • 分别介绍了蒙特卡罗方法和拟蒙特卡罗方法的基本思想,从算法本身、误差估计以及收敛率等角度分析了蒙特卡罗方法和拟蒙特卡罗方法的关系,并着重分析其在高维积分中的应用,从而说明拟蒙特卡罗方法的优越性。
  • 蒙特卡罗

    2019-10-09 04:41:08
    考虑平面上的一个边长为1的正方形及其内部的一个形状不规则的...蒙特卡罗算法表示采样越多,越近似最优解。举个例子,假如筐里有100个苹果,让我每次闭眼拿1个,挑出最大的。于是我随机拿1个,再随机拿1个跟它比,留...

    考虑平面上的一个边长为1的正方形及其内部的一个形状不规则的“图形”,如何求出这个“图形”的面积呢?Monte Carlo方法是这样一种“随机化”的方法:向该正方形“随机地”投掷N个点,有M个点落于“图形”内,则该“图形”的面积近似为M/N。

    蒙特卡罗算法表示采样越多,越近似最优解。举个例子,假如筐里有100个苹果,让我每次闭眼拿1个,挑出最大的。于是我随机拿1个,再随机拿1个跟它比,留下大的,再随机拿1个……我每拿一次,留下的苹果都至少不比上次的小。拿的次数越多,挑出的苹果就越大,但我除非拿100次,否则无法肯定挑出了最大的。这个挑苹果的算法,就属于蒙特卡罗算法。告诉我们样本容量足够大,则最接近所要求解的概率。

    参考:  https://wiki.mbalib.com/wiki/%E8%92%99%E7%89%B9%E5%8D%A1%E7%BD%97%E6%96%B9%E6%B3%95

    转载于:https://www.cnblogs.com/youngvoice/p/10770377.html

    展开全文
  • 很有用的哦 蒙特卡罗方法 蒙特卡罗方法 蒙特卡罗方法
  • 分别介绍蒙特卡罗方法和拟蒙特卡罗方法解线性方程组的基本原理,并对两种方法的误差和收敛速度进行讨论.提出误差由3方面造成:截断误差、方法本身、伪随机数序列和低差异序列分布不均匀.在收敛速度方面:蒙特卡罗...
  • 蒙特卡罗方法通常可用于解决物理和数学中难以应用分析方法的问题。 这些方法使用随机数并使用概率论来解决问题。 这个方法可以通过解决小问题来理解。 这段代码演示了一个如此简单的问题; 使用蒙特卡罗方法计算 pi...
  • 蒙特卡罗方法是以概率统计原理为基础,模拟事物的形成过程,以达到认识事物特征及其变化规律的方法。 这种方法的前提假设是不确定性参数可以用概率分布来描述。 蒙特卡罗方法是以概率和统计理论方法为基础的一种...

    1、理解

    蒙特卡罗方法是以概率统计原理为基础,模拟事物的形成过程,以达到认识事物特征及其变化规律的方法。 这种方法的前提假设是不确定性参数可以用概率分布来描述。

    蒙特卡罗方法是以概率和统计理论方法为基础的一种计算方法,目的是用随机概率的方式(抽样或统计模拟)求解一定计算问题的近似解(不同可能解的概率大小)。

    2、蒙特卡罗方法的工作过程

    在解决实际问题的时候应用蒙特·卡罗方法主要有两部分工作:

    1. 用蒙特·卡罗方法模拟某一过程时,需要产生各种概率分布的随机变量。

    2. 用统计方法把模型的数字特征估计出来,从而得到实际问题的数值解。

    3、模拟过程

    蒙特卡洛模拟在实际的项目管理应用中一般较为复杂,而且很多时候用在专业的项目风险分析软件里面(比如Pertmaster),通常用在较为大型的项目和企业中。我们这篇文章只是为了让童鞋们对于蒙特卡洛模拟有个更为直观清晰的认识,同时鉴于篇幅和不至于让讲解过于晦涩,所以这儿我们只是准备用Excel工具来简单地模拟和介绍一下蒙特卡洛模拟的实施操作过程,这样大家也能对蒙特卡洛模拟有个更为直观地了解。

    我们以定量分析项目总持续时间为例来简要介绍一下蒙特卡洛模拟。比如说我们现在有个项目,该项目共有三个WBS要素分别是设计、建造和测试,为了简单起见我们假设这三个WBS要素的预估的工期概率分布都呈标准正态分布,各自的平均工期、标准差以及最悲观、最可能和最乐观的估计工期如下图所示(我们这儿简单地认为基于正态分布的工期的最悲观/最乐观的估算工期定在均值正负3个标准差的位置),而且三者之间都是完成到开始的逻辑关系,这样整个项目工期就是这三个WBS要素工期之和。

    现在我们需要用蒙特卡洛模拟来以这三个要素的工期的分布为输入,来模拟得到整个项目的工期概率分布图。由于设计、建造和测试这三个要素都是呈标准正态分布,我们可以根据上面表格中的各自的均值和标准差数据大致画出这三个要素工期的概率分布图如下面的样子:

    我们要用蒙特卡洛模拟来定量分析整个项目的工期进度风险。于是我们用计算机来模拟项目的实施,我们的思路是: 第一步:随机选取每个WBS要素的工期值作为输入(因为每个要素的工期不是恒定的,本身就是一个估计的分布区间); 第二步:然后把三个WBS要素的值相加得到整个项目的工期值,这样就完成了一次模拟; 第三步:重复第一二步,然后就这样一次一次的模拟,需要模拟成千上万次最终得到成千上万个整个项目总工期的数值; 第四步:再对这些海量模拟次数得到海量总工期数值进行统计分析,得出其最终的项目总工期估计的概率分布。

    我们先做第一步。第一步需要我们先产生这些每个要素的随机工期值。Excel里面有个函数可以生成呈正态分布的随机数,就是NORMINV。我们的设计要素的第一个随机工期取值的公式就是这么写的:=ROUND(NORMINV(RAND(),$E$3,$F$3),0),如下图所示:

    解释一下这个公式:ROUND(NORMINV(RAND(),$E$3,$F$3),0),RAND() 是生成0到1之间的随机数,NORMINV(RAND(),$E$3,$F$3) 是生成呈均值为E3(图中为14)、标准差为F3(图中为2)的正态分布的随机数,ROUND 是四舍五入的意思,这样回车我们就生成了设计这个要素的第一个随机工期值17。同理我们把这个公式值往下拉,复制400次(我们此例中模拟400次),就得到了400个呈正态分布的随机工期值;然后建造和测试的随机工期值也是照葫芦画瓢,这样我们就得到了这3个要素的400次模拟的随机值,再每次的3个要素的随机值相加得到总工期的模拟值,如下图所示:

    此时前三步就做完了得到了总工期的一组数据(400个)。现在开始做第四步对这组数据做统计分析和作图。

    4.1 先把总工期这一列(图中E列)400个值拷贝一份,粘贴数值到另外一列(注意粘贴的时候选择“选择性粘贴”然后选“值”,因为随机数随时变动,这儿需要把值固定下来),用MAX和MIN函数计算出这一列400个值的最大值为76,和最小值为45,作为分组依据,然后在旁边 I 列依次升序排列42-78(前后多取几个数值图像更完整)这部分数值作为分组数据,如下图所示:

    4.2 然后计算每个分组数据在总工期这组数据中出现的概率,这儿需要用到函数FREQUENCY,计算概率的公式为:=FREQUENCY(H8:H407,I8:I40)/400,意思是统计每个分组数据在总工期这一组数据中出现的次数,再除以模拟总次数400就得到这个分组数据出现的概率。再计算一个累积概率值,累积概率值就是前面的所有单个概率值加起来的概率,比如算分组数据46的累积概率值就是把46以下的数值的概率值全部加起来,这样我们就得到关于分组数据在总工期这组数据中出现的概率和累积概率的数据,如下表格所示:

    4.3 通过对上面表格的数据,以分组数据为X轴,出现概率和累积概率的值为Y轴于是可以做出下面关于总工期的概率分布图:

    红色柱状图是整个项目估计刚好多少天完工的概率数据,比如图中60天对应的概率大约是11%,表示整个项目刚好60天完工的概率是11%;蓝线就是我们PMBOK上定量风险分析得到的那张S曲线图,也是我们最终蒙特卡洛模拟需要得到的最终的模拟输出:总工期的概率分布图。通过这个S曲线,我们可以预测整个项目在多少天内完工的概率。比如我们需要预测整个项目在56天完工的概率,通过S曲线了解到56天对应的累积概率是34%左右,也就是整个项目56天内完工的概率是34%,那么56天内不能完工的概率就是1-34%=66%,这就是风险。如果觉得风险太高无法接受,那么我们可以把工期适当规划长一些,比如60天,这样查询S曲线可以得到60天内整个项目完工的概率是70%,这样就只有剩下30%的不能按时完工的风险,项目在进度方面的风险就大大降低了。

    以上案例来自:https://www.zhihu.com/question/263316961/answer/362674489

    展开全文
  • 蒙特卡罗算法简介 蒙特卡罗算法简介 蒙特卡罗算法简介
  • 蒙特卡罗算法举例 蒙特卡罗算法举例 蒙特卡罗算法举例
  • 蒙特卡罗方法课件 蒙特卡罗方法PPT 包含的内容有:1.蒙特卡罗方法概述 2.随机数 3.由巳知分布的随机抽样 4.蒙特卡罗方法解粒子输运问题 5.蒙特卡罗方法在计算机上的实现 6.蒙特卡罗方法在通量计算中的应用 7.蒙特...
  • 此实用功能提供了一种工具,可在蒙特卡罗模拟框架内快速包含随机过程。 主要的输入参数是一个包含 Matlab 语法命令的字符串。 此类字符串的每次执行都是随机过程的一个实例。 函数表达式MCS 通过运行 N 次迭代的...
  • 蒙特卡罗算法 MATLAB 代码 蒙特卡罗算法 MATLAB 代码 蒙特卡罗算法 MATLAB 代码 蒙特卡罗算法 MATLAB 代码
  • 偏振蒙特卡罗主程序偏振蒙特卡罗主程序偏振蒙特卡罗主程序偏振蒙特卡罗主程序偏振蒙特卡罗主程序偏振蒙特卡罗主程序偏振蒙特卡罗主程序偏振蒙特卡罗主程序偏振蒙特卡罗主程序偏振蒙特卡罗主程序偏振蒙特卡罗主程序...
  • 这是用于计算函数 f_x = x^2 的三重积分的 MATLAB 代码,使用 trapz、积分函数和蒙特卡罗模拟结果从零到十的限制验证所有三个都生成相同且正确的结果。
  • 浙江大学数学系的博士论文. 关于蒙特卡罗及拟蒙特卡罗方法的若干研究
  • 蒙特卡罗模型

    2018-06-09 13:40:48
    蒙特卡罗模型。
  • 这是为了展示使用 Simulink 实现蒙特卡罗模拟的可能性。 需要统计工具箱来生成随机变化。 请留下评论建议的更新和功能。 有关在 Simulink 中使用 Monte Carlo 方法的更多信息,请参阅: ...
  • 蒙特卡罗算法论文

    2018-11-29 21:10:48
    经典的蒙特卡罗算法的论文,详细描述了利用蒙特卡罗方法模拟光子的传输过程
  • 蒙特卡罗围棋搜索

    2018-05-09 09:34:32
    本文详细讲解了蒙特卡罗搜索如何解决围棋静态评估难题,以及如何应用蒙特卡罗算法。
  • 蒙特卡罗方法

    2020-05-31 14:48:45
    Python 编程实现蒙特卡罗方法何为蒙特卡罗方法,如何解决实际问题?何为蒙特卡罗方法应用实例不规则区域的面积 何为蒙特卡罗方法,如何解决实际问题? 何为蒙特卡罗方法 几何上来说,蒙特卡罗方法就是用离散的点来...

    何为蒙特卡罗方法,如何解决实际问题?

    何为蒙特卡罗方法

    几何上来说,蒙特卡罗方法就是用离散的点来填充规则的指定区域,对其中满足条件的点进行计数,然后算的不规则区域的面积或体积。

    应用实例

    不规则区域的面积

    数学题 求xy=2,xy=3,y^2 =x,y^2=2x维=围成的面积

    方法:数学的二重积分加雅克比变换,编程上可以用蒙特卡罗方法

    废话不多说,直接看代码

    import numpy as np
    import matplotlib.pyplot as plt
    s0=0.63 #小矩形的面积
    N=10000
    x=np.random.uniform(1.2,2.1,size=N)
    y=np.random.uniform(1.2,1.9,size=N)
    c=0
    for i in range(N):
        a=x[i]
        b=y[i]
        if a*b>=2 and a*b<=3 and b**2<=2*a and b**2>=a:
            plt.plot(a,b,'c+')
            c+=1
        else:
            plt.plot(a,b,'g+')
    plt.show()
    plt.savefig('Montelaro.png')
    print(c/N*s0, np.log(2)/3)
            
    

    下面是结果:

    0.22686299999999998 0.23104906018664842

    在这里插入图片描述

    不规则区域的体积

    下面以求半径为1的半球的体积为例

    用规则的区域框住目标区域,注意这里如果是直角坐标取样的话必须是正方体或长方体,而不能是球,如果要在其他坐标系下取样的话,要乘雅克比行列式后再算概率

    直角坐标取样

    import numpy as np
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D     
    x=np.random.uniform(-1,1,N)
    y=np.random.uniform(-1,1,N)
    z=np.random.uniform(-1,1,N)
    fig=plt.figure()
    ax=fig.gca(projection='3d')
    lx1=[]
    ly1=[]
    lz1=[]
    lx2=[]
    ly2=[]
    lz2=[]
    c=0
    for i in range(N):
        if z[i]>=0 and x[i]**2+y[i]**2+z[i]**2<=1:
            lx1.append(x[i])
            ly1.append(y[i])
            lz1.append(z[i])   
            c+=1
        else:
            lx2.append(x[i])
            ly2.append(y[i])
            lz2.append(z[i])      
    ax.plot(lx1,ly1,lz1,'m+')
    ax.plot(lx2,ly2,lz2,'y+')
    print(c/N*8,2*np.pi/3)
    

    下面是结果:

    2.076 2.0943951023931953

    在这里插入图片描述
    球坐标取样

    import numpy as np
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D     
    r=np.random.uniform(0,1,N)
    theta=np.random.uniform(0,2*np.pi,N)
    fi=np.random.uniform(0,np.pi,N)
    c=0
    n=0
    fig=plt.figure()
    ax=fig.gca(projection='3d')
    lx1=[]
    ly1=[]
    lz1=[]
    lx2=[]
    ly2=[]
    lz2=[]
    for i in range(N):
        s=r[i]**2*np.sin(fi[i])#球坐标下的雅克比系数
        #球坐标转直角坐标
        x=r[i]*np.sin(fi[i])*np.cos(theta[i])
        y=r[i]*np.sin(fi[i])*np.sin(theta[i])
        z=r[i]*np.cos(fi[i])
        if fi[i]<=np.pi/2:
            c+=s
            lx1.append(x)
            ly1.append(y)
            lz1.append(z)      
        else:
            lx2.append(x)
            ly2.append(y)
            lz2.append(z)      
        n+=s
    ax.plot(lx1,ly1,lz1,'m+')
    ax.plot(lx2,ly2,lz2,'y+')
    print(c/n,0.5)
            
    

    下面是结果:

    0.4976573249364734 0.5

    在这里插入图片描述
    有时候不是很精确,通过增加N-取点个数或每次取个平均值都是可以的。

    展开全文
  • 蒙特卡罗方法(Monte Carlo Methods)是强化学习中基于无模型的训练方法 蒙特卡罗预测的目的是来预测状态值(state value)。
  • 蒙特卡罗方法模拟.doc

    2021-05-19 14:32:07
    蒙特卡罗模拟
  • 蒙特卡罗

    2016-05-11 16:30:03
    蒙特卡罗文献、C代码和matlab代码
  • MATLAB-蒙特卡罗方法

    万次阅读 2019-08-16 20:14:48
    什么叫蒙特卡罗方法? 蒙特卡罗方法又称统计模拟法、随机抽样技术,是一种随机模拟方法,以概率和统计理论方法为基础的一种计算方法,是使用随机数(或伪随机数)来解决很多计算问题的方法。将所求解的问题同一定...

    什么叫蒙特卡罗方法?

           蒙特卡罗方法又称统计模拟法、随机抽样技术,是一种随机模拟方法,以概率和统计理论方法为基础的一种计算方法,是使用随机数(或伪随机数)来解决很多计算问题的方法。将所求解的问题同一定的概率模型相联系,用电子计算机实现统计模拟或抽样,以获得问题的近似解。为象征性地表明这一方法的概率统计特征,故借用赌城蒙特卡罗命名。

    基本思想

           当所求问题的解是某个事件的概率,或者是某个随机变量的数学期望,或者是与概率,数学期望有关的量时,通过某种试验的方法,得出该事件发生的概率,或者该随机变量若干个具体观察值的算术平均值,通过它得到问题的解。

           当随机变量的取值仅为1或0时,它的数学期望就是某个事件的概率。或者说,某种事件的概率也是随机变量(仅取值为1或0)的数学期望。

    蒙特卡罗方法的特点

    优点:

    1、能够比较逼真地描述具有随机性质的事物的特点及物理实验过程

    2、受几何条件限制小

    3、收敛速度与问题的维数无关

    4、具有同时计算多个方案与多个未知量的能力

    5、误差容易确定

    6、程序结构简单,易于实现

    缺点:

    1收敛速度慢

    2误差具有概率性

    3在粒子输运问题中,计算结果与系统大小有关    

          所以在使用蒙特卡罗方法时,要“扬长避短”,只对问题中难以用解析(或数值)方法处理的部分,使用蒙特卡罗方法计算,对那些能用解析(或数值)方法处理的部分,应当尽量使用解析方法

    什么是随机数?

          在连续型随机变量的分布中,最简单而且最基本的分布是单位均匀分布。由该分布抽取的简单子样称为随机数序列,其中每一个体称为随机数

    符号:

    两个特点:独立性,均匀性

    产生随机数

    随机数表方法

          随机数表是由0,1,2,3,4,5,6,7,8,9十个数字组成,每个数字以0.1的等概率出现,数字之间相互独立,这些数字序列叫作随机数字序列。 (如果要得到n位有效数字的随机数,只需将表中每n个相邻的随机数字合并在一起,且在最高位的前边加上小数点即可。例如,某随机数表的第一行数字为7 6 3 4 2 5 8 9 1...,要想得到三位有效数字的随机数一次为0.763,0.425,0.891...)

    物理方法

          利用某些物理现象,在计算机上增加些特殊设备,可以在计算机上直接产生随机数。 作为随机数发生器的物理源主要有两种:一种是根据放射性物质的放射性,另一种是利用计算机的固有噪声。

          一般情况下,任意一个随机数在计算机内总是用二进制的数表示的:或者为0,或者为1。因此,利用物理方法在计算机产生随机数,就是要产生只取0或1的随机数字序列,数字之间相互独立,每个数字取0或1的概率均为0.5

    缺点

          随机数表需在计算机中占有很大内存,而且也难以满足蒙特卡罗方法对随机数需要量非常大的要求,因此,该方法不适于在计算机上使用。

          物理方法产生的随机数序列无法重复实现,不能进行程序复算。给验证结果带来很大困难。而且增加随机数发生器和电路联接等 附加设备,费用昂贵。因此该方法也不适合在计算机上使用。

    伪随机数

         用递推公式

    产生随机数序列。  

    伪随机数存在的两个问题

           递推公式和初始值确定后,整个随机数序列便被唯一确定。不满足随机数相互独立的要求。 由于随机数序列是由递推公式确定的,而在计算机上所能表示的[0,1]上的数又是有限的,因此,这种方法产生的随机数序列就不可能不出现重复。随机数序列出现周期性的循环现象。

    解决方案

    第一个问题:不能从本质上加以改变,但只要递推公式选的比较好,随机数间的相互独立性是可以近似满足的。

    第二个问题:因为用蒙特卡罗方法解任何具体问题时,所使用的随机数的个数总是有限的,只要所用随机数的个数不超过伪随机数序列出现循环现象时的长度就可以了。

    应用:蒙特卡罗方法计算积分

           可以通俗地说,蒙特卡罗方法是用随机试验的方法计算积分,即将所要计算的积分看作服从某种分布密度函数f(r)的随机变量g(r)的数学期望        

    通过某种试验,得到N观察值r1,r2,…,rN(用概率语言来说,从分布密度函数f(r)中抽取N个子样r1,r2,…,rN,),将相应的N个随机变量的值g(r1),g(r2),…,g(rN)的算术平均值  

     

    作为积分的估计值(近似值)。 

    蒙特卡罗方法步骤如下:

    1、在区间【a,b】上利用计算机均匀产生n个随机数x1,x2·····xn,这个可以在MATLAB软件中用unifrnd命令实现。

    2、计算每一个随机数相应的被积函数值f(x1),f(x2)····f(xn)。

    3、计算被积函数值的平均值

    4、所以2.1式的值≈

    简单定积分例子:用蒙特卡罗方法求

    首先我们进行严格的数学计算, 便于后面与蒙特卡洛计算方法所得结果形成对比:已知 e^x的原函数是e^x,那么定积分值就是:

    我们可以在Matlab中输入以下代码进行精确计算:exp(2)-exp(0),这个值是此定积分的真实值. 下面进行蒙特卡洛计算上述定积分,其MATLAB代码如下:

    N=500; 
    x=unifrnd(0,2,N,1); 
    y=(2-0)*mean(exp(x))

    上述三条语句完整实现了蒙特卡洛计算上述定积分步骤.第一条语句是设定了停止条件, 共做N次Monte Carlo 模拟.第二条语句实现了在积分区间上均匀产生N个随机数.第三条语句实现蒙特卡洛计算方法的面积逼近.对N设置不同的值,观察所得蒙特卡洛计算方法定积分值,如表1所示,我们可以发现:当不断增大N值时,所得结果越来越接近真实值.

    蒙特卡罗计算方法性质:

    蒙特卡洛计算方法依据概率统计理论,具有统计特性,主要表现在以下三个方面.

    1.蒙特卡洛计算方法具有随机性、不确定性.即每次运行结果都会不一样,因为计算机产生随机数并不是可以重现的.

    2.蒙特卡洛计算方法具有统计稳定性。虽然每次运行产生随机数是不一样的,但是随机数的概率分布是一样的,所以蒙特卡洛计算方法可以满足概率统计的稳定性.

    3.随着随机数数量增加,蒙特卡洛计算方法所得结果会更加逼近真实值,这就是我们所讲的依概率收敛到真实值意义.

    %%  蒙特卡罗方法求定积分
    %给定曲线y =2 – x2 和曲线y3 = x2,曲线的交点为:P1( – 1,1 )、P2( 1,1 )。
    %曲线围成平面有限区域,用蒙特卡罗方法计算区域面积。
    %随机产生100000个点
    P=rand(100000,2);
    %定义x y 的范围
    x=2*P(:,1)-1;
    y=2*P(:,2);
    %找出在函数范围的数
    % k = find(X) 返回一个包含数组 X 中每个非零元素的线性索引的向量。
    % 如果 X 为向量,则 find 返回方向与 X 相同的向量。
    % 如果 X 为多维数组,则 find 返回由结果的线性索引组成的列向量。
    % 如果 X 包含非零元素或为空,则 find 返回一个空数组。
    II=find(y<=2-x.^2&y.^3>=x.^2);
    %计算索引的长度
    M=length(II);
    %计算面积
    S=4*M/100000
    plot(x(II),y(II),'g.')
    
    

     

    展开全文
  • 蒙特卡罗计算积分

    2020-10-20 23:34:25
    通常情况下,我们不能解析地求解积分,必须借助其他方法,其中就包括蒙特卡罗积分。你可能还记得,函数的积分可以解释为函数曲线下的面积。 蒙特卡罗积分的工作原理是在a和b之间的不同随机点计算一个函数,将矩形的...
  • 蒙特卡罗模拟.zip

    2020-02-23 21:20:00
    蒙特卡罗模拟.zip
  • 包括了用Matlab实现的蒙特卡罗方法源代码,蒙特卡罗方法讲解的PPT,同时有使用蒙特卡罗方法的demo.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,216
精华内容 1,686
关键字:

蒙特卡罗