热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

蒙特卡罗算法理解和简单实现

1蒙特卡罗算法简介蒙特卡罗(MonteCarlo)算法并不是一种特定的算法,而是对一类随机算法的特性的概括。它的名字来源于赌城蒙特卡罗,象征概率。它的

1 蒙特卡罗算法简介

蒙特卡罗(Monte Carlo)算法并不是一种特定的算法,而是对一类随机算法的特性的概括。它的名字来源于赌城蒙特卡罗,象征概率。它的基本思想是通过大量随机样本,去了解一个系统,进而得到要计算的值。它非常强大灵活,又相当简单易懂,很容易实现。

2 蒙特卡罗算法与拉斯维加斯算法比较

随机算法分为两大类:蒙特卡罗算法和拉斯维加斯算法,都是以著名的赌城命名的,且都是通过随机采样尽可能找到最优解。

比较项目蒙特卡罗算法拉斯维加斯算法
规律采样越多,越逼近最优解采样越多,越有可能找到最优解
例子从不透明的苹果筐中挑最大的苹果从一串钥匙中试出能开锁的钥匙
策略尽量找好的,但不保证是最好的尽量找最好的,但不保证能找到(除非全枚举)
适用情景(依问题而定)要求在有限采样内,必须给出一个解,但不要求是最优解对采样要求没有限制,要求必须给出最优解

3 蒙特卡罗算法的简单python实现

下面就用蒙特卡罗随机取样的思想近似求解圆周率π
正方形内部有一个内切的圆,通过简单计算可知内切圆和正方形的面积比为π/4,因此通过在直角坐标系的第一象限随机取点,统计落在圆内的点,其与总取样点数的比例即为π/4,将该比例乘以4即可得π。示意图和代码如下:
这里写图片描述

#-*-coding:utf-8-*-
import random
def calcPi(n):count &#61; 0for i in range(n):x &#61; random.uniform(0,1.0) #在[0,1]区间均匀地随机取样y &#61; random.uniform(0,1.0)if(x**2&#43;y**2<&#61;1):count &#43;&#61; 1return 4.0*count/n #注意4要写成浮点数的形式&#xff0c;否则结果只保留整数
print calcPi(30000) #取30000个样本点

一次计算结果为3.15226666667,误差不到0.5%&#xff0c;且取样点数越多&#xff0c;结果越接近。

参考&#xff1a;
1.蒙特卡罗方法入门
2.知乎&#xff1a;蒙特卡罗算法是什么


推荐阅读
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • Python使用Pillow包生成验证码图片的方法
    本文介绍了使用Python中的Pillow包生成验证码图片的方法。通过随机生成数字和符号,并添加干扰象素,生成一幅验证码图片。需要配置好Python环境,并安装Pillow库。代码实现包括导入Pillow包和随机模块,定义随机生成字母、数字和字体颜色的函数。 ... [详细]
  • Python教学练习二Python1-12练习二一、判断季节用户输入月份,判断这个月是哪个季节?3,4,5月----春 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 本文介绍了使用Python解析C语言结构体的方法,包括定义基本类型和结构体类型的字典,并提供了一个示例代码,展示了如何解析C语言结构体。 ... [详细]
  • Python操作MySQL(pymysql模块)详解及示例代码
    本文介绍了使用Python操作MySQL数据库的方法,详细讲解了pymysql模块的安装和连接MySQL数据库的步骤,并提供了示例代码。内容涵盖了创建表、插入数据、查询数据等操作,帮助读者快速掌握Python操作MySQL的技巧。 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
author-avatar
斯宾诺沙漏
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有