复合形法作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
优化理论与最优控制作业
——复合形法
小组成员
于童 1122227010
杜娟 1122227005
健华 1122227150
王楠 1122227034
海珍 1122227039
复合形法流程图
一.复合形法的基本原理
复合形法的基本思路是在n维空间的可行域中选取K个设计点(通常取n+1 复合形各顶点目标函数的大小,其中目标函数值最大的点作为坏点,以坏点之外其余各点的中心为映射中心,寻找坏点的映射点,一般说来此映射点的目标函数值总是小于坏点的,也就是说映射点优于坏点。这时,以映射点替换坏点与原复合形除坏点之外其余各点构成K个顶点的新的复合形。如此反复迭代计算,在可行域中不断以目标函数值低的新点代替目标函数值最大的坏点从而构成新复合形,使复合形不断向最优点移动和收缩,直至收缩到复合形的各顶点与其形心非常接近、满足迭代精度要求时为止。最后输出复合形各顶点中的目标函数值最小的顶点作为近似最优点。 补充:关于复合形法定点数目的选取 数目多少的选取,要视具体情况而定,一般说来,为了防止迭代过程中产生降维,顶点数目取多一些较好。因为只要在k个顶点中有n+1个顶点所构成的n个矢量线性无关,搜索就不会在降维的空间里进行。所以k值大些,降维的可能性就小些。但是从另一方面看,顶点数目多,显然会降低计算速度。为此,对于优化问题维数n<6时通常取k=2n;对于n>5的优化问题,一般应适当减少顶点数目,而取 k=(1.25——1.5)n(取整)。当然,顶点的最少数目不得低于n+1. 二.复合形法的优缺点 复合形法不需要计算目标函数的导数,也不进行一维搜索,因此对目标函数和约束函数都没有特殊的要求,适用围较广。复合形法的收敛速度较慢,特别当目标函数的维数较高和约束条件的数目增多时,这一缺点尤为突出。另外,复合形法不能用于求解具有等式约束的优化问题。 三.问题求解 下面分别用复合形法和matlab工具箱分别进行求解并比较计算结果 22221112min f ()100()(1)2.048 2.048 . 2.048 2.048 X x x x x subject to x =-+--≤≤⎧⎨ -≤≤⎩ 1-1函数的三维立体图 1-2.复合形法求解寻优趋势图 1-3.求解结果对照表 方法 复合形法 Matlab 工具箱 x1 1.0004 1 x2 1.0002 1 f 1.8048e-07 -200-150 -100 -50 50 22121212min f ()10cos(2)10cos(2)205.12 5.12 . 5.12 5.12 X x x x x x subject to x ππ=+--+-≤≤⎧⎨ -≤≤⎩ 2-1函数的三维立体图 2-2.复合形法求解寻优趋势图 2-3.求解结果对照表 方法 复合形法 Matlab 工具箱 x1 0.9950 -0.1431* e-05 x2 0 -0.1431* e-05 f 0.9950 8.1197e-10 -40-35-30-25-20-15-10-50 1212max f ()0.5(10.001())44 .44 X x x x subject to x =- ++-≤≤⎧⎨ -≤≤⎩ 2-1函数的三维立体图 3-2.复合形法求解寻优趋势图 3-3.求解结果对照表 方法 复合形法 Matlab 工具箱 x1 -2.9561 1.5345 x2 1.0558 1.5345 f 0.9903 1.9860 0.40.5 0.6 0.7 0.8 0.9 1 四.结果分析 对于求解此类问题,做出目标函数的大致图形(当然只限于三维以)有利于我们判断函数的极值点位置以及估计函数值,同时也可以用来检验计算结果的正确性。对于问题一,两种求解方法的计算结果基本相同,但对于问题二和问题三的求解结果为何不同,我们猜想应该是matlab工具箱的求解方法对求解函数有着特殊的要求所导致的,例如,要求函数可导或者连续等。 附录:程序(只给出问题三的求解程序,其他问题的求解类似)一.复合形法求解程序如下: syms s t f=-((sin(sqrt(s^2+t^2)))^2-0.5)/(1+0.001*(s^2+t^2))^2+0.5; g=[s+4 4-s t+4 4-t]; r=rand(1,6); m=-4+(4-(-4))*r; X=reshape(m,2,3) [x,maxf,trace_value,trace_meanvalue]=Fuhexing(f,g,X,1.3,0.7,1,0.7,[s t]); x maxf [tvx,tvy]=size(trace_value); fxx=[1:tvy-1]; fyy=ones(1,tvy-1); fyy=maxf*fyy; plot(fxx,trace_value(1,2:tvy),'green',fxx,trace_meanvalue(1,2:tvy),'blue',fxx,fyy,'red') legend('最大值','平均值','终值') grid function [x,maxf,trace_value,trace_meanvalue]=Fuhexing(f,g,X,alpha,sita,gama,beta,var,eps) %f 目标函数 %g 约束函数 %X 初始复合形 %alpha 反射系数 %sita 压缩系数 %gama 扩展系数 %beta 收缩系数 %var 自变量向量 %eps 精度 %x 目标函数取最小值时的自变量 %minf 目标函数的最小值 trace_value=[0]; %用于记录最大值的轨迹 trace_meanvalue=[0]; %用于记录平均值的轨迹 N=size(X); n=N(2); %n 为复合形的顶点个数 FX=zeros(1,n); %用于存放复合形的函数值 if nargin==8 eps=1.0e-6;