使用Yalmip在MATLAB中编码双曲线SOCP约束时遇到问题

时间:2016-04-15 04:21:58

标签: matlab optimization gurobi

假设我们有1列和n行的sdpvar向量p,q,v2和y。 r是常量的向量,1列和n行。 我想编码约束r(i)* (p(i)^2 + q(i)^2) <= v2(i) * y(i)。这是一个双曲线约束,具有SOCP形式,可由商业解算器识别。

我的问题是我的优化程序为我的所有变量返回NaN,这意味着没有任何优化。

以下是我尝试编码约束的一些方法:

1)

  

锥用于定义约束范数(x)&lt; y没有调用   使用规范运算符的开销。

for i=1:length(r)
    Constraints = [Constraints; cone(sqrt(r(i)*[p(i), q(i)],sqrt(v2(i)*y(i)))];
end

2) how to rewrite w'w <= xy using norm

for i=1:length(r)
Constraints = [Constraints; norm([2*sqrt(r(i))*[p(i);q(i)], (sqrt(v2(i))-sqrt(y(i)))]) <= (sqrt(v2(i)) + sqrt(y(i)))];
end

3)

for i=1:length(r)
Constraints = [Constraints; norm([2*sqrt(r(i)*(p(i)^2 + q(i)^2)); (sqrt(v2(i))-sqrt(y(i)))]) <= (sqrt(v2(i)) + sqrt(y(i)))];
end

我会感激任何帮助,因为我现在已经坚持了一段时间。感谢。

1 个答案:

答案 0 :(得分:1)

已经在Gurobi google群组论坛上回答了

https://groups.google.com/forum/?fromgroups=#!topic/gurobi/oEC_MbvAidM