Matlab,调 用,cplex,必 须 通 过 yalmip 嘛 , 新 手 提 问
Matlab 可以直接调用 Cplex 的 API 进行求解,但使用 YALMIP 可以更方便地实现面向对象的建模,并将问题转换成 Cplex 可识别的格式。
Matlab调用Cplex不必须通过YALMIP,但使用YALMIP可以方便地创建和解决数学规划问题。可以直接使用Cplex API,以Matlab为例:
cplex = Cplex('example');
cplex.Model.sense = 'minimize';
cplex.Model.obj = [1,2,3];
cplex.Model.A = [1,1,1;1,2,3];
cplex.Model.lhs = [5;6];
cplex.Model.rhs = [5;6];
cplex.Model.lb = [0,0,0];
cplex.Model.ub = [inf,inf,inf];
cplex.solve();
fprintf ('Solution status = %s\n', cplex.Solution.statusstring);
fprintf ('Solution value = %f\n', cplex.Solution.objval);
fprintf ('Solution vector =\n');
disp (cplex.Solution.x);
而使用YALMIP,可以用更简单的代码表示相同的问题:
x = sdpvar (3,1);
obj = x' * [1;2;3];
constr = [sum(x) <= 5; x(2) + 2*x(3) <= 6];
sol = solvesdp (constr, obj, sdpsettings ('solver', 'cplex'));
disp (double (obj));
disp (double (x));
这种方法可以更方便地编写复杂的数学规划模型。这里代价是指使用cplex解决某个优化问题所需要付出的资源,可以是计算时间,内存占用,计算资源的消耗等。通过yalmip可以简化模型建立过程,使得使用cplex更为简单方便,但是代价是需要更多的内存占用,不过微不足道。