您的位置:首页 > 汽车 > 新车 > 【最优化方法】实验四 约束最优化方法的MATLAB实现

【最优化方法】实验四 约束最优化方法的MATLAB实现

2024/12/26 9:46:18 来源:https://blog.csdn.net/weixin_45741872/article/details/139287467  浏览:    关键词:【最优化方法】实验四 约束最优化方法的MATLAB实现

实验的目的和要求:通过本次实验使学生较为熟练使用MATLAB软件,并能利用该软件进行约束最优化方法的计算。

实验内容:

1、罚函数法的MATLAB实现

2、可行方向法的MATLAB实现

学习建议:

本次实验就是要通过对一些具体问题的分析进一步熟悉软件的操作并加深对理论知识的理解。

重点和难点:

可行点和辅助函数选取。

一 罚函数法

用罚函数法解min f(x)=(x1-1)2+x22

​ S.T. g(x)=x2-1>=0

编写下面m文件

fahanshu.msyms x1 x2 f=(x1-1)^2+x2^2;g=x2-1;x=[x1;x2];x0=[0;0];e=0.0001;M=1;while abs(subs(g,x,x0))>eif subs(g,x,x0)<0​    Q=f+M*g^2;else ​    Q=f;endx0=xzNewton(Q,x,x0,0.0001);M=10*M;endx0

运行得:fahanshu

x0 =

1.0000

0.9999

与理论值x=[1;1]很接近。

二 投影梯度法

1.梯度投影法基本原理和步骤

思想:当迭代点是可行域的内点时,将目标函数负梯度作为搜索方向,当迭代点在可行域边界上时,将目标函数负梯度在可行域边界上的投影作为搜索方向。无论何种情况,所构造的方向都是可行下降方向。然后在可行域内沿该方向进行最优一维搜索得到新的迭代点。

img

img

MATLAB实现:

2.代码及数值算例:

(1) 程序源代码:

function [ X,FMIN,K ] = tidutouying( f,A,b,x1,x,e )%  [ X,FMIN,K ] = tidutouying( f,A,b,x1,e ) 梯度投影法%  f  目标函数%  A  约束矩阵  b 右端项%  x1 初始点 x 自由变量%  e  精度要求%  X  极小点%  FMIN 极小值%  K  迭代次数%  张超编写与2014/5/3count=1;n=length(x1);tf=jacobian(f,x)';while 1[A1,A2,b1,b2,k]=fenjie(A,b,x1);while 1M=A1;if isempty(M)​    P=eye(n);else​    P=eye(n)-M'*(M*M')^(-1)*M;endPk=-P*subs(tf,x,x1);if norm(Pk)<=e​    if isempty(M)​      x1;break;else​      W=(M*M')^(-1)*M*subs(tf,x,x1);​      u=W;if min(u)<0for i=1:length(u)if u(i)==min(u)j=i;endendA1(j,:)=[];else ​        x1;break;endendelse​    b_=b2-A2*x1;​    P_=A2*Pk;for i=1:length(P_)if P_(i)<0r(i)=b_(i)/P_(i);elser(i)=10000;endend​    rmax=min(r);​    syms t​    y=x1+t*Pk;ft(t)=subs(f,x,y);[r1]=find0618(ft,0,double(rmax),0.00001);​    x1=x1+r1*Pk;break;endendcount=count+1;if isempty(M)    break;endif min(u)>=0break;endendX=x1;FMIN=subs(f,x,X);K=count;endfunction [A1,A2,b1,b2,k ] = fenjie( A,b,x )% 分解起作用约束A=A;b=b;x0=x;k=0;q=0;s=size(A);A1=zeros(s(1),s(2));A2=zeros(s(1),s(2));b1=zeros(s(1),1);b2=zeros(s(1),1);for i=1:s(1)gi=A(i,:)*x0-b(i);if abs(gi)<0.0000001 ​    k=k+1;A1(k,:)=A(i,:);b1(k,1)=b(i);else ​    q=q+1;A2(q,:)=A(i,:);b2(q,1)=b(i);endendif k>0A1=A1(1:k,:);b1=b1(1:k,:);elseA1=[];endif q>0A2=A2(1:q,:);b2=b2(1:q,:);end end

(2) 数值算例:

Min f(x)= 2*x1^2+2*x2^22*x1*x2 – 4*x1 – 6*x2S.T. –x1 – x2>=2–x1 – 5*x2>=5x1>=0x2>=0初值x0=[0;0]在matlab command window里输入syms x1 x2 f=2*x1^2+2*x2^2-2*x1*x2-4*x1-6*x2;A=[-1 -1;-1 -5;1 0;0 1];b=[-2;-5;0;0];x1=[0;0];x=[x1;x2];e=0.01;[X,FMIN,K]=tidutouying(f,A,b,x1,x,e)X =1.12920.7742FMIN =-7.1613N =16

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com