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類實體線程