蒙特卡罗算法(Monte Carlo method)

蒙特卡罗方法概述

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

蒙特卡罗方法的基本思想

用事件发生的“频率”来决定事件的“概率”。高速电子计算机使得用数学方法在计算机上大量、快速地模拟这样的试验成为可能。

蒙特卡罗方法的基本原理

设有统计独立的随机变量Xi(i=1,2,3,…,k),其对应的概率密度函数分别为fx1,fx2,…,fxk,功能函数式为Z=g(x1,x2,…,xk)。

首先根据各随机变量的相应分布,产生N组随机数x1,x2,…,xk值,计算功能函数值 Zi=g(x1,x2,…,xk)(i=1,2,…,N),若其中有L组随机数对应的功能函数值Zi≤0,则当N→∞时,根据伯努利大数定理及正态随机变量的特性有:结构失效概率,可靠指标。

从蒙特卡罗方法的思路可看出,该方法回避了结构可靠度分析中的数学困难,不管状态函数是否非线性、随机变量是否非正态,只要模拟的次数足够多,就可得到一个比较精确的失效概率和可靠度指标。

蒙特卡罗方法分子模拟计算的步骤

蒙特卡罗方法实施步骤:

1、通过敏感性分析,确定随机变量;

2、构造随机变量的概率分布模型;

3、为各输入随机变量抽取随机数;

4、将抽得的随机数转化为各输入随机变量的抽样值;

5、将抽样值组成一组项目评价基础数据;

6、根据基础数据计算出评价指标值;

7、整理模拟结果所得评价指标的期望值、方差、标准差和它的概率分布及累计概率,绘制累计概率分布图,计算项目可行或不可行的概率。

蒙特卡罗方法应用

1.求π

#include <bits/stdc++.h>

#define MAX_ITERS 10000000

using namespace std;

double Rand(double L, double R)
{
    return L + (R - L) * rand() * 1.0 / RAND_MAX;
}

double GetPi()
{
    srand(time(NULL));
    int cnt = 0;
    for(int i = 0; i < MAX_ITERS; i++)
    {
        double x = Rand(-1, 1);
        double y = Rand(-1, 1);
        if(x * x + y * y <= 1)
            cnt++;
    }
    return cnt * 4.0 / MAX_ITERS;
}

int main()
{
    for(int i = 0; i < 10; i++)
        cout <<  fixed << setprecision(10)<<GetPi() << endl;
    return 0;}

2.求e

#include <bits/stdc++.h>

#define MAX_ITERS 10000000

using namespace std;

struct Point
{
    double x, y;
};

double Rand(double L, double R)
{
    return L + (R - L) * rand() * 1.0 / RAND_MAX;
}

Point getPoint()
{
    Point t;
    t.x = Rand(1.0, 2.0);
    t.y = Rand(0.0, 1.0);
    return t;
}

double getResult()
{
    int m = 0;
    int n = MAX_ITERS;
    srand(time(NULL));
    for(int i = 0; i < n; i++)
    {
        Point t = getPoint();
        double res = t.x * t.y;
        if(res <= 1.0)
            m++;
    }
    return pow(2.0, 1.0 * n / m);
}

int main()
{
    for(int i = 0; i < 20; i++)
        cout << fixed << setprecision(10) << getResult() << endl;
    return 0;
}
//precision() 返回当前的浮点数精度值
//precision(val) 设置val为新的浮点数精度值, 并返回原值
//setf(flags) 添加格式标志flags, 返回所有标志的原本状态.
//showpos    正数前面加上+号
//fixed 使用小数计数法
//scientific 使用科学计数法
//uppercase 使用大写字符
//showbase  显示数字的进制
//boolalpha    bool值使用字符表示 , true或者false
//noboolalpha     bool使用0和1表示
//left   靠左对齐
//right  靠右对齐
//internal 字符靠左对齐, 数字卡右对齐

参考:

[1]http://blog.csdn.net/acdreamers/article/details/44978591

[2]MBA智库:http://wiki.mbalib.com/wiki/%E8%92%99%E7%89%B9%E5%8D%A1%E7%BD%97%E6%96%B9%E6%B3%95

时间: 2024-11-12 09:48:44

蒙特卡罗算法(Monte Carlo method)的相关文章

蒙特卡罗方法(Monte Carlo method)

