《matlab在运筹学中的应用.ppt》由会员分享,可在线阅读,更多相关《matlab在运筹学中的应用.ppt(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、MATLAB 在运筹学中的应用在运筹学中的应用 绪绪 论论v优化求解工作中常用的软件:优化求解工作中常用的软件:v1、Matlab v2、Mathematicav3、Maplev4、SASv5、SPSSv6、Lindo/Lingov7、GAMSv8、WinQSBv9、Excelv10、其他,如、其他,如SQP、DPS、ORS、Visual Decision、Decision Explore、AIMMS、Crystal Ball、TreeAge等。等。Matlab(Matrix Laboratory)专业级的数值计算和符号计算、强大的绘图功能、可视化建模仿真和实时控制从事理论研究的数学工作者和其
2、他科学工作者 强大的符号计算能力 输入格式有严格的规定SAS(Statistical Analysis System)誉为统计分析的标准软件,统计方法齐、全、新集数据存取、管理、分析和展现于一体政府行政管理、科研、教育、生产和金融等领域 SPSS(Statistical Package for the Social Sciences)2000(Statistical Product and Service Solutions)最早的统计分析软件类似Execl表格的方式输入和管理数据应用最广泛的专业统计软件Lindo/Lingo 求解最优化问题的软件包线性规划、二次规划、整数规划、非线性规划解算
3、器寻最佳模型进行求解,公式表示Lingo优化问题的建模语言,可与文本、Excel、数据库对接GAMS(General Algebraic Modeling System)针对大型、复杂系统的建模针对大型、复杂系统的建模建模迅速、易修改,丰富的模型求解引擎建模迅速、易修改,丰富的模型求解引擎 WinQSB(Quantitative Systems for Business)基于模块化设计的专业运筹规划和决策辅助软件基于模块化设计的专业运筹规划和决策辅助软件规划问题、计划编制、抽样分析、规划问题、计划编制、抽样分析、MRPMRP、质量控制、质量控制、马尔可夫过程、决策分析等马尔可夫过程、决策分析等
4、通过通过加载宏加载宏功能功能扩展为一个优化求解的工具扩展为一个优化求解的工具Matlab简介简介v概述概述Matlab是矩阵实验室(是矩阵实验室(Matrix Laboratory)的简称,是美国)的简称,是美国MathWorks公司公司出品的商业数学软件,和出品的商业数学软件,和Mathematica、Maple并称为三大数学软件。并称为三大数学软件。用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括互式环境,主要包括Matlab和和Simulink两大部分。两大部分。主要应用于工程计算、
5、控制设计、信号处理与通讯、图像处理、信号检测、金主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。融建模设计与分析等领域。具有广泛应用前景的全新的计算机高级编程语言具有广泛应用前景的全新的计算机高级编程语言v产生与发展产生与发展70年代后期,基于特征计算的程序库年代后期,基于特征计算的程序库EISPACK和线性代数程序库和线性代数程序库LINPACK(FORTRAN语言)语言)1984年,年,MathWorks公司正式推出的商业化版本,公司正式推出的商业化版本,C C语言;语言;1992年,基于年,基于Windows平台的平台的Matlab4.0,6.
6、52004年,年,7.x2006a,2006b,.,2011a,2011b。v优势强大易用的科学计算语言全面的图形功能独立开放的平台实用的程序接口Simulink动态仿真功能vMatlab是一个交互式开发系统,其基本数据单元是矩阵。是一个交互式开发系统,其基本数据单元是矩阵。vMathWorks公司的描述:计算、可视化及编程一体公司的描述:计算、可视化及编程一体v常用网址:vMATLAB 产品族可以用来进行以下各种工作:v数值分析 v数值和符号计算 v工程与科学绘图 v控制系统的设计与仿真 v数字图像处理 技术 v数字信号处理 技术 v通讯系统设计与仿真 v财务与金融工程 vMATLAB 的应
7、用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用MATLAB 函数集)扩展了MATLAB 环境,以解决这些应用领域内特定类型的问题。v Matlab Main Toolboxmatlab主工具箱vControl System Toolbox控制系统工具箱vCommunication Toolbox通讯工具箱vFinancial Toolbox财政金融工具箱vSystem Identification Toolbox系统辨识工具箱vFuzzy Logic Toolbox模糊逻辑工具箱vHigher-Orde
8、r Spectral Analysis Toolbox高阶谱分析工具箱vImage Processing Toolbox图象处理工具箱vcomputer vision system toolbox-计算机视觉工具箱vLMI Control Toolbox线性矩阵不等式工具箱vModel predictive Control Toolbox模型预测控制工具箱v-Analysis and Synthesis Toolbox分析工具箱vNeural Network Toolbox神经网络工具箱vOptimization Toolbox优化工具箱vPartial Differential Toolbo
9、x偏微分方程工具箱vRobust Control Toolbox鲁棒控制工具箱vSignal Processing Toolbox信号处理工具箱vSpline Toolbox样条工具箱vStatistics Toolbox统计工具箱vSymbolic Math Toolbox符号数学工具箱vSimulink Toolbox动态仿真工具箱vWavele Toolbox小波工具箱vDSP system toolbox-DSP处理工具箱Matlab界面窗口MATLAB菜单菜单MATLAB工具栏工具栏工工作作空空间间窗窗口口/当当前目录浏览器窗口前目录浏览器窗口历史命令窗口历史命令窗口开始按钮开始按钮
10、命令窗口命令窗口MATLAB界面窗口 vMATLABMATLAB中变量区别于其他编程语言的特点中变量区别于其他编程语言的特点MATLAB表达式中可以使用表达式中可以使用矩阵形式矩阵形式;MATLAB中中不需要预先声明变量的类型和维数不需要预先声明变量的类型和维数,MATLAB会根据对新变量的会根据对新变量的操作创建该变量,确定其类型并为其分配存储空间;操作创建该变量,确定其类型并为其分配存储空间;对已经存在的变量的赋值操作,对已经存在的变量的赋值操作,MATLAB会以新值代替旧值。如果需要的话,会以新值代替旧值。如果需要的话,MATLAB可以改变该变量的类型或者为其分配新的存储空间可以改变该变
11、量的类型或者为其分配新的存储空间;MATLAB中的变量名是中的变量名是大小写敏感大小写敏感的,即的,即A和和a代表不同的变量;代表不同的变量;矩阵特征值参数运算v一、矩阵的行列式一、矩阵的行列式函数:函数:det(A)v二、矩阵的迹二、矩阵的迹函数:函数:trace(A)v三、矩阵的秩三、矩阵的秩函数:函数:rank(A)v四、矩阵的范数四、矩阵的范数函数:函数:norm(A,选项),选项)v五、矩阵的特征值五、矩阵的特征值函数:函数:eig(A)v六、矩阵的分解六、矩阵的分解-三角形分解(三角形分解(LU或或LR分解)分解)函数:函数:L,U=lu(A)v七、矩阵的分解七、矩阵的分解-正交分
12、解(正交分解(QR分解)分解)函数:函数:Q,R=qr(A)选选项项意义及算法意义及算法无或无或 2矩阵的最大奇异值,即矩阵的最大奇异值,即|A|21矩阵的矩阵的1-范数,即范数,即|A|1Inf 或或 inf矩阵的无穷范数,即矩阵的无穷范数,即|A|fro矩阵的矩阵的F-范数,即范数,即|A|F数值数值 P对向量可取任何整数,而对矩阵只可取对向量可取任何整数,而对矩阵只可取1,2,inf或或fro-inf只可用于向量,只可用于向量,|A|-MATLAB中的控制结构中的控制结构 v循环结构循环结构 for循环循环 while循环循环v选择结构选择结构 if结构结构switch结构结构try/c
13、atch结构结构 v其他流程控制其他流程控制break语句语句continue语句语句return语句语句 try 语句组1 catch 语句组2 end【例】解Lorenz方程-大气对流模型function xdot=lorenzeq(t,x)xdot=-8/3*x(1)+x(2)*x(3);-10*x(2)+10*x(3);-x(1)*x(2)+28*x(2)-x(3);线性规划问题的数学模型v线性规划问题的数学描述线性规划问题的数学描述 v或其中其中C 为为n维行向量维行向量 A 为为mn维矩阵维矩阵 b 为为m维列向量维列向量 X 为为n维列向量维列向量线性规划问题的MATLAB求解
14、vMATLAB中求解v线性规划问题的v标准形式MATLAB标准型和教科书中讲解有所不同,标准型和教科书中讲解有所不同,极小化的目标函数极小化的目标函数z线性规划问题具有不等式约束线性规划问题具有不等式约束m1个,等式约束个,等式约束m2个个f、x、lb 和和ub 均为均为n维列向量,维列向量,b为为m1维列向量,维列向量,beq为为m2维列向量,维列向量,A为为m1n维矩阵,维矩阵,Aeq为为m2n维矩阵维矩阵注意事项注意事项MATLAB标准型是对目标函数标准型是对目标函数求极小求极小,如果遇到是对目标函数求极,如果遇到是对目标函数求极大的问题,在使用大的问题,在使用MATLAB求解时,需要在
15、函数前面加一个负号转求解时,需要在函数前面加一个负号转化为对目标函数求极小的问题;化为对目标函数求极小的问题;MATLAB标准型中的标准型中的不等式约束形式为不等式约束形式为“”“”,如果在线性规划问,如果在线性规划问题中出现题中出现“”“”形式的不等式约束,则我们需要在两边乘以形式的不等式约束,则我们需要在两边乘以(-1)使使其转化为其转化为MATLAB中的中的“”“”形式。如果在线性规划问题中出现了形式。如果在线性规划问题中出现了“”的约束形式,则我们需要通过添加松弛变量使得不的约束形式,则我们需要通过添加松弛变量使得不等式约束变为等式约束等式约束变为等式约束v将问题转化为MATLAB标准
16、型原问题是对目标函数求极大,故添加负号使目标变为:原问题是对目标函数求极大,故添加负号使目标变为:min z=-4x1+2x2-x3原问题中存在原问题中存在“”“”的约束条件,故添加负号使其变为的约束条件,故添加负号使其变为:8x1-2x2+2x3-8将约束整理为矩阵形式将约束整理为矩阵形式用用MATLAB表达则为表达则为f=-4;2;-1;%将目标函数转化为求极小将目标函数转化为求极小A=2-1 1;8-2 2;b=12;-8;%不等式约束系数矩阵不等式约束系数矩阵Aeq=-2 0 1;1 1 0;beq=3;7;%等式约束系数矩阵等式约束系数矩阵lb=0;0;0;ub=Inf;Inf;In
17、f%边界约束边界约束 v函数调用格式MATLAB优化工具箱中求解线性规划问题的函数为优化工具箱中求解线性规划问题的函数为linprog()x=linprog(f,A,b)x=linprog(f,A,b,Aeq,beq)x=linprog(f,A,b,Aeq,beq,lb,ub)x=linprog(f,A,b,Aeq,beq,lb,ub,x0)x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)x=linprog(problem)x,fval=linprog(.)x,fval,exitflag=linprog(.)x,fval,exitflag,output=lin
18、prog(.)x,fval,exitflag,output,lambda=linprog(.)v输入参数MATLAB工具箱中的工具箱中的linprog函数在求解线性规划问题时,提供的参数为:函数在求解线性规划问题时,提供的参数为:模模型参数、初始解参数和算法控制参数型参数、初始解参数和算法控制参数。模型参数模型参数x、c、lb、ub、b、beq、A和和Aeq在在MATLAB标准型中已经介绍了其具体标准型中已经介绍了其具体物理意义和获得方法物理意义和获得方法x0为线性规划问题的为线性规划问题的初始解初始解,该设置仅在中型规模算法中有效,而在默认的大型规,该设置仅在中型规模算法中有效,而在默认的大
19、型规模算法和单纯形算法中,模算法和单纯形算法中,MATLAB将忽略一切初始解。将忽略一切初始解。options为包含为包含算法控制参数算法控制参数的结构变量,我们可以通过的结构变量,我们可以通过optimset命令对这些具体命令对这些具体的控制参数进行设置,例如下述格式的控制参数进行设置,例如下述格式 options=optimset(param1,value1,param2,value2,.)该命令格式创建一组控制参数结构变量该命令格式创建一组控制参数结构变量options,将参数的具体值赋给单引号之间,将参数的具体值赋给单引号之间的参数,任何未被指定的参数将被赋值为的参数,任何未被指定的参
20、数将被赋值为,参数值为,参数值为的具体的含义是将该组控制的具体的含义是将该组控制参数传递给优化函数时将使用参数传递给优化函数时将使用MATLAB提供的默认值提供的默认值在线性规划问题中可以用到的设置参数如下一页的表所示在线性规划问题中可以用到的设置参数如下一页的表所示 参数设置 Diagnostics设置是否显示函数优化中的诊断信息,可以选择on或者off(默认值),该功能主要显示一些退出信息,即linprog函数运算终止的原因Display设置显示信息的级别,当该参数值为off时,不显示任何输出信息;当参数值为iter时,将显示每一步迭代的输出信息,iter参数值仅对大型规模算法和中型规模的
21、单纯形算法有效;当参数值为final时,仅显示最终的输出信息Simplex当该参数值为on时,函数采用单纯形算法LargeScale设置是否采用大型规模算法,当参数值为on(默认值)时,使用大型规模算法参数名称;当参数值为off时,使用中型规模算法MaxIter算法运行中的最大迭代次数,对于大型规模算法,默认值为85,对于单纯形算法,其默认值为10*设计变量的个数,对于中型有效集算法为10*max(设计变量的个数,不等式约束的个数+边界约束的个数)TolFun函数计算终止的误差限,对于大型规模算法其默认值为1e-8,该控制参数对于中型规模的有效集算法无效。v输出参数 linprog函数返回的输
22、出参数有x、fval、exitflag、lambda和output。输出参数x为线性规划问题的最优解输出参数fval为线性规划问题在最优解x处的函数值输出参数exitflag返回的是优化函数计算终止时的状态指示,说明算法终止的原因,其取值和其代表的具体原因如表所示值物理意义1已经收敛到解x0已经达到最大迭代次数限制options.MaxIter-2没有找到问题的可行点-3问题无有限最优解-4在算法执行过程中遇到了NaN值-5原线性规划问题和其对偶问题均不可行-7搜索方向变化太小,无法进一步获得更优解,说明原线性规划问题或者约束条件是病态的 v输出参数输出参数output是一个返回优化过程中相关
23、信息的结构变量,其属性如表所示输出参数lambda是返回线性规划问题最优解x处的拉格朗日乘子的一个结构变量,其总维数等于约束条件的个数,其非零分量对应于起作用的约束条件,其属性如表所示。属性名称属性含义output.iterations优化过程的实际迭代次数output.algorithm优化过程中所采用的具体算法output.cgiterations0(仅用于大型规模算法,为了后向兼容性而设置的参数)output.message退出信息属性名称属性含义ineqlin线性不等式约束的拉格朗日乘子eqlin线性等式约束的拉格朗日乘子upper上界约束的拉格朗日乘子lower下界约束的拉格朗日乘子
24、 v函数命令详解x=linprog(f,A,b)该函数调用格式求解线性规划问题该函数调用格式求解线性规划问题 x=linprog(f,A,b,Aeq,beq)该函数调用格式求解线性规划问题该函数调用格式求解线性规划问题即该函数调用格式解决的是既含有线性等式约束,又含有线性不等式约束的线性规划问题,即该函数调用格式解决的是既含有线性等式约束,又含有线性不等式约束的线性规划问题,如果在线性规划问题中无线性不等式约束,则可以设如果在线性规划问题中无线性不等式约束,则可以设A=以及以及b=v函数命令详解x=linprog(f,A,b,Aeq,beq,lb,ub)该函数调用格式求解线性规划问题该函数调用
25、格式求解线性规划问题即在线性规划问题的求解过程中进一步考虑了对决策变量的约束,其中即在线性规划问题的求解过程中进一步考虑了对决策变量的约束,其中lb和和ub均是和决策变量维数相同的列向量,如果对决策变量没有上界约束,可以设置均是和决策变量维数相同的列向量,如果对决策变量没有上界约束,可以设置ub(i)=Inf,如果没有下界约束则可以设置,如果没有下界约束则可以设置lb(i)=-Inf,和,和(2)类似,如果问题中类似,如果问题中没有等式约束,则可以设没有等式约束,则可以设Aeq=以及以及beq=v命令详解x=linprog(c,A,b,Aeq,beq,lb,ub,x0)在前面调用方法的基础上设
26、置线性规划问题求解的初始解为在前面调用方法的基础上设置线性规划问题求解的初始解为x0,该参数仅在使用有效,该参数仅在使用有效集算法时生效,否则当使用默认的内点算法时,将忽略任何初始点,即参数无效。集算法时生效,否则当使用默认的内点算法时,将忽略任何初始点,即参数无效。x=linprog(c,A,b,Aeq,beq,lb,ub,x0,options)用用options指定的优化参数进行最小化。可以使用指定的优化参数进行最小化。可以使用optimset来设置这些参数来设置这些参数x,fval=linprog(.)在优化计算结束之时返回线性规划问题在解在优化计算结束之时返回线性规划问题在解x处的目标
27、函数值处的目标函数值fval。x,fval,exitflag=linprog(.)在优化计算结束之时返回在优化计算结束之时返回exitflag值,描述函数计算的退出条件值,描述函数计算的退出条件。x,fval,exitflag,output=linprog(.)在优化计算结束之时返回返回结构变量在优化计算结束之时返回返回结构变量outputx,fval,exitflag,output,lambda=linprog(.)在优化计算结束之时返回线性规划问题最优解在优化计算结束之时返回线性规划问题最优解x处的拉格朗日乘子处的拉格朗日乘子lambda例题1v用MATLAB求解线性规划问题f=-1;-1
28、;%目标函数,为转化为极小,故取目标函数中设计变量的相反数目标函数,为转化为极小,故取目标函数中设计变量的相反数A=1-2;1 2;%线性不等式约束线性不等式约束b=4;8;lb=0;0;%边界约束,由于无上界,故设置边界约束,由于无上界,故设置ub=Inf;Inf;ub=Inf;Inf;x,fval=linprog(f,A,b,lb,ub)Optimization terminated.x=6.0000 1.0000fval=-7.0000例题2v用MATLAB求解线性规划问题f=-1;-3;1;%目标函数,为转化为极小,故取目标函数中设计变量的相反目标函数,为转化为极小,故取目标函数中设计
29、变量的相反数数Aeq=1 1 2;-1 2 1;%线性等式约束线性等式约束beq=4;4;lb=0;0;0;%设计变量的边界约束,由于无上界,故设置设计变量的边界约束,由于无上界,故设置ub=Inf;Inf;Infub=Inf;Inf;Inf;x,fval,exitflag=linprog(f,Aeq,beq,lb,ub)Optimization terminated.x=1.3333 2.6667 0.0000fval=-9.3333exitflag=1例题3v用MATLAB求解线性规划问题f=-3;1;1;A=1-2 1;4-1-2;%线性不等式约束线性不等式约束b=11;-3;Aeq=-
30、2 0 1;%线性等式约束线性等式约束beq=1;lb=0;0;0;%变量的边界约束,由于无上界,故设置变量的边界约束,由于无上界,故设置ub=Inf;Inf;Infub=Inf;Inf;Inf;x,fval,exitflag,output,lambda=linprog(f,A,b,Aeq,beq,lb,ub)Optimization terminated.x=4.0000 1.0000 9.0000fval=-2.0000output=exitflag=1voutput=v iterations:6v algorithm:large-scale:interior pointv cgitera
31、tions:0v message:Optimization terminated.vlambda=v ineqlin:2x1 doublev eqlin:-0.6667v upper:3x1 doublev lower:3x1 double0-1规划问题vMATLAB中求解v0-1规划问题的v标准形式vbintprog的调用格式 x=bintprog(f)x=bintprog(f,A,b)x=bintprog(f,A,b,Aeq,beq)x=bintprog(f,A,b,Aeq,beq,x0)x=bintprog(f,A,b,Aeq,beq,x0,options)x,fval=bintprog
32、(.)x,fval,exitflag=bintprog(.)x,fval,exitflag,output=bintprog(.)线性二次规划问题vMATLAB中求解v线性二次规划问v题的标准形式v函数调用格式:vx=quadprog(H,f,A,b)vx=quadprog(H,f,A,b,Aeq,beq)vx=quadprog(H,f,A,b,Aeq,beq,lb,ub)vx=quadprog(H,f,A,b,Aeq,beq,lb,ub,x0)vx=quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)vx,fval=quadprog(.)vx,fval,exit
33、flag=quadprog(.)vx,fval,exitflag,output=quadprog(.)vx,fval,exitflag,output,lambda=quadprog(.)线性目标规划问题 线性目标规划的MATLAB求解 输入输出参数v输入参数中,fun为目标函数,x0是求解的初始值,goal是目标函数的期 望值,nonlcon是非线性约束函数,weight是目标权重。vfun:最小化的目标函数,fun可以是一个在M函数中定义的函数句柄;vWeight:可以控制低于或超过fgoalattain函数指定目标的相对程度。需要注意的是,如果将weight向量中的任一元素设置为0时,则算
34、法将把对应的目标约束当做是硬约束来处理;当设置weight为不同的数值时,fgoalattain将对目标函数采取不同的处理方式:v (1)当权重weight设置为正时,fgoalattain函数则试图使目标函数值小于期望值;v (2)当权重weight设置为负时;fgoalattain函数则试图使目标函数值大于期望值;v (3)当需要目标函数值尽可能等于期望值时,则应设置控制参数GoalsExactAchieve的值为相应的目标函数的序号。需要注意的是,这类目标函数必须安排在参数fun返回的函数向量的F的最前面。例题4v某化工厂拟生产两种新产品某化工厂拟生产两种新产品A A和和B B,其生产设
35、备费用分别为:,其生产设备费用分别为:A A,2 2万元万元/t/t;B B,5 5万元万元/t/t。这两。这两种产品均造成环境污染,假设由公害所造成的损失可折算为:种产品均造成环境污染,假设由公害所造成的损失可折算为:A A,4 4万元万元/t/t;B B,1 1万元万元/t/t。由。由于条件限制,工厂生产产品于条件限制,工厂生产产品A A和和B B的最大生产能力各为每月的最大生产能力各为每月5t5t和和6t6t,而市场需要这两种产品的,而市场需要这两种产品的总量每月不少于总量每月不少于7t7t。试问工厂如何安排生产计划,在满足市场需要的前提下,使设备投资和。试问工厂如何安排生产计划,在满足
36、市场需要的前提下,使设备投资和公害损失均达到最小?公害损失均达到最小?v 该工厂决策认为,这两个目标中环境污染应优先考虑,设备投资的目标值该工厂决策认为,这两个目标中环境污染应优先考虑,设备投资的目标值2020万元,公害损万元,公害损失的目标为失的目标为1212万元。万元。v设工厂每月生产产品设工厂每月生产产品A A为为x1,B,B为为x2 例题5 Matlab程序代码vA=-0.5 0 0;0 -2 10;0 1 -2;vB=1 0;-2 2;0 1;vC=1 0 0;0 0 1;vgoal=-5,-3,-1;%设置期望目标值vweight=abs(goal);%设置目标权重vK0=-1-1
37、;-1-1;%设置矩阵K的初始值K0vlb=repmat(-4,size(K0);%设置K的下界vub=repmat(4,size(K0);%设置K的上界voptions=optimset(Display,iter);%设置显示每一步的迭代结果veigfun=(K)sort(eig(A+B*K*C);vK,fval,attainfactor,exitflag=.v fgoalattain(eigfun,K0,goal,weight,lb,ub,options)v思考题:v1、当线性规划问题系数矩阵A元素较多时,可以考虑先将原始数据输入Excel表中,然后在编程时再导入到matlab程序中,如何做?v2、尝试用matlab编程求解运筹学教程第46页作业题1.15v3、尝试用matlab编程求解运筹学教程第149页作业题5.7(1)