主要内容

为基于问题的圆锥编程编写约束

为了确保解决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 '

另请参阅

||

相关的话题