Yalmip cplex gurobi matlab下使用心得
Yalmip 是一个matlab下的工具箱,支持调用多个solver,例如 cplex, gurobi等。它有固定的语法,因此不必为每个求解器去专门学语法。Yalmip常用来解决 linear programming, integer programming等规划问题。
Yalmip 下载 https:// yalmip.github.io/ 。
论坛 https:// groups.google.com/forum /#!forum/yalmip 。
gurobi https://www. gurobi.com/ 支持一年的免费学术license
cplex https://www. ibm.com/products/trials? lnk=hpmpr&lnk2=trial&lnk=STW_US_MAST_NAV_TL&lnk2=trial_THP 试用版90天 还有对变量数目的限制。
求解器下载后一般放到matlab/toolbox下,然后在环境变量和matlab addpath中添加即可。
Yalmip-master也是同样。
言归正传。 Yalmip支持大多数matlab语法。其建模思路如下。
- 初始化参数和数据 例如 A = [1,2,3];
- 设立变量 y = intvar(n,m)。 变量主要三种 intvar, binvar 和 sdpvar。
- 建立目标函数 objective = y * A。
- 设置条件 constraint = [constraint y < 3];
- 配置求解器参数 options = sdpsettings('verbose',2,'solver','gurobi','allownonconvex',0,'debug', 1);
- 求解 result = optimize( constraint, objective, options)
几个小技巧 :
1.用关键字value 来把结果和变量打出来, 例如求解后用 value(y), value(result)来查看求解答案。
2. 有时候求解会出现 can't find solver , 这时候用 yalmiptest 命令来查看都安装了哪些求解器。 例如cplex只支持到12.8, 那么想用12.9 就要手动在 matlab\toolbox\YALMIP-master\solvers 在手动修改 definesolvers这个文件, 在里面按照12.8 的格式 改成12.9。
3.有时候cplex求解不出来,可以试试用其他求解器。这时报错 infeasible solution 或者 没结果。
4. Yalmip 的变量不支持 if - else 语法。也是说if ( y(1,2)==1) y(2,3) = 2 end; 这种在if -else中有变量的情况是不行的。 这时要用关键字 implies(y(1,2)==1, y(2,3) = 2); 然后再添加到constraint里。 这些条件都是求解时才生效,所以 不可以 在程序逻辑里调用他们做中间变量, 并赋值给其他变量。
PS. Yalmip上手不难,跑不出结果要多细心review代码,实际上大多出问题都是粗心造成的。
更新gurobi license:
win+r -> cmd -> grbgetkey xxxxxx
喜欢的话请点赞,谢谢!