2、成新复合形,使复合形不断向最优点移动和收缩,直至收缩到复合形的各顶点与其形心非常接近、满足迭代精度要求时为止。最后输出复合形各顶点中的目标函数值最小的顶点作为近似最优点。补充:关于复合形法定点数目的选取数目多少的选取,要视具体情况而定,一般说来,为了防止迭代过程中产生降维,顶点数目取多一些较好。因为只要在k个顶点中有n+1个顶点所构成的n个矢量线性无关,搜索就不会在降维的空间里进行。所以k值大些,降维的可能性就小些。但是从另一方面看,顶点数目多,显然会降低计算速度。为此,对于优化问题维数n<6时通常取k=2n;对于n>5的优化问题,一般应适当减少顶点数目,
3、而取k=(1.25——1.5)n(取整)。当然,顶点的最少数目不得低于n+1.二.复合形法的优缺点复合形法不需要计算目标函数的导数,也不进行一维搜索,因此对目标函数和约束函数都没有特殊的要求,适用范围较广。复合形法的收敛速度较慢,特别当目标函数的维数较高和约束条件的数目增多时,这一缺点尤为突出。另外,复合形法不能用于求解具有等式约束的优化问题。三.问题求解下面分别用复合形法和matlab工具箱分别进行求解并比较计算结果问题一:1-1函数的三维立体图1-2.复合形法求解寻优趋势图1-3.求解结果对照表方法复合形法Matlab工具箱x11.00041x21.0
4、0021f1.8048e-070问题二:2-1函数的三维立体图2-2.复合形法求解寻优趋势图2-3.求解结果对照表方法复合形法Matlab工具箱x10.9950-0.1431*e-05x20-0.1431*e-05f0.99508.1197e-10问题三:2-1函数的三维立体图3-2.复合形法求解寻优趋势图3-3.求解结果对照表方法复合形法Matlab工具箱x1-2.95611.5345x21.05581.5345f0.99031.9860四.结果分析对于求解此类问题,做出目标函数的大致图形(当然只限于三维以内)有利于我们判断函数的极值点位置以及估计函数值
5、,同时也可以用来检验计算结果的正确性。对于问题一,两种求解方法的计算结果基本相同,但对于问题二和问题三的求解结果为何不同,我们猜想应该是matlab工具箱的求解方法对求解函数有着特殊的要求所导致的,例如,要求函数可导或者连续等。附录:程序(只给出问题三的求解程序,其他问题的求解类似)一.复合形法求解程序如下:symsstf=-((sin(sqrt(s^2+t^2)))^2-0.5)/(1+0.001*(s^2+t^2))^2+0.5;g=[s+44-st+44-t];r=rand(1,6);m=-4+(4-(-4))*r;X=reshape(m,2,3)[
6、x,maxf,trace_value,trace_meanvalue]=Fuhexing(f,g,X,1.3,0.7,1,0.7,[st]);xmaxf[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('最大值','平均值','终值')gridfunction[x,maxf,
7、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);%用于存放复合形的
8、函数值ifnargin==8eps=1.0e-6;endN=siz