数学建模竞赛中应该掌握的几种方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3.2. 交叉 对所选择的 M / 2 对母体,以概率 Pc 执行交叉,形成 M 个中间个体。 3.3. 变异 对 M 个中间个体分别独立以概率 Pm 执行变异,形成 M 个候选个体。 3.4. 选择(子代) 从上述所形成的 M 个候选个体中依据适应度选择出 N 个个 体组成新一代种群 X ( t 1) 。 步 4(终止检验) 如已满足终止准则,则输出 X ( t 1) 中具有最大适应度的个体作为最优解,终止 计算,否则置 t t 1 并转步 2。 以上运算过程只是遗传算法的多种实现方式中的一种,根据实际问题的不同,遗 传算法的实现也是多种多样的。
2、原理
模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却, 加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐 趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。 根据 Metropolis 准则,粒子在温度 T 时趋于平衡的概率为 e-ΔE/(kT),其 中 E 为温度 T 时的内能,ΔE 为其改变量,k 为 Boltzmann 常数。用固体退火 模拟组合优化问题, 将内能 E 模拟为目标函数值 f, 温度 T 演化成控制参数 t, 即得到解组合优化问题的模拟退火算法: 由初始解 i 和控制参数初值 t 开始, 对当前解重复“产生新解→计算目标函数差→接受或舍弃”的迭代,并逐步 衰减 t 值,算法终止时的当前解即为所得近似最优解,这是基于蒙特卡罗迭 代求解法的一种启发式随机搜索过程。退火过程由冷却进度表(Cooling Schedule)控制,包括控制参数的初值 t 及其衰减因子Δt、每个 t 值时的迭 代次数 L 和停止条件 S。 Metropolis 准则: 假设在状态 x old 时, 系统受到某种扰动而使其状态变为 x new 。 与此相对应,系统的能量也从 E (x old ) 变成 E (x new ) ,系统由状态 x old 变为状态 xnew 的接受概率 P:
3、运算过程
步 1(初始化) 确定种群规模 N ,交叉概率 Pc ,变异概率 Pm 和终止进化准则;随机生成
(0) N 个个体作为初始种群 X ;置 t 0 。
步 2(个体评价)
(0) 计算评估 X 中各个体的适应度。
步 3(种群进化)
(0) 3.1. 选择(母体)从 X 中运用选择算子选择出 M / 2 对母体( M N ) 。
三、蒙特卡洛算法 1、概念及来源
蒙特卡洛算法是一种以概率统计理论为指导的一类非常重要的数值计 算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方 法。即概率是他的基础。蒙特卡罗方法通过抓住事物运动的几何数量和几何 特征,利用数学方法来加以模拟,即进行一种数字模拟实验。它是以一个概 率模型为基础,按照这个模型所描绘的过程,通过模拟实验的结果,作为问 题的近似解。可以把蒙特卡罗解题归结为三个主要步骤:构造或描述概率过 程;实现从已知概率分布抽样;建立各种估计量。
2、 原理
设 x1,x2,x3,…,xN 是独立同分布的随机变量序列, 且有有限的数据期望 E(x)和方差 2 ,设 x 为 x1,x2,…,xN 的算术平方根,当 N 时 x 按概率 为 1 收敛于 E(x),用数学公式可表示为: 对于任意 >0,
1 N limP | x i - E (x) | 1 N i 1
4、应用
97 年 A 题的模拟退火算法。 模拟退火算法是一种通用的优化算法, 理论上算法具有概率的全局优化性能, 目前已在工程中得到了广泛应用,诸如 VLSI、生产调度、控制工程、机器学习、 神经网络、信号处理等领域。
二、 遗传算法 1、概念及来源
遗传算法(Genetic Algorithm)是一类借鉴生物界的进化规律(适者 生存,优胜劣汰遗传机制)演化而来的随机化搜索方法。其主要特点是直 接对结构对象进行操作,不存在求导和函数连续性的限定;具有内在的隐 并行性和更好的全局寻优能力;采用概率化的寻优方法,能自动获取和指 导优化的搜索空间,自适应地调整搜索方向,不需要确定的规则。 遗传算法搜索是通过选择与染色体之间的交叉和变异来完成的。遗传算法主 要使用选择算子、交叉算子与变异算子来模拟生物进化,从而产生一代又一
程序描述: matlab 利用蒙特卡洛算法近似求圆周率 PI function y = metekaro(nums) % 蒙特卡罗算法的简单模拟,输入 nums 对绝对值 x,y 都小于 1 的数 (x,y),通过落在圆内的点数来求 pi % 产生 nums 对坐标数据(x,y) D = unifrnd(-1,1,nums,2); % 落在圆中的点数 inCircle = 0; % 获取行数,也即 nums 的值 rows = size(D,1); % 对每一对数据进行检测 for i = 1:rows % 如果落在圆内,圆内的点数+1,落在正方形内的点数就为 nums 的数 值 if (D(i,1)^2 + D(i,2)^2) < 1 inCircle = inCircle + 1; end end % 圆的面积/正方形的面积 = 圆内的点数/正方形内的点数 y = 4*inCircle/rows; % 输出 pi 值 disp(['pi 的近似值为:' num2str(y)]) 计算结果: >> metekaro(1000);
蒙特卡洛方法的收敛于平常所说的收敛不同,它是概率意义上的收敛。
3、算法实例:(粒子运输)
问题描述:在数值积分法中,利用求单位圆的 1/4 的面积来求得 Pi/4 从 而得到 Pi 。单位圆的 1/4 面积是一个扇形,它是边长为 1 单位正方形的一部 分。只要能求出扇形面积 S1 在正方形面积 S 中占的比例 K=S1/S 就立即能 得到 S1 ,从而得到 Pi 的值。怎样求出扇形面积在正方形面积中占的比例 K 呢?一个办法是在正方形中随机投入很多点, 使所投的点落在正方形中每一 个位置的机会相等看其中有多少个点落在扇形内。将落在扇形内的点数 m 与所投点的总数 n 的比 m/n 作为 k 的近似值。 P 落在扇形内的充要条件是 x^2+y^2<=1 。
4、例子
求 sin(x) 在 0 到 3.14 之间的最大值. Step 1:编写目标函数 sin1.m function [sol, val] = sin1(sol,options) x=sol(1); val =sin(x); step 2:生成初始种群,大小为 10 initPop=initializega(10,[0, 3.14],'sin1',[],[1e-6,1]); step 3:25 次遗传迭代 [x, endPop,bpop,trace] = ga([0 3.14],'sin1',[],initPop,... [1e-6 1 1],'maxGenTerm',25,... 'normGeomSelect',[0.08],... ['arithXover'],[2],... 'nonUnifMutation',[2, 25 ,3])
数学建模竞赛中应该掌握的几种方法 一、 模拟退火算法 1、定义及来源
模拟退火算法(Simulated Annealing,SA)从某一较高初温出发,伴随温度 参数的不断下降,结合概率突跳特性在解空间中随机寻找目标函数的全局最优 解, 即在局部最优解能概率性地跳出并最终趋于全局最优。模拟退火算法是通过 赋予搜索过程一种时变且最终趋于零的概率突跳性, 从而可有效避免陷入局部极 小并最终趋于全局最优的串行结构的优化算法。
代的种群 X (t)。 (1)选择算子:是模拟自然选择的操作,反映“优胜劣汰”原理。它根据 每一个个体的适应度,按照一定规则或方法,从 t 代种群 X (t)中选择出一些优 良的个体(或作为母体,或让其遗传到下一代种群 X(t +1)) 。 (2)交叉算子:是模拟有性繁殖的基因重组操作,它将从种群 X (t)所选 择的每一对母体,以一定的交叉概率交换它们之间的部分基源自文库。 (3)变异算子:是模拟基因突变的遗传操作,它对种群 X (t)中的每一个 个体,以一定的变异概率改变某一个或某一些基因座上的基因值为其他的等 位基因。 交叉算子与变异算子的作用都在于重组染色体基因,以生成新的个体。
2、基本原理
遗传算法把问题的解表示成“染色体” ,在算法中也即是以二进制编码的串 (string) 。并且,在执行遗传算法之前,给出一群“染色体” ,也即是假设解。 然后,把这些假设解置于问题的“环境”中,并按适者生存的原则,从中选择出 较适应环境的“染色体”进行复制,再通过交叉,变异过程产生更适应环境的新 一代“染色体”群。这样,一代一代地进化,最后就会收敛到最适应环境的一个 “染色体”上,它就是问题的最优解。 具体来说就是: 长度为 L 的 n 个二进制串 bi(i=1,2,…,n)组成了遗传算法的初解群,也称 为初始群体。 在每个串中, 每个二进制位就是个体染色体的基因。 根据进化术语, 对群体执行的操作有三种: 1.选择(Selection) 这是从群体中选择出较适应环境的个体。这些选中的个体用于繁殖下一代。故有 时也称这一操作为再生(Reproduction)。由于在选择用于繁殖下一代的个体时, 是根据个体对环境的适应度而决定其繁殖量的,故而有时也称为非均匀再生 (differential reproduction)。 2.交叉(Crossover) 这是在选中用于繁殖下一代的个体中, 对两个不同的个体的相同位置的基因进行 交换,从而产生新的个体。 3.变异(Mutation) 这是在选中的个体中,对个体中的某些基因执行异向转化。在串 bi 中,如果某 位基因为 1,产生变异时就是把它变成 0;反亦反之。
pi 的近似值为:3.088 >> metekaro(100000); pi 的近似值为:3.1409 >> metekaro(10000000); pi 的近似值为:3.1413 python 利用蒙特卡洛算法近似求圆周率 PI import random import time random.seed() nums=100000 i=range(1,nums) s=0 print nums print time.strftime('Str:%Y-%m-%d %H:%M:%S',time.localtime(time.time()) ) for x in i: a1=random.random() a2=random.random() if (a1*a1+a2*a2)<1: s=s+1 print 1.0*s/nums*4 print time.strftime('End:%Y-%m-%d %H:%M:%S',time.localtime(time.time()) ) 运行结果:3.14248

3、流程
1)随机产生一个初始解 x0 ,令 xbest x0 ,并计算目标函数值 E (x 0 ) ; 2)设置初始温度 T(0)=T0,迭代次数 i=1; 3)Do while T(i)> Tmin a、for j=1-k b、对于当前最优解 xbest 按照某一邻域函数,产生一新的解 xnew 。计 算新的目标函数值 E(xnew) ,并计算目标函数值的增量 E E ( xnew ) - E (x best ) 。 c、如果 E 0 ,则 x best xnew d、如果 E 0 ,则 p exp(-E/T(i)) ;如果 c=random[0,1]<p, x best xnew ,否则 xbest xbest e、End for i=i+1; End do 输出当前最有点,计算结果。
相关文档
最新文档