【OR】YALMIP Sum of squares(SOS)规划

sos programming

YALMIP内置了求解sos问题的模块,在sos问题中,需要对多项式 p ( x ) p(x) p(x)进行分解,使得 p ( x ) = h T ( x ) h ( x ) p(x)=h^T(x)h(x) p(x)=hT(x)h(x),或者分解为 p ( x ) = v T ( x ) Q v ( x ) p(x)=v^T(x)Qv(x) p(x)=vT(x)Qv(x),其中 Q Q Q是半正定矩阵, v ( x ) v(x) v(x)是向量.

YALMIP also supports linearly and nonlinearly parameterized problems, decomposition of matrix valued polynomials.

手动实现sos的建模求解过程

%% 定义多项式
x = sdpvar(1, 1);
y = sdpvar(1, 1);
p = (1+x)^4+(1-y)^2;

% 分解
v = monolist([x y],degree(p)/2);
Q = sdpvar(length(v));
p_sos = v'*Q*v;

%  系数匹配
F = [coefficients(p-p_sos,[x y]) == 0, Q >= 0];
% optimize(F)

% 设置从对偶形式求解
optimize(F, [], sdpsettings('dualize', 1))

找到多项式下界

%% 找到多项式下界
sdpvar t
F = [coefficients((p-t)-p_sos,[x y]) == 0, Q >= 0];
optimize(F,-t)

整合优化流程如下

sdpvar x y
P = [1+x^2 -x+y+x^2;-x+y+x^2 2*x^2-2*x*y+y^2];
m = size(P,1);
v = monolist([x y],degree(P)/2);
Q = sdpvar(length(v)*m);
R = kron(eye(m),v)'*Q*kron(eye(m),v)-P;
s = coefficients(R(find(triu(R))),[x y]);
optimize([Q >= 0, s==0]);
sdisplay(clean(kron(eye(m),v)'*value(Q)*kron(eye(m),v),1e-6))

sos optimization

使用命令sos定义(SOS约束),使用命令solvesos求解,sosd得到sos-decomposition结果

x = sdpvar(1,1);y = sdpvar(1,1);
p = (1+x)^4 + (1-y)^2;
F = sos(p);
solvesos(F);
h = sosd(F);
sdisplay(h)

检测结果,如果分解结果正确,那么 p ( x ) − h T ( x ) h ( x ) p(x)-h^T(x)h(x) p(x)hT(x)h(x)的值应该接近于0,可以使用命令clean忽略系数很小的向量

clean(p-h'*h, 1e-6)

得到分解式 p ( x ) = v T ( x ) Q v ( x ) p(x)=v^T(x)Qv(x) p(x)=vT(x)Qv(x)

x = sdpvar(1,1);y = sdpvar(1,1);
p = (1+x)^4 + (1-y)^2;
F = sos(p);
[sol,v,Q] = solvesos(F);
clean(p-v{1}'*Q{1}*v{1},1e-6)

可以使用check指令返回系数最大值或者使用solvesos的第四个参数等效

checkset(F)
e = checkset(F(is(F, 'sos')))
[sol,v,Q,res] = solvesos(F);
res

References

pre and post processing sum-of-squares program in practice
Sum-of-squares programming

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Quant0xff

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值