写入基于问题的锥形编程的约束
以确保解决
要么prob2struct.
呼叫coneprog.
对于二阶锥问题,将二阶锥限制指定为两种类型之一:
norm(线性表达)+常数<=线性表达
SQRT(正方形之和)+常数<=线性表达式
这里,线性表达
表示优化变量中的线性表达。平方和
意味着优化变量的显式平方和,例如总和(x。^ 2)
。目标函数coneprog.
在优化变量中必须是线性的。有关正方形形式和的更多信息,请参阅写入基于问题的最小二乘函数。
解决
和prob2struct.
还要打电话coneprog.
当约束类型具有等效表单到两个列出的时:
线性表达> = SQRT(平方和)+常数
线性表达> =常态(线性表达)+常数
const * norm(线性表达)+常数<=线性表达式
假如const> 0.
(正方形的总和)^ 0.5
代替SQRT(正方形的总和)
例如,coneprog.
是您致电时,以下两个等效问题配方中的每一个的默认解算器解决
。
x = Optimvar('X',3,......'indowbound',[ - inf,-inf,0],......'上行',[inf,Inf,2]);a = diag([1,1 / 2,0]);d = [0; 0; 1];f = [-1,-2,0];probnorm = OptimProblem('客观的',f * x);probsumsq = OptimProblem('客观的',f * x);consnorm = norm(a * x)<= d'* x;probnorm.constraints.consnorm = consnorm;consssumsq = sqrt(sum((a * x)。^ 2))<= dot(d,x);probsumsq.constraints.conssumsq = consssumsq;OptNorm = Optimoptions(probnorm);班级(Optnorm)
ans ='Optim.Options.coneprogogtions
Optsumsq = Optimoptions(probsumsq);类(Optsumsq)
ans ='Optim.Options.coneprogogtions
如果您以不同方式编写二阶约束,例如数学上等效sqrt(x'* x)
那解决
呼叫不同的求解器,例如粉刺
。在这种情况下,您需要提供解决
如初始点,并且解决方案过程可以不同(并且通常效率低),如以下示例中那样。
x = Optimvar('X',3,......'indowbound',[ - inf,-inf,0],......'上行',[inf,Inf,2]);a = diag([1,1 / 2,0]);d = [0; 0; 1];f = [-1,-2,0];prob = OptimProblem('客观的',f * x);缺点= sqrt(x'* a'* a * x)<= d'* x;prob.constraints.cons =缺点;选择= Optimoptions(prob);班级(选择)
ans ='Optim.Options.Fmincon'