二次规划.docx

上传人:b****8 文档编号:9383806 上传时间:2023-02-04 格式:DOCX 页数:10 大小:184.52KB
下载 相关 举报
二次规划.docx_第1页
第1页 / 共10页
二次规划.docx_第2页
第2页 / 共10页
二次规划.docx_第3页
第3页 / 共10页
二次规划.docx_第4页
第4页 / 共10页
二次规划.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

二次规划.docx

《二次规划.docx》由会员分享,可在线阅读,更多相关《二次规划.docx(10页珍藏版)》请在冰豆网上搜索。

二次规划.docx

二次规划

2013-2014

(1)专业课程实践论文

题目:

二次规划

 

一、算法理论

二次规划是非线性优化中的一种特殊情形,它的目标函数是二次实函数,约束函数都是线性函数。

由于二次规划比较简单,便于求解(仅次于线性规划),并且一些非线性优化问题可以转化为求解一系列的二次规划问题,因此二次规划的求解方法较早引起人们的重视,成为求解非线性优化的一个重要途径。

二次规划的算法较多,本论文仅介绍求解一般约束凸二次规划的有效集方法。

考虑一般二次规划

有效集方法的最大难点是事先一般不知道有效集

,因此只有想办法构造一个集合序列去逼近它。

即从初始点

出发,计算有效集

,解对应的等式约束子问题。

重复这一做法,得到有效集序列

,使之

,以获得原问题的最优解。

我们分六步来介绍有效集方法的算法原理和实施步骤。

第一步选定初始值。

给定初始可行点

,令

第二步求解子问题。

确定相应的有效集

,求解子问

得到极小点

和拉格朗日乘子向量

转入步三;否则转步二。

第三步检验终止准则。

计算拉格朗日乘子

其中

,令

,则

是全局极小点,停算。

否则若

,则令

,转步一。

第四步确定步长

,其中

,其中

第五步若

,则令

,否则,若

,则令

,其中

满足

第六步令

,转步一。

 

二、算法框图

三、算法程序

function[x,lamk,exitflag,output]=qpact(H,c,Ae,be,Ai,bi,x0)

%功能:

用有效集方法解一般约束二次规划问题:

%minf(x)=0.5*x’*H*x+c’*x,

%s.t.a’˙i*x-b˙i=0,(i=1,...,l),

%a’˙i*x-b˙i?

=0,(i=l+1,...,m)

%输入:

x0是初始点,H,c分别是目标函数二次型矩阵和向量;

%Ae=(a˙1,...,a˙l)’,be=(b˙1,...,b˙l)’;

%Ai=(a˙–l+1?

...,a˙m),bi=(b˙–l+1?

...,b˙m)’.

%输出:

x是最优解,lambda是对应的乘子向量;output是结构变量,

%输出极小值f(x),迭代次数k等信息,exitflag是算法终止类型

%%%%%%%%%%%%%%%%%主程序开始%%%%%%%%%%%%%%%%%

%初始化

epsilon=1.0e-9;err=1.0e-6;

k=0;x=x0;n=length(x);kmax=1.0e3;

ne=length(be);ni=length(bi);lamk=zeros(ne+ni,1);

index=ones(ni,1);

for(i=1:

ni)

if(Ai(i,:

)*x>bi(i)+epsilon),index(i)=0;end

end%算法主程序

while(k<=kmax)%求解子问题

Aee=[];

if(ne>0),Aee=Ae;end

for(j=1:

ni)

if(index(j)>0),Aee=[Aee;Ai(j,:

)];end

end

gk=H*x+c;

[m1,n1]=size(Aee);

[dk,lamk]=qsubp(H,gk,Aee,zeros(m1,1));

if(norm(dk)<=err)

y=0.0;

if(length(lamk)>ne)

[y,jk]=min(lamk(ne+1:

length(lamk)));

end

if(y>=0)

exitflag=0;

else

exitflag=1;

for(i=1:

ni)

if(index(i)&(ne+sum(index(1:

i)))==jk)

index(i)=0;break;

end

end

end

k=k+1;

else

exitflag=1;

%求步长

alpha=1.0;tm=1.0;

for(i=1:

ni)

if((index(i)==0)&(Ai(i,:

)*dk<0))

tm1=(bi(i)-Ai(i,:

)*x)/(Ai(i,:

)*dk);

if(tm1

tm=tm1;ti=i;

end

end

end

alpha=min(alpha,tm);

x=x+alpha*dk;%修正有效集

if(tm<1),index(ti)=1;end

end

if(exitflag==0),break;end

k=k+1;

end

output.fval=0.5*x'*H*x+c'*x;

output.iter=k;%%%%%%%%求解子问题%%%%%%%%%%%%%%%

function[x,lambda]=qsubp(H,c,Ae,be)

ginvH=pinv(H);

[m,n]=size(Ae);

if(m>0)

rb=Ae*ginvH*c+be;

lambda=pinv(Ae*ginvH*Ae')*rb;

x=ginvH*(Ae'*lambda-c);

else

x=-ginvH*c;

lambda=0;

end

四、算法实现

例1.求解二次规划问题

解:

在Matlab命令窗口输入下列命令和计算结果为

例2.求解二次规划问题

解:

在Matlab命令窗口输入下列命令和计算结果为

例3.求解二次规划问题

解:

在Matlab命令窗口输入下列命令和计算结果为

 

例4.求解二次规划问题

解:

在Matlab命令窗口输入下列命令和计算结果为

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1