数值优化学习十八——SQP
求解QCQP问题可转化为SQP:
首先理解泰勒展开:
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。在函数为标量和矢量的情况下分别作出二阶和一阶展开,这里泰勒公式是解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
更多精彩

