非线性整数优化问题的求解

Monte Carlo方法简介
       今天向大家介绍一下我现在主要做的这个东东。 Monte Carlo方法又称为随机抽样技巧或统计实验方法,属于计算数学的一个分支,它是在上世纪四十年代中期,为适应当时的曼哈顿计划需求而在美国Los Alamos实验室发展起来的,说白了就是美国为了造原子弹才逼出来的。Monte Carlo方法与一般的计算方法有很大的区别,一般计算方法对解决多维或因素复杂的问题非常困难,而Monte Carlo方法对解决这类问题却比较简单,因此Monte Carlo方法自从它诞生之日起就得到了快速的发展,现以发展成为计算数学中一个不可缺少的重要组成部分。

       Monte Carlo方法创始人主要是这四位:Stanislaw Marcin Ulam, Enrico Fermi, John von Neumann(学计算机的肯定都认识这个牛人吧)和 Nicholas Metropolis。 Stanislaw Marcin Ulam是波兰裔美籍数学家,早年是研究拓扑的,后因参与曼哈顿工程,兴趣遂转向应用数学,他首先提出用Monte Carlo方法解决计算数学中的一些问题,然后又将其应用到解决链式反应的理论中去,可以说是MC方法的奠基人;Enrico Fermi是个物理大牛,理论和实验同时都是大牛,这在物理界很少见,在“物理大牛的八卦”那篇文章里提到这个人很多次,对于这么牛的人只能是英年早逝了(别说我嘴损啊,上帝都嫉妒!);John von Neumann可以说是计算机界的牛顿吧,太牛了,结果和Fermi一样,被上帝嫉妒了;Nicholas Metropolis,希腊裔美籍数学家,物理学家,计算机科学家,这个人对Monte Carlo方法做的贡献相当大,正式由于他提出的一种什么算法(名字忘了),才使得Monte Carlo方法能够得到如此广泛的应用,这人现在还活着,与前几位牛人不同,Metropolis很专一,他一生主要的贡献就是Monte Carlo方法。 

        Monte Carol方法这个名字比较有意思,为什么叫Monte Carlo呢?这得从Monte Carlo方法的历史讲起。原来卓卓跟我吹牛b的时候提到过一个地方叫摩纳哥,在法国(不是摩洛哥哦,这个在北非),Monte Carlo是摩纳哥的一个地名,有人说摩纳哥只有两个地方,除了皇宫就是Monte Carlo……MonteCarlo与拉斯维加斯、澳门并称为世界三大赌城。Ulam说之所以叫做Monte Carlo方法,是为了纪念他的舅舅,而他的舅舅是个赌徒,经常去Monte Carlo赌钱,所以就叫做Monte Carlo方法,这个理由确实比较诡异,不过如果了解Monte Carlo方法原理的话,我们会发现Monte Carlo方法其实就是个赌博游戏,叫这个名字还是很贴切的。         现在来看一下为什么说MC方法是赌博游戏,这要从它的基本思想入手。MC方法的基本思想是:当所要求解的问题是某种事件出现的概率或者是某个随机变量的期望时,可以通过某种实验的方法得到该事件出现的概率,或者这个随机变量的平均值,并用它们作为问题的解。应用MC方法解决实际问题时,并不是像通常的数理统计方法那样通过真实的实验来完成的,而是抓住事物运动过程的数量和几何特征,利用数学方法加以模拟,即进行一种数字模拟实验,模拟实验的次数越多,其模拟结果就越接近于真实值。对于特定的数学或物理问题,若要得到较为准确的模拟结果,往往需要上万次,甚至数十万、数百万次的数字模拟实验,其运算量相当庞大,因此在电子计算机没有发明以前,MC方法本身并没有多大的发展与应用。在电子计算机出现和飞速发展以后,利用MC方法进行大量的数字模拟实验成为可能,MC方法终于迎来了发展的春天。由此可见,MC方法是与电子计算机的发展紧密的联系在一起的,是数理统计与电子计算机相结合的产物。   上一段说的比较抽象,下面可以举个简单的例子:比如说要计算圆周率pi,用MC方法解决此问题的思路如下:   x=(random#)*r y=(random#)*r dist=sqrt(x^2 + y^2) if dist.from.origin (less.than.or.equal.to) r let hits=hits+1         上面这段话可以这样理解:在一个边长为r的正方形内均匀投点,然后判断所投点是否落在与此正方形内切的半径为r的圆内,若点落在圆内,则记录之,否则不记录。那么,如果所投的点足够多且足够均匀的话,落在圆内的点的数目除以总投点数既为圆面积与正方形面积之比,知道了这个值,我们就能够得出pi的值了。         上面这个例子只是为了说明MC方法的原理,并不能体现出MC方法的优越性,我们来想想下面这个稍微复杂点的例子:扑克摆别扭大家都玩过吧?如果操作无误的话,问一副扑克摆别扭能解开的几率有多少?这个只要制定好规则,用MC方法解就非常easy,别的方法就无法想象了…………………………………………         由此可见,MC方法说白了其实就是暴力破解法,用咱们的话讲就叫做“简单粗暴”!所以有人把MC方法叫做“最后的方法”。但往往就是这种简单粗暴的方法在处理复杂问题时是非常有效的,上面讲的只是一个最简单的例子,类似的,我们还可以通过MC方法计算各种复杂变态的定积分,方法与上面算pi的手段完全一样。         现在MC方法已经应用于许多领域,在物理方面,通过MC方法可以模拟粒子与物质相互作用时,发生的各种反应,并对我们感兴趣的物理量进行统计,这里面许多物理量是通过实验手段无法测量的;在金融学领域,好多大公司都用MC方法计算风险投资的风险系数;前几天还看到一篇埃及人的文章是用MC方法模拟埃及的洪灾,然后指导如何修水坝的……总之,只要建立的模型足够好,MC得出的结论就非常可信,还能模拟出统计涨落呢,太逼真了。
时间: 2024-10-22 08:40:48

非线性整数优化问题的求解的相关文章

经典优化问题的求解(持续更新)

这篇博客将会聊一些经典的需要opt的一些问题,方便我/大家在将来推导公式并需要优化时可以想到对应的方式进行优化. 如果连公式都推导出来了但是不会求解岂不是很尴尬(不知道可以转化成求解的话连代码都写不了= =) Question 1 given matrix A and vector b,minimize ||Ax-b||2.(当A的行数大于b的列数时,可能没有满足Ax-b=0) 基础方法x* = (ATA)-1ATb,这种方法是必然可以求解的. Question 2 minimize ||Ax|

hdu 5036 Explosion (bitset优化的传递闭包求解概率)

Explosion Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 142    Accepted Submission(s): 25 Problem Description Everyone knows Matt enjoys playing games very much. Now, he is playing such a g

OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波

http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 2013-03-23 17:44 16963人阅读 评论(28) 收藏 举报 分类: 机器视觉(34) 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] KAZE系列笔记: OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 OpenCV学习笔记(28)KA

