YALMIP学习总结2
(2010-01-25 16:16:07)
标签:
academicoptimizationsoftwareyalmip杂谈 |
分类: 建模优化 |
7.SDP建模与求解(没什么特殊之处,方阵默认是对称的,>=0是正定的意思)
A = [-1 2 0;-3 -4 1;0 0 -2];
P = sdpvar(3,3);
F = [P >= 0, A'*P+P*A <= 0];
solvesdp(F);//不写目标时,表示是“可行性”问题
Pfeasible = double(P);//double()表示抽取决策变量的值,是YALMIP对Matlab的重载
8.sdpsettings YALMIP与solvers的通讯管家
(1)ops=sdpsettings可以查看当前的设置
(2)对YALMIP与Solver的通讯进行设置
ops = sdpsettings('field',value,'field',value,...)
solvesdp(Constraints, Objective, ops)
如:ops = sdpsettings('solver','dsdp','verbose',0)
或:ops = sdpsettings('solver','sdpa');
ops =
sdpsettings(ops,'verbose',0);
其中:
slover项可以的设置形式有:
---csdp
---mosek,csdp,dsdp(按你希望的选择顺序)
---mosek,csdp,dsdp,*(通配符告诉YALMIP如果找不到前面的solver就找别的)
usex0项设为1,可以用已经得到的解来作为优化的initial solution
warning,beeponproblem,debug等项用来对warning,error信息控制、调试,也常用
(3)ops.sedumi可以把求解器sedumi的具体参数调出来(其它求解器类似)
9.最大特征值问题
在Control
Theory中常用,唯一注意的是logdet是仅针对SDPT3的命令,且调用时要指定SDPT3求解器,另外,只能用于Objective
func.中,
不能用于约束中;而geomean是一个所有求解器和Objetive and Constraint中广泛使用的命令。
10.Geometric Programming
(1)见Mosek技术文档
(2)能转化GP形式的问题,见Boyd et al.:2007
(3)MIGP 指定integer变量的方法
solvesdp([F,
integer(x)],D)//在约束[]中增加integer(x)
注:mixed-integer branch and bound solver in YALMIP 作为一个组件或工具,使得一切问题的MI版本的求解(branch&bound)变得很容易
实施
(4)GP中,幂用“^”输入,不要用sqrt,cpower等
11.常用非线性操作符
min, max, abs, sqrt, norm, sumk, sumabsk, geomean and cpower;
or, and, ne, iff, implies, nnz, alldifferent, sort and ismember;
有三种方式将其表示为一般的凸/非凸问题
(1)Graph-based representations:增加变量和约束,表示为LP等问题
(2)Mixed-integer representations: 采用整数变量,表示min, max and abs, and combinatorial and logical operators such as or,
and, ne, iff, implies, nnz, alldifferent, sort and ismember
(3)uation-based representations:采用callback uations,只能和general purpose nonlinear solver如fmincon一起使用,大部分
的非线性操作符都可以用这种方式转化。
12.一般的凸/非凸优化问题:见YALMIP Wiki
(1)solvesdp(A*x <= b,sum(log(b-A*x)),sdpsettings('allownonconvex',0))
可以控制YALMIP只能把问题formulate为凸规划
(2)在不影响最优解(optimal solution)的情况下,有时候换一下目标函数的形式有利于求解,新的问题虽然optimal objective与原问题不一
样,但optimal solution与原问题一样。但新的问题在问题结构上更容易求解。这也是模型转化的技巧中需要重点掌握的。
13.Robust Optimization
(1)YALMIP脱胎于控制领域,自然对Robust Optimization(Robust Control)的支持很好,它基于最坏情况分析(min-max),在认为不确定性变量w
达到最坏情况时,保证原问题可行,原目标达到最优。其理论基础是: Linear Conic Programming and Robust Optimization. 方便的是,
YALMIP可以帮助你自动生成原问题的Robust Counterpart,完成必要的推导并求解。这也是YALMIP最特别的地方。若只想要Counterpart,不想求
解,可以用命令
robustify,如果之后想进一步求解,可以把robustify生成的Robust Counterpart用solvesdp求解,如
[Frobust,robust_objective] = robustify(F + W,objective);
sol = solvesdp(Frobust,robust_objective);
也可以跳过生成Robust Counterpart的命令robustify,直接调用solvesdp求解,这时,YALMIP自动完成robustify的工作。
(2)要求:不确定集能表示成锥的形式,或不确定集本身是一个凸多面体(其定点已知);不确定性参数w以双线性或线性形式进入element-wise
constraint.
(3)Reference:(i)Ben-Tal and Nemerovskii:2002 (ii)Poster presented at Reglerm?te 2008
例1:凸多面体形式
sdpvar x w t1 t2
F = [x+w <= 1];
W = [w == t1*(-0.5) + t2*0.5, t1+t2 == 1, 0 <= [t1 t2] <= 1]
W = [W,uncertain([t1 t2 w])];
objective = -x;
sol = solvesdp(F + W,objective)
例2:锥形式
sdpvar x w(2,1)
F = [x+sum(w) <= 1];
W = [norm(w) <= 1/sqrt(2), uncertain(w)];
objective = -x
sol = solvesdp(F + W,objective)
或(因为在Robust Optimization中,QC自动转为SOCP Constraints)
sdpvar x w(2,1)
F = [x+sum(w) <= 1];
W = [w'*w <= 1/2, uncertain(w)];
objective = -x
sol = solvesdp(F + W,objective)
例3:MISDP与Robust Optimization
sdpvar x y t u a
p = a*x^4+y^4+u*x*y+1;
F = [uncertain(u), -1 < u < 1];
F = [F, ismember(a,[3 4 5])];
F = [F, sos(p - t)];
solvesos(F,-t)
这里,不确定变量(参数)是u,a只能取有限个整数;由于a的存在,会激活Branch&Bound, 且每个子问题是uncertain sum-of-square(SOS)问题
,这通常会对偶成一个SDP问题,所以最终是一个MISDP problem.
例4.uncertain SOCP/SDP Constraint Problem也能做Robust Optimation.这时,通常需要uncertain varible在一个多面体中变动,YALMIP会
枚举其定点,通常需要安装MPT。略,见YALMIP Wiki.
A = [-1 2 0;-3 -4 1;0 0 -2];
P = sdpvar(3,3);
F = [P >= 0, A'*P+P*A <= 0];
solvesdp(F);//不写目标时,表示是“可行性”问题
Pfeasible = double(P);//double()表示抽取决策变量的值,是YALMIP对Matlab的重载
8.sdpsettings YALMIP与solvers的通讯管家
(1)ops=sdpsettings可以查看当前的设置
(2)对YALMIP与Solver的通讯进行设置
ops = sdpsettings('field',value,'field',value,...)
solvesdp(Constraints, Objective, ops)
如:ops = sdpsettings('solver','dsdp','verbose',0)
或:ops = sdpsettings('solver','sdpa');
其中:
slover项可以的设置形式有:
usex0项设为1,可以用已经得到的解来作为优化的initial solution
warning,beeponproblem,debug等项用来对warning,error信息控制、调试,也常用
(3)ops.sedumi可以把求解器sedumi的具体参数调出来(其它求解器类似)
9.最大特征值问题
不能用于约束中;而geomean是一个所有求解器和Objetive and Constraint中广泛使用的命令。
10.Geometric Programming
(1)见Mosek技术文档
(2)能转化GP形式的问题,见Boyd et al.:2007
(3)MIGP
注:mixed-integer branch and bound solver in YALMIP 作为一个组件或工具,使得一切问题的MI版本的求解(branch&bound)变得很容易
实施
(4)GP中,幂用“^”输入,不要用sqrt,cpower等
11.常用非线性操作符
min, max, abs, sqrt, norm, sumk, sumabsk, geomean and cpower;
or, and, ne, iff, implies, nnz, alldifferent, sort and ismember;
有三种方式将其表示为一般的凸/非凸问题
(1)Graph-based representations:增加变量和约束,表示为LP等问题
(2)Mixed-integer representations: 采用整数变量,表示min, max and abs, and combinatorial and logical operators such as or,
and, ne, iff, implies, nnz, alldifferent, sort and ismember
(3)uation-based representations:采用callback uations,只能和general purpose nonlinear solver如fmincon一起使用,大部分
的非线性操作符都可以用这种方式转化。
12.一般的凸/非凸优化问题:见YALMIP Wiki
(1)solvesdp(A*x <= b,sum(log(b-A*x)),sdpsettings('allownonconvex',0))
可以控制YALMIP只能把问题formulate为凸规划
(2)在不影响最优解(optimal solution)的情况下,有时候换一下目标函数的形式有利于求解,新的问题虽然optimal objective与原问题不一
样,但optimal solution与原问题一样。但新的问题在问题结构上更容易求解。这也是模型转化的技巧中需要重点掌握的。
13.Robust Optimization
(1)YALMIP脱胎于控制领域,自然对Robust Optimization(Robust Control)的支持很好,它基于最坏情况分析(min-max),在认为不确定性变量w
达到最坏情况时,保证原问题可行,原目标达到最优。其理论基础是: Linear Conic Programming and Robust Optimization. 方便的是,
YALMIP可以帮助你自动生成原问题的Robust Counterpart,完成必要的推导并求解。这也是YALMIP最特别的地方。若只想要Counterpart,不想求
解,可以用命令
robustify,如果之后想进一步求解,可以把robustify生成的Robust Counterpart用solvesdp求解,如
[Frobust,robust_objective] = robustify(F + W,objective);
sol = solvesdp(Frobust,robust_objective);
也可以跳过生成Robust Counterpart的命令robustify,直接调用solvesdp求解,这时,YALMIP自动完成robustify的工作。
(2)要求:不确定集能表示成锥的形式,或不确定集本身是一个凸多面体(其定点已知);不确定性参数w以双线性或线性形式进入element-wise
constraint.
(3)Reference:(i)Ben-Tal and Nemerovskii:2002 (ii)Poster presented at Reglerm?te 2008
例1:凸多面体形式
sdpvar x w t1 t2
F = [x+w <= 1];
W = [w == t1*(-0.5) + t2*0.5, t1+t2 == 1, 0 <= [t1 t2] <= 1]
W = [W,uncertain([t1 t2 w])];
objective = -x;
sol = solvesdp(F + W,objective)
例2:锥形式
sdpvar x w(2,1)
F = [x+sum(w) <= 1];
W = [norm(w) <= 1/sqrt(2), uncertain(w)];
objective = -x
sol = solvesdp(F + W,objective)
或(因为在Robust Optimization中,QC自动转为SOCP Constraints)
sdpvar x w(2,1)
F = [x+sum(w) <= 1];
W = [w'*w <= 1/2, uncertain(w)];
objective = -x
sol = solvesdp(F + W,objective)
例3:MISDP与Robust Optimization
sdpvar x y t u a
p = a*x^4+y^4+u*x*y+1;
F = [uncertain(u), -1 < u < 1];
F = [F, ismember(a,[3 4 5])];
F = [F, sos(p - t)];
solvesos(F,-t)
这里,不确定变量(参数)是u,a只能取有限个整数;由于a的存在,会激活Branch&Bound, 且每个子问题是uncertain sum-of-square(SOS)问题
,这通常会对偶成一个SDP问题,所以最终是一个MISDP problem.
例4.uncertain SOCP/SDP Constraint Problem也能做Robust Optimation.这时,通常需要uncertain varible在一个多面体中变动,YALMIP会
枚举其定点,通常需要安装MPT。略,见YALMIP Wiki.
前一篇:YALMIP学习总结1
后一篇:YALMIP学习总结3