为基于问题的圆锥编程编写约束
为了确保解决
或prob2struct
调用coneprog
对于二阶锥问题,将二阶锥约束指定为以下两种类型之一:
范数(线性表达式)+常数<=线性表达式
平方根(平方和)+常数<=线性表达式
在这里,线性表达式
表示优化变量中的线性表达式。平方和
表示优化变量的显式平方和,例如总和(x ^ 2)。
.的目标函数coneprog
优化变量必须是线性的。有关平方和表单的更多信息,请参见为基于问题的最小二乘写目标函数.
解决
而且prob2struct
也叫coneprog
当约束类型具有与列出的两个相同的形式时:
线性表达式>=平方和+常数
线性表达式>=范数(线性表达式)+常数
Const *范数(线性表达式)+常数<=线性表达式
提供Const > 0
(平方和)^0.5
而不是平方根(平方和)
例如,coneprog
当您调用以下两个等效问题公式时,默认解算器是否为每个解决
.
X = optimvar(“x”3,...下界的(负负0),...“UpperBound”,正正2);A = diag([1,1/2,0]);D = [0;0;1];F = [- 1,2,0];Probnorm = optimproblem(“目标”f (x);Probsumsq =优化问题(“目标”f (x);connorm = norm(A*x) <= d'*x;probnorm. constraints . connorm = connorm;consumsq =√(sum((A*x).^2)) <= dot(d,x);probsumsq. constraints . consumsq = consumsq;Optnorm = optimoptions(probnorm);类(optnorm)
ans = ' optimt .options. coneprogoptions .
Optsumsq = optimoptions(probsumsq);类(optsumsq)
ans = ' optimt .options. coneprogoptions .
如果你把二阶约束写成不同的形式,比如数学上等价的√x ' * x)
,解决
调用不同的求解器,例如fmincon
.在这种情况下,你需要供应解决
有了初始点,解决过程可能会有所不同(而且通常效率较低),如下面的示例所示。
X = optimvar(“x”3,...下界的(负负0),...“UpperBound”,正正2);A = diag([1,1/2,0]);D = [0;0;1];F = [- 1,2,0];问题=优化问题(“目标”f (x);=√(x'*A'*A*x) <= d'*x;probo . constraints .cons = cons;Opt = optimoptions(prob);类(选择)
ans = ' optimt .options. fmincon '