建模十大经典算法
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的传播 03B 露天矿生产的车辆安排
04A奥运会临时超市网点设计 04B电力市场的输电阻塞管理 05A长江水质的评价和预测 05B DVD在线租赁
解法 拟合、规划
图论、层次分析、整数规划 图论、插值、动态规划 图论、组合数学 非线性规划、线性规划 动态规划、排队论、图论 微分方程、优化 非线性规划 非线性规划 随机模拟、图论 多目标优化、非线性规划 图论、组合优化 随机优化、计算机模拟 0-1规划、图论
模式识别、Fisher判别、人工神经网络 组合优化、运输问题 曲线拟合、曲面重建 多目标规划 非线性规划 单目标决策 微分方程、差分方程 整数规划、运输问题 统计分析、数据处理、优化 数据拟合、优化 预测评价、数据处理 随机规划、整数规划
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落在扇形内的充要条件是 x?y?1 。
22
s1mPi,K?,s=1,s1=,求Pi。 sn4s1mmm由?,知s1?*s=, snnnPim而s1=,则Pi=*4
n4已知:K=
程序:(该算法可以修改后用Mathematica计算或者Matlab)
/* 利用蒙特卡洛算法近似求圆周率Pi*/ /*程序使用:VC++6.0 */ #include
#define COUNT 800 /*循环取样次数,每次取样范围依次变大*/ void main() {
double x,y; int num=0; int i;
for(i=0;i x=rand()*1.0/RAND_MAX;/*RAND_MAX=32767,包含在 num++; /*统计落在四分之一圆之内的点数*/ } printf(\值等于:%f\\n\ } 结果: 测试6次的结果显示: 循环取样次数 800 8000 80000 800000 8000000 求得的Pi值 3.085000 3.110000 3.135200 3.139150 3.141393 80000000 3.141321 可以看出:随着点数的增加,求得的Pi值渐渐接近真实值。 如果加入程序:srand(time(NULL)); ,同时循环取样次数一定,让取样结果随时间变化,当取样次数为80000000时,可得6次的结果显示: 3.141290 3.141400 3.141268 3.141484 3.141358 3.141462 3、应用的范围 蒙特·卡罗方法在金融工程学,宏观经济学,计算物理学(如粒子输运 计算、量子热力学计算、空气动力学计算)等领域应用广泛。 4、参考书籍 [1]蒙特卡罗方法及其在粒子输运问题中的应用 [2]蒙特卡罗方法引论 二、数据拟合、参数估计、插值等数据处理算法 (1)数据拟合 在Mathematica中,用Fit对数据进行最小二乘拟合:Fit[data,funs,vars] 在Matlab中,工具箱(toolboxes)中有曲线拟合工具(curve Fitting)。 实例: 2010年苏北赛B题 温室中的绿色生态臭氧病虫害防治 中关于中华稻蝗密度与水稻减产率之间的关系可以通过数据拟合来观察(简单举例,没有考虑全部数据) 数据: 密度(头/m) 3 减产率(%) 2.4 210 12.9 20 16.3 30 20.1 40 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连续型随机变量,概率密度f(x;?1,?2L,?n) X为离散型随机变量 分布律P{X?x}?p(x;?1,?2,L,?k) ?1,?2,L,?k为待估参数,X1,X2,LXn是来自X的样本,假设总体X的前k阶矩存在,为