相关文章推荐
爱健身的木瓜  ·  HarmonyOS Next ...·  1 年前    · 
俊逸的青蛙  ·  MSBUILD ...·  1 年前    · 
Yalmip cplex gurobi matlab下使用心得

Yalmip cplex gurobi matlab下使用心得

Yalmip 是一个matlab下的工具箱,支持调用多个solver,例如 cplex, gurobi等。它有固定的语法,因此不必为每个求解器去专门学语法。Yalmip常用来解决 linear programming, integer programming等规划问题。

Yalmip 下载 yalmip.github.io/

论坛 groups.google.com/forum

gurobi gurobi.com/ 支持一年的免费学术license

cplex ibm.com/products/trials? 试用版90天 还有对变量数目的限制。


求解器下载后一般放到matlab/toolbox下,然后在环境变量和matlab addpath中添加即可。

Yalmip-master也是同样。


言归正传。 Yalmip支持大多数matlab语法。其建模思路如下。

  1. 初始化参数和数据 例如 A = [1,2,3];
  2. 设立变量 y = intvar(n,m)。 变量主要三种 intvar, binvar 和 sdpvar。
  3. 建立目标函数 objective = y * A。
  4. 设置条件 constraint = [constraint y < 3];
  5. 配置求解器参数 options = sdpsettings('verbose',2,'solver','gurobi','allownonconvex',0,'debug', 1);
  6. 求解 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。

Yalmiptest命令,测试求解器
can&amp;amp;amp;amp;amp;amp;#39;t find solver的解决办法就是添加这两段,改成相应的版本号

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

喜欢的话请点赞,谢谢!

编辑于 2020-12-01 15:39