假设我们有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
我会感激任何帮助,因为我现在已经坚持了一段时间。感谢。
答案 0 :(得分:1)
已经在Gurobi google群组论坛上回答了
https://groups.google.com/forum/?fromgroups=#!topic/gurobi/oEC_MbvAidM