数值优化学习十八——SQP

求解QCQP问题可转化为SQP:

首先理解泰勒展开:

                 

在函数为标量和矢量的情况下分别作出二阶和一阶展开,这里泰勒公式是解QCQP问题的基础

对于标准QCQP:

           

把目标函数视为一个整体,找到一个dx,使X=Xk+dx的目标函数值缩小,直到目标函数收敛到指定精度,多次迭代,即可解QCQP,这里的关键就是如何求dx

因此,利用泰勒展开式,针对每个X值,求dx

           

 

在matlab里简单做了个历程,可供参考:

function [DD,Y,X]=simple_SQP()
Q=[2 -3 -1;-3 4 -6;-1 -6 6];
P=[2;3;4];
%%定义QCQP问题中,优化问题的二次项系数: min f=X'*Q*X+P'X;  X=[x1 x2 x3]'
H=1;
b=16;
%%二次约束:%    st:  X'*H*X<=b;>>x1^2+x2^2+x3^2<=16
x0=[2;2.5;2];  %%优化开始点

Y=x0'*Q*x0+P'*x0;
X=x0;

for i=1:5
    Qi=2*Q;
    Pi=(2*Q*x0+P);
    A=(2*H*x0)';
    B=b-x0'*H*x0;
    dx=quadprog(Qi,Pi,A,B);  %%调用QP求解器,求子问题最优值
    x0=x0+dx;     %%下一次优化起点
    DD(:,i)=dx; 
    y=x0'*Q*x0+P'*x0;
    Y=[Y y];
    X=[X x0];
end
end

  

 

转载于:https://www.cnblogs.com/JC-ZHOU/p/10671611.html

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值