蒙特卡罗方法(Monte Carlo method) 蒙特卡罗方法概述   蒙特卡罗方法又称统计模拟法.随机抽样技术,是一种随机模拟方法,以概率和统计理论方法为基础的一种计算方法,是使用随机数(或更常见的伪随机数)来解决很多计算问题的方法.将所求解的问题同一定的概率模型相联系,用电子计算机实现统计模拟或抽样,以获得问题的近似解.为象征性地表明这一方法的概率统计特征,故借用赌城蒙特卡罗命名. 蒙特卡罗方法的提出   蒙特卡罗方法于20世纪40年代美国在第二次世界大战中研制原子弹的"曼哈顿计划&qu

(转)Monte Carlo method 蒙特卡洛方法

转载自:维基百科  蒙特卡洛方法 https://zh.wikipedia.org/wiki/%E8%92%99%E5%9C%B0%E5%8D%A1%E7%BE%85%E6%96%B9%E6%B3%95 蒙特卡洛方法[编辑] 维基百科,自由的百科全书 蒙特卡洛方法(英语:Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法.是指使用随机数(或更常见的伪随机数)来解决很多

Monte carlo

转载 http://blog.sciencenet.cn/blog-324394-292355.html 蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数"的计算方法. 1.起源 这一方法源于美国在第二次世界大战进研制原子弹的"曼哈顿计划".Monte Carlo方法创始人主要是这四位:Stanislaw Marcin Ulam, Enrico Fermi, John von Neumann(学计算机的肯定都认识这个牛人吧)和 N

概率算法 蒙特卡罗算法

/***Date:2014.12.11***/ //概率算法思想:统计学思路. //基本过程:1)将问题转化为应的容易计算面积的几何图形S,问题结果对应几何图形中的某一部分S1: ////////////2)向几何图形中随机撒点: ////////////3)统计几何图形S.S1中的点数,根据二者面积关系以及二者中的点数来计算得到结果: ////////////4)判断结果是否达到需要精度结果,若符合则输出,否则继续(2)步骤. //蒙特卡罗(Monte Carlo)算法 //均匀撒点:利用随机

MCMC(Markov Chain Monte Carlo) and Gibbs Sampling

MCMC(Markov Chain Monte Carlo) and Gibbs Sampling 1.   随机模拟 随机模拟(或者统计模拟)方法有一个很酷的别名是蒙特卡罗方法(Monte Carlo Simulation).这个方法的发展始于20世纪40年代,和原子弹制造的曼哈顿计划密切相关,当时的几个大牛,包括乌拉姆.冯.诺依曼.费米.费曼.Nicholas Metropolis, 在美国洛斯阿拉莫斯国家实验室研究裂变物质的中子连锁反应的时候,开始使用统计模拟的方法,并在最早的计算机上进行

History of Monte Carlo Methods - Part 1

History of Monte Carlo Methods - Part 1 Some time ago in June 2013 I gave a lab tutorial on Monte Carlo methods at Microsoft Research. These tutorials are seminar-talk length (45 minutes) but are supposed to be light, accessible to a general computer

Introduction To Monte Carlo Methods

Introduction To Monte Carlo Methods I’m going to keep this tutorial light on math, because the goal is just to give a general understanding. The idea of Monte Carlo methods is this—generate some random samples for some random variable of interest, th

Experiment 22 - Monte Carlo Simulation

Experiment 22 - Monte Carlo SimulationDepartment of Electrical Engineering & ElectronicsSeptember 2019, Ver. 3.4Experiment specificationsModule(s) ELEC224 / ELEC273Experiment code 22Semester 1Level 2Lab location PC labs, third floor/fourth floor, che

Introduction to Monte Carlo Tree Search (蒙特卡罗搜索树简介)

 部分翻译自“Monte Carlo Tree Search and Its Applications”. MCTS 结合了传统 MC 随机采样的方法 和 树搜索的方法.MC 方法利用重复的随机采样来得到结果.在 MCTS 中,随机采样的过程是在随机模拟的形式中,用来拓展游戏树.该游戏树紧接着别用来决定下一个 move.MCTS 随着游戏树迭代的生长.每一次迭代,game tree 就 traversed 和 expanded.一段时间之后,game tree 就会收敛.这意味着在每次迭代中都