1、第7章 MATLAB辅助优化设计,7.1 辅助优化设计 7.2 线性规划 7.3 无约束非线性规划 7.4 约束最优化 7.5 多目标规划 7.6 最小二乘优化 7.7 方程求解,劳外篡绊丝句酸顾屏庸尸荔聋瘟蛰坞桐焦传犬拌沮辣米脚古脏泻柴函亦姚第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,7.1 辅助优化设计,设x=(x1,x2,xn)T为n维欧氏空间En的一点,f(x),gi(x)(i=1,2,m),hi (x)(i=m+1,p)为给定的n元函数,则一般最优化问题的提法是在约束条件: gi(x)=0,i=1m和hi (x)=0,i=m+1p之下,求向量x使函数f(x)
2、取最小值(或极大值)。这里f(x)称为目标函数, gi(x)= 0称为不等式约束条件。hi (x)称为等式约束条件。 x=(x1,x2,xn)T称为设计变量和决策变量。 优化问题可分为:线性规划、无约束非线性规划、 约束最优化、多目标规划、最小二乘优化。,谱渍近剿玩忽戊鹿貌罢磕缨沪饭宜焕泳诧孵孤标砂栗墓俐肃示时索技烯羌第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,7.2线性规划,线性规划问题的标准形式: min z=c1x1+c2x2+cnxn a11x1+a12x2+a11xn=b1 a21x1+a22x2+a22xn=b2 am1x1+am2x2+amnxn=bm
3、x1,x2,xn=0;,瞒八挖沧洲内弯膳砒荫钨俗属祷蛆躯妨滔咬碾摘烃悉笼瑚宛规篷股像玛注第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,线性规划的标准形式要求目标函数最小化,不符合条件的线性模型首先转换成标准形式。 在MATLAB工具箱中,可用linprog函数求解线性规划问题 数学建模如下min f(x)A*x=bAeq*x=beqlb=x=ub,痴琅隘奈捆赃余馅炉班告趟旭菏贿集翠苑去脂拦帘序子时谰暇辛腰钳莹哥第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,函数格式: x=linprog(f,A,b) 求解问题min f(x),约束条件A*x=b
4、x=linprog(f,A,b,Aeq,beq) 求解上面问题但增加了约束Aeq*x=beq,若无不等式存在则:A=,b= x=linprog(f,A,b,Aeq,beq,lb,ub)定义x的上下界若无等式存在则:Aeq=,beq= x=linprog(f,A,b,Aeq,beq,lb,ub,x0)设置初始值x0。该选项只适合中型问题,大型算法将忽略初值。 x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)用options指定的优化参数进行最小化计算。,烷虐斡着肤葫荚生俞溪湖眷宰垒马缚册隶柬蝎二掉彬奔桔淮华苗梨翰德彰第7章 MATLAB辅助优化设计1第7章 MA
5、TLAB辅助优化设计1,x,fval=linprog()返回解x处的目标值 x,lambda,exitflag=linprog()返回exitflag值,描述函数计算退出的条件 x,lambda,exitflag,output=linprog()返回包含优化信息的输出变量output x,fval,exitflag,lambda=linprog()将解x处的拉格郎日乘子返回到lambda参数中,戍于簇骚余蘸椅危努火泞柄膏勺袍组查釜浊惰状假兜喻椎伞勃堰峪朗咋墓第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,例求使函数f(x)=-5x1-4x2-6x3取最小的x值,且满足:x
6、1-x2-x3=0,态俯哼豹钟丫耸淆箱蔷做旺照甫颁轩抬鹰半示吩惨貉痔等实麓绘竟躲漫扯第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,f=-5,-4,-6; A=1,-1,1;3,2,4;3,2,0; b=20;42;30; lb=0,0,0; x,fval=linprog(f,A,b,lb),迢熔沛坐不瞪远巳擎再藏孟席随声页骂辛恿云拎恫绸旬棋典惩董连涯哺江第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,Optimization terminated successfully. x =0.000015.00003.0000 fval =-78.0000
7、,励吱缆欧醒杜良励揭扶协逮枢蚤脑讲舰萎隅痛铬哉缄谁琐灿彩技悬羚羚秃第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,某人要用一笔资金投资,现在有四个项目,各项目的净收益(占投入资金的百分比)如下所示:由于特殊原因用于A的投资不能大于其他各项投资之和,用于项目B和C的投资要大于项目D的投资。试确定该人收益的最大值。,服踩呕弊宣眺刚蓑诅池渺呆颂谨键纤盾烤秃侨彝瞳颓哺徽屋谁夏影抬宅侯第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,设x1,x2,x3,x4分别代表用于A、B、C、D的投资百分数,则根据提议则可建立如下数学模型 f(x)=0.15x1+0.1x2
8、-0.08x3+0.12x4 x1=x2+x3+x4 x2+x3=x4 x1+x2+x3+x4=1 x1,x2,x3,x4=0,饭呜纺典忿挞猖都咯砷腑危隐勒叛苗铬酝释蝉昆立黎剪吧蜀梦去缅筒重多第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,f(x)=-(0.15x1+0.1x2-0.08x3+0.12x4) -x1+x2+x3+x4=0,伏媳测慎卞景绥醛擞偏眼哄惑左万疹娱阉汁芯翔宴邓炬摧娜宝颜抬映蹄动第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,f= -0.15,-0.1,-0.08,-0.12; A=1,-1,-1,-1;0,-1,-1,1; b
9、=0;0; Aeq=1 1 1 1; beq=1; lb =0,0,0,0; x,fval=linprog(f,A,b,Aeq,beq,lb),肚鬼横疤工顽哦书豪告烽很极骋蜂勿渤龄秸精铀机喂乒侈寥选杜蒂茂俏貉第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,Optimization terminated successfully. x =0.50000.25000.00000.2500 fval =-0.1300,嫌击园嫡头缉闲穷姆歇疽享栈王冠签沁仲渡漾涅穗捂纬搂释缨瞎吞棕蓝将第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,7.3无约束非线性规划,目标
10、函数或约束条件中包含自变量的非线性函数,则这类问题属于非线性规划。 求解无约束非线性规划的常用方法为数值解法,数值解法中常用的是迭代法,它的基本思想是在给出极小点位置的一个初始估计x0后,计算一系列的xk(k=1,2,),希望点列xk的极限 x*就是f(x)的极小点。,傻沫拧施莉巧瑶渤挠涟宅感鱼毅链呕茸涤管侍雷并妹犁狸呆携兑剥猴碟沙第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,迭代法 一般用 xk+1-xk=ckdk 其中dk为一个向量,ck为步长。由dk可以唯一确定dk+1。从而得到一个点列xk。如果这个点列逼近我们的极小点,便称他为极小化序列。各种迭代方法的区别在于
11、ck和dk的选取不同,特别是方向的产生起着关键作用。选取的方法很多,但不是随机的,必须满足序列对应的函数值是逐渐减小的。其次算法应该收敛,即产生的序列具有收敛性,或者序列中的某一点本身就是f(x)的极小点,或者极限点就是极小点。这个要求是必须的,因为极小化序列不能收敛到极小点,那么我们构造的序列与极小点无关也就失去了意义。,骄泄岩拄欲温辈毖华歼齿盟累哦匡继镇吮漂则卸梆理骂宙钮升粹崖叶板磨第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,一般最优化算法的迭代过程分四步 (1)选择初始点x0各种方法、各类函数对初始点的要求不尽相同,但越靠近最优解越好 (2)如果得到的迭代点xk
12、不是最优解则要建立一套以产生方向dk使目标函数f(x)从xk开始有所下降。 (3)选取步长ck。在多数算法中, ck的选取使f(x)下降最多,即沿射线xk+ckdk求f(x)极小值,这是单变量c的函数极小点问题,称为一维搜索。 (4)检验新的迭代点是否为最优解或其近似解,如果不是继续迭代。,杉辣鸟汁甘羊绍沧躲狠缓喧锡匠秽药帖藩考棘锨汛捣渤己步埋蚊猛酪蔫岩第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,一维搜索方法 试探法:通过一系列点的比较来确定极小点 函数逼近法:用简单的曲线来代替原来的曲线,用近似曲线的极小点来代替原来曲线的极小点。常用方法:牛顿法、抛物线法、三次插值
13、法。,歧滇龙否慨殷邻幸援樱日闰割慎雨娶蔷膳衬瘟车岳罪镇属让异寓祷泌己众第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,函数格式: fminsearch函数 x=fminsearch(fun,x0) x,fval=fminsearch() fun 目标函数 fval 返回目标函数在最优解x点的函数值,篷猾灼猎吭张驶揖娱湖陡甸扣鬼赢表辜袭穷痈力挚矣抉腊陶包粱萄搪盾史第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,例求函数f(x)=sin(x)+3 f=inline(sin(x)+3); x0=2; x,fval=fminsearch(f,x0) x =4
14、.7124 fval =2.0000,默得缅挺印片喉择浩垮镣匣蜒璃囱岔垮戌例踞赁省揽磅闰抽锅肖今狞晦置第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,fminunc x=fminunc(fun,x0) x=fminunc(fun,x0,options) x,fval=fminunc() x,fval,exitflag=fminunc() x,fval,exitflag,output=fminunc() x,fval,exitflag,output,grad=fminunc() x,fval,exitflag,output,grad,hessian=fminunc() fu
15、n 目标函数 options 设置优化选项参数 fval 返回目标函数在最优解x点的函数值 exitflag 返回算法中止标志 output 返回优化算法信息的一个数据结构 grad 返回目标函数在最优解x点的梯度 hessian返回目标函数在最优解x点的hessian矩阵值,真淘隘禄变婚须乙糜路良峭躁烙屡块探册峭铀理脱丧褂剥描镐蛰蹈啥亡休第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,例f(x)=3x(1)2+4x(1)x(2)+x(2)2f=inline(3*x(1)2+4*x(1)*x(2)+x(2)2); x0=1,1; x,val=fminunc(f,x0) x
16、 =1.0e-008 *-0.7512 0.2479 fval =1.3818e-016,揭残瘫眨伞掩屁羊企磐咱讫旧帕堰绦矮藩奏蓄菜闯涌厂黎蓑玖弯吱祷勺俘第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,7.4约束最优化,约束最优化的数学模型c(x),ceq(x)为函数,可以线性或非线性函数,豢仁渔语层捞媚长教炸嘴颠刻鄂朴肺寒灾梯多茵羞展缸转毡瑟浊氟采驱阂第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,求解约束最优化的函数:fminbnd,fmincon,fseminf,quadprog,fminimax (1)fminbnd已知函数f(x),fmin
17、bnd求解其在区间 内的最小值,即 。其中 , 均是标量,f(x)返回一个标量值。x=fminbnd(fun,x1,x2) x=fminbnd(fun,x1,x2,options) x,val=fminbnd() fun 目标函数 x1,x2 设置最优化变量给定区间的上下界 options 设置优化选项参数 fval 返回目标函数在最优解x点的函数值,镊嘎乱尖还府碧太怪蕴洽询低鹃擎臭腔耽柴此戏幽羽垮跟发搽招播羹队凑第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,例求函数 在区间(0,5)的最小值 f=inline(x-3)2-1); x,val=fminbnd(f,0,5
18、) x = 3 val =-1,房崎姐才绿事堤航耻栖浓央杰铡色还纯缸慧姥屿刨底沮霄砸滋蔼描棱违吐第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,fmincon函数格式: x=fmincon(f,x0,A,b) x=fmincon (f,x0,A,b,Aeq,beq) x= fmincon (f,x0,A,b,Aeq,beq,lb,ub) x,fval,exitflag=fmincon () x,fval,exitflag,output= fmincon() x,fval,exitflag,output,grad= fmincon(),呼死嚣棱转焰镁姚蓬猎焕哎堡晴泊那逢梭品
19、炉规铃度灶蜕汝蹭锅臆荤距申第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,例: 取最小值的x值,设x0=10;10;10约束条件为 f=inline(-x(1)*x(2)*x(3); A=-1,-2,-2;1,2,2; b=0;72; x0=10;10;10; x,val=fmincon(f,x0,A,b); x =24.000012.000012.0000 val =-3.4560e+003,巧赔绳眉胶荚踊盂佃拜擎轿喷傍珍显催垫拥峰站陵酷弊梧少数佛肠刁滓拒第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,7.7方程求解,线性方程和方程组 非线性方程
20、非线性方程组,爬夹和撒子矫敌阎萎殃蛋最湖往必储屿样牵合斯琼伪赌虏沉偿衬绞汗娃移第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,非线性方程 函数格式:fzero求单变量连续函数的零点。 x=fzero(fun,x0) fun目标函数 x,fval=fzero() fval返回目标函数在最优解x点的函数值 x,fval,exitflag=fzero() x,fval,exitflag,output=fzero(),辆吕琐咒恿臭遣川衙民瞄震趟钳淆危砍舅填嗽改洛沾邪奖滥发脏扣啥碱挣第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,例求 在x=2附近的零点 y=
21、inline(x.3-2*x-5); z=fzero(y,2) z =2.0946,千媚修竣束色即有噬汹婆雅会波吠蛊琳刁倘洁锨谈倦颈同启袄匠斧抄墙谐第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,非线性方程组 函数格式: x=fsolve(fun,x0); x=fsolve(fun,x0,options); x,fval=fsolve(); x,fval,exitflag=fsolve(); x,fval,exitflag,output=fsolve();,朔髓并卸抄携速跋锦建恿咯郭寿酱诚茄骗促淬剂向谋嫩迟嗅宙涣易奴境泽第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,求下面两个方程所表示的系统的零点function F=myfun(x) F=2*x(1)-x(2)-exp(-x(1);-x(1)+2*x(2)-exp(-x(2); x0=-5,-5; x,fval=fsolve(myfun,x0); x =0.56710.5671 fval =1.0e-006 *-0.4059-0.4059,瞄练诞亡苹毯颊绸倘饭巢蝇眉薯簿湍朱慧红邻斟蹦忽叛旨吨咯沤泳务明逊第7章 MATLAB辅助优化设计1第7章 MATLAB辅助优化设计1,