MATLAB 非线性优化函数fmincon

本文由olivewy编写,原地址:http://www.cnblogs.com/olivewy/p/5148428.html  优化成功或失败 一.求解失败 1.在到达迭代次数阈值或目标函数估值次数阈值时,求解器没有最小化目标到要求的精度,此时求解器停止.接下来,可以尝试以下方法: (1)设置‘Display’为‘iter’,查看每步的迭代信息,这些信息包括:目标函数(Fval or f(x) or Resnorm)是否是下降的:检查约束越界(Max constraint)是否是递减趋向于0:查

深度学习之(十一)Deep learning中的优化方法:随机梯度下降、受限的BFGS、共轭梯度法

Deep learning中的优化方法 三种常见优化算法:SGD(随机梯度下降),LBFGS(受限的BFGS),CG(共轭梯度法). 1.SGD(随机梯度下降) 随机梯度下降(Stochastic Gradient Descent, SGD)是随机和优化相结合的产物,是一种很神奇的优化方法,属于梯度下降的一种,适用于大规模问题. 要想扯清楚它,还得先谈谈梯度下降.众所周知,每个优化问题都会有一个目标函数F(w)F(w),梯度下降采用迭代的策略,从初始点w0w0开始,每次沿着目标函数在当前点的负梯

Mosek.ApS.Mosek.v7.1 MOSEK数学优化软件包/线性分析HEEDS.MDO.2015.04.2

Mosek.ApS.Mosek.v7.1 MOSEK数学优化软件包Mosek.ApS.Mosek.v7.1.Win32_64 2CD Mosek.ApS.Mosek.v7.1.Linux32_64 2CD Mosek.ApS.Mosek.v7.1.MacOSX 1CDMosek Optimization Tools 是一款MOSEK优化软件包,是一款用来解决大规模级别数学优化问题的软件.MOSEK提供了特定解决线性编程.混 合整数编程以及其它非线性转换优化问题.+++++++++++++++++

最长上升子序列的二分优化

http://blog.csdn.net/wall_f/article/details/8295812 作者写的太好了,转载一下~ 我简单总结一下,我的理解. 最长上升子序列的转移方程:b[k]=max(max(b[j]|a[j]<a[k],j<k)+1,1); 其优化主要在求解当前最长长度是要查找前面的b数组中是否有最大的值,且当前期a[j]<a[k],因此就是要找小于当前值的最大值. 所以我们一般需要从1~k-1扫描一遍找到最大值,复杂度为o(n^2),耗时太长. 因此我们可以直接记

返回一个整数数组中最大子数组的和(环)

要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 求所有子数组的和的最大值.要求时间复杂度为O(n). 思路: 结对开发:张子超 马思勉 刚看到这个题目首先想到的是将随机产生的数组复制一遍放在原数组后面,然后再进行求解,后来在和马思勉的探讨中得到新的解决思路,首先按照求解整数数组方法,

《凸优化》学习笔记(一)

?凸优化在数学优化中有着重要且特殊的身份.数学优化是一个广泛的话题,理解凸优化之前,请先理解线性优化.在机器学习算法中,已知的比如LogisticRegression,SVM,都与数学优化有关,在数学中,不存在无约束优化问题.比较常见的构建损失函数方法,从最简单的两个向量的二阶范数的平方(KNN,Kmeans)到linearRegression.LogisticRegression的最小二乘模型,再到SVM的二次凸优化,都和数学优化理论紧密相关.本篇笔记主要学习数学优化的前奏部分:凸优化的概念部