『實踐』Yalmip建模+Cplex類求解(文末附程序、文章和算例)


Yalmip建模+Cplex類求解(文末附程序、文章和算例)

一、緣由

    Yalmip只能設置部分Cplex的參數,所以需要調用Cplex類。而且optimize是Yalmip提供的常用函數,但此函數的返回結果參數有限。

圖1  Yalmip網站對於Cplex求解器的說明

 

二、解決方法

  為了能夠既利用Yalmip來建模(方便),又能調用Cplex類(功能齊全)。我們可以使用Yalmip提供的export函數來輸出model,再新建一個Cplex類實體,將model中整理好的諸如Aineq、bineq等賦值給新建的Cplex類實體。

圖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變量中的參數列表

圖 4   Cplex類實體

三、相關網站

  Yalmip(Matlab)+Cplex類求解電力機組組合問題的樣例程序:http://www.scholat.com/showTeamScholar.html?id=867&changeTo=Ch&nav=5

  https://www.ibm.com/support/knowledgecenter/zh/SSSA5P_12.7.0/ilog.odms.cplex.help/refmatlabcplex/html/classCplex.html

  https://www.ibm.com/support/knowledgecenter/zh/SSSA5P_12.7.0/ilog.odms.cplex.help/CPLEX/Parameters/topics/introListAlpha.html

  https://yalmip.github.io/command/export/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM