使用 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
假设我们有 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