logo资料库

数学建模十大经典算法.doc

第1页 / 共36页
第2页 / 共36页
第3页 / 共36页
第4页 / 共36页
第5页 / 共36页
第6页 / 共36页
第7页 / 共36页
第8页 / 共36页
资料共36页,剩余部分请下载后查看
重要的算法
最短路算法:
Dijkstra算法Dijkstra复杂度是O(N^2),如果用binary heap优化可以达到
还有其他算法:
Floyd-Warshall算法 Bellman-Ford算法 Johnson算
实例:
某公司在六个城市中有分公司,从
运行结果为:
d =
0 35 45 35 25 10
index1 =
1 6 5 2 4 3
index2 =
1 6 5 6 1 1
即:
d(最短通路的值)
index1(标号顶点顺序)
1
6
5
2
4
3
index2(标号顶点索引)
建模十大经典算法 1、蒙特卡罗算法。 该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时通过模拟可以 来检验自己模型的正确性。 2、数据拟合、参数估计、插值等数据处理算法。 比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用 Matlab 作为工具。 3、线性规划、整数规划、多元规划、二次规划等规划类问题。 建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述, 通常使用 Lindo、Lingo、MATLAB 软件实现。 4、图论算法。 这类算法可以分为很多种,包括最短路、网络流、二分图等算法,涉及到图论的问题可 以用这些方法解决,需要认真准备。 5、动态规划、回溯搜索、分治算法、分支定界等计算机算法。 这些算法是算法设计中比较常用的方法,很多场合可以用到竞赛中。 6、最优化理论的三大非经典算法:模拟退火法、神经网络、遗传算法。 这些问题是用来解决一些较困难的最优化问题的算法,对于有些问题非常有帮助,但是 算法的实现比较困难,需慎重使用。 7、网格算法和穷举法。 网格算法和穷举法都是暴力搜索最优点的算法,在很多竞赛题中有应用,当重点讨论模 型本身而轻视算法的时候,可以使用这种暴力方案,最好使用一些高级语言作为编程工具。 8、一些连续离散化方法。 很多问题都是实际来的,数据可以是连续的,而计算机只认的是离散的数据,因此将其 离散化后进行差分代替微分、求和代替积分等思想是非常重要的。 9、数值分析算法。 如果在比赛中采用高级语言进行编程的话,那一些数值分析中常用的算法比如方程组求 解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用。 10、图象处理算法。 赛题中有一类问题与图形有关,即使与图形无关,论文中也应该要不乏图片的,这些图
形如何展示以及如何处理就是需要解决的问题,通常使用 Matlab 进行处理。 历年全国数学建模试题及解法 赛题 解法 93A 非线性交调的频率设计 拟合、规划 93B 足球队排名 94A 逢山开路 94B 锁具装箱问题 95A 飞行管理问题 图论、层次分析、整数规划 图论、插值、动态规划 图论、组合数学 非线性规划、线性规划 95B 天车与冶炼炉的作业调度 动态规划、排队论、图论 96A 最优捕鱼策略 96B 节水洗衣机 97A 零件的参数设计 微分方程、优化 非线性规划 非线性规划 97B 截断切割的最优排列 随机模拟、图论 98A 一类投资组合问题 多目标优化、非线性规划 98B 灾情巡视的最佳路线 图论、组合优化 99A 自动化车床管理 99B 钻井布局 00A DNA 序列分类 00B 钢管订购和运输 01A 血管三维重建 01B 公交车调度问题 02A 车灯线光源的优化 02B 彩票问题 03A SARS 的传播 随机优化、计算机模拟 0-1 规划、图论 模式识别、Fisher 判别、人工神经网络 组合优化、运输问题 曲线拟合、曲面重建 多目标规划 非线性规划 单目标决策 微分方程、差分方程 03B 露天矿生产的车辆安排 整数规划、运输问题 04A 奥运会临时超市网点设计 统计分析、数据处理、优化 04B 电力市场的输电阻塞管理 数据拟合、优化 05A 长江水质的评价和预测 预测评价、数据处理 05B DVD 在线租赁 随机规划、整数规划
06A 出版资源配置 06B 艾滋病疗法的评价及疗效的预测 07A 中国人口增长预测 07B 乘公交,看奥运 08A 数码相机定位 08B 高等教育学费标准探讨 09A 制动器试验台的控制方法分析 09B 眼科病床的合理安排 10A 10B 赛题发展的特点: 多目标规划 数据处理 图论 动态规划 1.对选手的计算机能力提出了更高的要求:赛题的解决依赖计算机,题目的数据较多,手工 计算不能完成,如 03B,某些问题需要使用计算机软件,01A。问题的数据读取需要计算机 技术,如 00A(大数据),01A(图象数据,图象处理的方法获得),04A(数据库数据,数 据库方法,统计软件包)。计算机模拟和以算法形式给出最终结果。 2.赛题的开放性增大 解法的多样性,一道赛题可用多种解法。开放性还表现在对模型假设和 对数据处理上。 3.试题向大规模数据处理方向发展 4.求解算法和各类现代算法的融合 从历年竞赛题来看,常用的方法: 线性规划 整数规划 图论方法 拟合方法 非线性规划 动态规划 层次分析法 插值方法 随机方法 微分方程方法 各种算法的详解 一、蒙特卡洛算法 1、含义的理解 以概率和统计理论方法为基础的一种计算方法。也称统计模拟方法,是指使用随机数(或更 常见的伪随机数)来解决很多计算问题的方法,它是将所求解的问题同一定的概率模型相 联系,用计算机实现统计模拟或抽样,以获得问题的近似解。 2、算法实例(有很多相似的例题,包括平行线等) 在数值积分法中,利用求单位圆的 1/4 的面积来求得 Pi/4 从而得到 Pi。单位圆的 1/4 面积是 一个扇形,它是边长为 1 单位正方形的一部分。只要能求出扇形面积 S1 在正方形面积 S 中 占的比例 K=S1/S 就立即能得到 S1,从而得到 Pi 的值。怎样求出扇形面积在正方形面积中 占的比例 K 呢?一个办法是在正方形中随机投入很多点,使所投的点落在正方形中每一个 位置的机会相等看其中有多少个点落在扇形内。将落在扇形内的点数 m 与所投点的总数 n 的比 m/n 作为 k 的近似值。P 落在扇形内的充要条件是 2 x 2 y  。 1
Pi 4 ,求 Pi。 已知:K= 1s s ,K  m ,s=1,s1= n *m s n *4m n m n = , m n Pi 4 由 1s s  ,知 s1  而 s1= ,则 Pi= 程序:(该算法可以修改后用 Mathematica 计算或者 Matlab) /* 利用蒙特卡洛算法近似求圆周率 Pi*/ /*程序使用:VC++6.0 */ #include #include #include #define COUNT 800 /*循环取样次数,每次取样范围依次变大*/ void main() { double x,y; int num=0; int i; for(i=0;i中*/ y=rand()*1.0/RAND_MAX; if((x*x+y*y)<=1) num++; /*统计落在四分之一圆之内的点数*/ } printf("Pi 值等于:%f\n",num*4.0/COUNT); } 结果: 测试 6 次的结果显示: 循环取样次数 800 8000 80000 800000 8000000 求得的 Pi 值 3.085000 3.110000 3.135200 3.139150 3.141393
3.141321 80000000 可以看出:随着点数的增加,求得的 Pi 值渐渐接近真实值。 如果加入程序:srand(time(NULL)); ,同时循环取样次数一定,让取样结果随时间变化,当 取样次数为 80000000 时,可得 6 次的结果显示: 3.141290 3、应用的范围 蒙特·卡罗方法在金融工程学,宏观经济学,计算物理学(如粒子输运 计算、量子热力学计算、空气动力学计算)等领域应用广泛。 4、参考书籍 [1]蒙特卡罗方法及其在粒子输运问题中的应用 [2]蒙特卡罗方法引论 3.141268 3.141484 3.141358 3.141462 3.141400 二、数据拟合、参数估计、插值等数据处理算法 (1)数据拟合 在 Mathematica 中,用 Fit 对数据进行最小二乘拟合:Fit[data,funs,vars] 在 Matlab 中,工具箱(toolboxes)中有曲线拟合工具(curve Fitting)。 实例: 2010 年苏北赛 B 题 温室中的绿色生态臭氧病虫害防治 中关于中华稻蝗密度与水稻减产 率之间的关系可以通过数据拟合来观察(简单举例,没有考虑全部数据) 数据: 密度(头/m2) 3 20 30 40 10 减产率(%) 2.4 12.9 16.3 20.1 26.8 程序(Mathematica): data={{3,2.4},{10,12.9},{20,16.3},{30,20.1},{40,26.8}}; a1=Fit[data,{1,x,x^2,x^3},x] Show[ListPlot[data,Filling->Axis],Plot[{a1},{x,0,60}]] 结果: -3.68428+2.38529 x-0.0934637 x2+0.00132433 x3 (2)参数估计(参考书:概率论与数理统计) 参数估计为统计推断的基本问题,分为点估计和区间估计。 点估计: ①矩估计法 X 连续型随机变量,概率密度 ( ; )n f x    , , 1 2 X 为离散型随机变量 分布律 { } P X x   ( ; )k p x    ,  , 1 , 2    为待估参数, 1 1 X X 2 , , k , , , 2 X 是来自 X 的样本,假设总体 X 的前 k 阶矩存在,为 n
 l  E X ( l ) 或  l  E X (       ) l x R  X l ( ; x f x    n ,  , 1 2 ) dx (X 连续型) ) l ( ; x p x    k  (X 离散型) 1,2,   (其中 XR 是 X 可能取 , 1 k l , , , 2 值的范围)。一般来说,它们是 1    的函数。基于样本矩 , , , 2 k A l 1 n   依概率收敛 n  1 i X l i 于相应的总体矩 ( l l    ,样本矩的连续函数依概率收敛于相应的总体矩的连续函 1,2, k ) 数,我们就用样本矩作为相应的总体矩的估计量,而以样本矩的连续函数作为相应的总体矩 的连续函数的估计量。这种估计方法成为矩估计法。 ②最大似然估计法 X 连续型随机变量 似然函数 L ( )   ( , L x x 1 2 ,  , x n ; )  是来自 X 的样本 1 X X , , X 的联合密度。 n 2 n   i 1  ( f x ; )  i 其中 n  i 1  ( ) f x  ; i X 为 离 散 型 随 机 变 量 似 然 函 数 L ( )   ( , L x x 1 2 ,  , x n ; )   n  i 1  ( p x i ;   ),  其 中 n  i 1  ( ) p x  ; i 是来自 X 的样本 1 X X , , X 的联合分布律。 n 2 若 L ( )   ( , L x x 1 2 ,  , x n ˆ ) max ( ;   , L x x 1   ,  , x ; )  n 2 ˆ(  则称 1 , x x 2 ,  为的最大似然估计值,称 x , )n ˆ(  X X 1 , 2 ,  , X )n 为的最大似然估计量。 这样,确定最大似然估计量的问题就归结为微分学中的求最大值的问题了。 估计量的评选标准为:(1)无偏性(2)有效性(3)相合性 区间估计: 对于一个未知量,人们在测量或计算时,常不以得到近似值为满足,还需要估计误差,即要 求知道近似值的精确程度(亦即所求真值所在的范围)。这样的范围常以区间的形式给出, 同时还给出此区间包含参数真值的可信度,这种形式的估计称为区间估计,这样的区间即所 谓置信区间。 正态总体均值、方差的置信区间与单侧置信限(置信水平为 1-) 枢轴量的分布 未知参数 其他参数 置信区间 一 个 正 态 总 体  2 已知 Z  X  /   n  N (0,1) ( X   z / 2 n  )
 2 2 未知 t  X S  n /  ( t n  1) ( X  S z / 2 n  ( n  1)) 未知 2   ( n 2 S 1)  2   2  ( n  1) ( ( n 2   1)  ( n S  2 1) , / 2 ( n 2  1   / 2 1) S ( n  2 1) ) 另外还包括两个正态总体的情况, 其他区间估计:(0-1)分布参数的区间估计 (3)插值 1、含义的理解 在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点。插值是 离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他 点处的近似值(与拟合的不同点在于拟合的函数不需通过每一个离散点)。 插值问题的提法是:假定区间[a,b]上的实值函数 f(x)在该区间上 n+1 个互不相 同点 x0,x1…xn 处的值是 f [x0],…f(xn),要求估算 f(x)在[a,b]中某点的值。 其做法是:在事先选 定的一个由简单函数构成的有 n+1 个参数 C0,C1,…Cn 的函 数类Φ(C0,C1,…Cn)中求出满足条件 P(xi)=f(xi)(i=0,1,… n)的函数 P(x), 并以 P()作为 f()的估值。此处 f(x)称为被插值函数,x0,x1,…xn 称为插值结(节) 点,Φ(C0,C1,…Cn)称为插值函数类,上面等式称为插值条件,Φ(C0,…Cn)中 满足上式的函数称为插值函数,R(x)= f(x)-P(x)称为插值余项。当估算点 属于包含 x0,x1…xn 的最小闭区间时,相应的插值称为内插,否则称为外插。 2、基本类型 多项式插值 在一般插值问题中,若选取Φ为 n 次多项式类,由插值条件可以唯一确定一个 n 次插 值多项式满足上述条件。拉格朗日插值和牛顿插值都属于多项式插值。 拉格朗日插值: 设连续函数 y = f(x)在[a, b]上对给定 n + 1 个不同结点: 1, x x 0 x 分别取函数值 0 , y y 1 , y , , , n n 其中 y i  ( f x i ) i   0,1, , n 试构造一个次数不超过 n 的插值多项式 ( ) P x n a x a x 1 2  a x n     a 2 0 n 使之满足条件 ( P x n i ) y i i  0,1,2,  , n 构造 n 次多项式 ( ) kl x k   0,1, , n 使 ( ) kl x = 1, k=i   0, k   i (1) (2) (3) (4)
由 ( P x n i )  n  k 1  ( y l x k k i )  y i i  0,1,2,  , n (5) 即 ( ) nP x 满足插值条件,于是问题归结为具体求出基本插值多项式 ( ) kl x 。 根据(4)式 ( ) kl x 以外所有的节点都是 ( ) kl x 的根,因此令 ( ) l x k  (  x  x 0 )( x  x 1 ) (  x  x k )( x  x k ) (  x  x n ) 1  1   n (  x  0 j  j k  x j ) 又由 ( ) kl x =1,得:   ( x k  x 0 )( x k  x 1 )  ( x k  1 x k )( x k 1   x k )  ( x k 1   x n ) 所以有 ( ) l x k  ( ( x k x   x )( x 0 )( x k x   0 ) ( x x  1 ( ) x x  1 k   x k x k 1   )( x )( x k x  1 k  x k 1  ) 1  ( x  ) (   x k x n  ) x n )  n x   x k 0 j  j k  x j x j 代入(5)得 拉格朗日插值多项式为: ( ) P x n  n  k  0 ( ) l x y k k  n n   k  0      0 j  j k  x x k   x j x j      y k 牛顿插值: (拉格朗日插值的缺点)拉格朗日插值公式的形式虽然有一定的规律, 但是当增加 一个节点时,不仅要增加项数,而且以前各项也必须重新全部计算,不能利用已有的 结果。为克服这一缺点,我们取用另一种形式――牛顿插值公式。 牛顿插值公式中用到了差商。一般称: [ , f x x 1 0 ,  , x n ]  [ , f x x 1 0 ,  , x ] [ , f x x   1 n x x  0 1 n ,  , x ] n 2 为 ( ) f x 在 0 1, x x , x 处的 n 阶差商。 , n 一阶差商 二阶差商 三阶差商 四阶差商 yi 差商可列表计算: xi x0 x1 x2 x3 f (x0) f (x1) f (x2) f (x3) f [x0, x1] f [x1, x2] f [x2, x3] f [x0, x1, x2] f [x1, x2, x3] f [x0, x1, x2, x3]
分享到:
收藏