Yalmip只能设置部分Cplex的参数,因此须要调用Cplex类。并且optimize是Yalmip提供的经常使用函数,但此函数的返回结果参数有限。html
图1 Yalmip网站对于Cplex求解器的说明git
为了可以既利用Yalmip来建模(方便),又能调用Cplex类(功能齐全)。咱们可使用Yalmip提供的export函数来输出model,再新建一个Cplex类实体,将model中整理好的诸如Aineq、bineq等赋值给新建的Cplex类实体。github
图2 F为目标函数,h为约束,ops为options。函数
下面举个具体例子,model存储着Yalmip创建的模型,cplex_milp为Cplex类实体,能够对其设置各类参数属性。Cplex的参数列表地址。优化
ps:model中的矩阵中的变量排序没法知道。网站
1 %yalmip设置 2 options = sdpsettings('solver' ,'cplex'); 3 options.showprogress = 1;%1为设置显示yalmip如今在作什么 4 options.verbose = 2;%设置显示信息程度,1为适度显示,2为彻底显示。 5
6 [model,recoverymodel,diagnostic,internalmodel] = export(Constraints,Objective,options);%输出Yalmip模型 7 %定义一个Cplex类实体 8 cplex_milp = Cplex('Milp for HTC'); 9 cplex_milp.Model.sense = 'minimize'; 10 cplex_milp.Model.obj = model.f; 11 cplex_milp.Model.lb = model.lb; 12 cplex_milp.Model.ub = model.ub; 13 cplex_milp.Model.A = [model.Aineq;model.Aeq]; 14 cplex_milp.Model.lhs = [-Inf.*ones(size(model.bineq,1),1);model.beq]; 15 cplex_milp.Model.rhs = [model.bineq;model.beq]; 16 cplex_milp.Model.ctype = model.ctype';
20 cplex_milp.Param.mip.tolerances.mipgap.Cur = zk.solver_error;%相对MIP间隔容差,(精度) 21 cplex_milp.Param.threads.Cur = 1;%设置将由任何 CPLEX 并行优化器调用的并行线程的缺省数量。1为单线程 22 cplex_milp.Param.mip.display = 1;%决定在混合整数优化期间cplex报告到屏幕的内容。默认为2. 23 cplex_milp.Param.timelimit = 15;%设置对优化器的调用的最长时间(以秒为单位) 24 cplex_milp.writeModel('hmilp.lp');%输出数学模型 25 cplex_milp.solve();
图3 上面代码中的model变量中的参数列表spa
图 4 Cplex类实体线程