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

Trouble coding a hyperbolic SOCP constraint in MATLAB, using Yalmip

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

我的问题是我的优化程序 returns NaN 针对我的所有变量,这意味着没有任何优化。

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

1)

cone is used to define the constraints norm(x) < y without invoking the overhead of using the norm operator.

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

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

已在 Gurobi google 群组论坛上回答

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