Yalmip+Ipopt+Cplex使用手冊(文末附程序)
1.軟件版本
2.Cplex添加方法
-
官方下載地址: http://www-01.ibm.com/software/websphere/products/optimization/cplex-studio-community-edition/
- 破解版下載地址:http://www.0daydown.com/02/140054.html
-
其中community-edition可以免費試用,但最多只能計算1000個變量或1000個約束條件的優化問題。
-
點擊
安裝,安裝步驟默認操作即可。
-
點擊Matlab中的
,點擊
,找到
路徑並將其添加,最后點擊
即可。
-
然后在Matlab命令行窗口輸入
,出現幫助文檔,代表添加成功。
3.Ipopt添加方法
-
需要的組件:VC_redist.x64和ww_ifort_redist_intel64_2017.0.109.msi
-
(組件下載地址鏈接:鏈接1:https://pan.baidu.com/s/1f-J5PBu1WsJO8uxyZzbcTQ 密碼:crxv )
- 鏈接2:
-
在打開的界面中選擇圖1-1即可。
圖1
- Ipopt下載地址:https://www.inverseproblem.co.nz/OPTI/index.php/DL/DownloadOPTI(最新版本3.12.9)
- Ipopt下載鏈接:鏈接:https://pan.baidu.com/s/1tWBRJ7syW-WctcL1LkB06w 密碼:1n3m (以前的版本3.12.6)
- 下載下來后解壓縮,打開文件,目錄如下圖1-2。
圖2
- 打開MATLAB,設置路徑-》添加並包含子文件夾-》選擇Ipopt路徑-》保存。見下圖1-3。
圖3
- 右鍵運行圖2中的opti_Install。
- 出現提示讓你安裝optiMEXFiles_mexw64_2_27,回車幾下,彈出窗口,找到optiMEXFiles_mexw64_2_27(不需要自己手動解壓)選中即可。
- VC_redist.x64和ww_ifort_redist_intel64_2017.0.109.msi ,這兩個組件自己手動安裝,注意版本即可。
- 注意下圖中框框中的組件我已經安裝好了,如果沒有安裝,是會有提示的。
IPOPT 3.12.9
4.Yalmip添加方法
- 下載地址:https://yalmip.github.io/(最新版本)
- 下載鏈接:http://pan.baidu.com/s/1eRBhRlK 密碼:dv4o(之前版本)
- 將下載的文件解壓,設置路徑-》添加並包含子文件夾-》選擇Yalmip路徑-》保存。
- 在Matlab的命令行窗口中輸入
或輸入Yalmiptest,測試是否添加成功。
5.Yalmip建模常用語法
5.1 變量設置
- 實數變量:sdpvar;
- 0-1變量:binvar;
- 整數變量:intvar。
- 例如:x = sdpvar(1,1); %x為1×1的實數變量
5.2 約束條件
- Constraints = []; %Constraints為自己定義的一個存儲約束的矩陣
- Constraints = [Constraints,0 <= x <= 1]; %定義了一個變量x大於0且小於1的約束條件
5.3 目標函數
- F = 0; %F為目標函數
- x = sdpvar(1,1);
- Constraints = [Constraints, x >= 2];
- F = F + x^2 + x^3; %目標函數為x^2+x^3
5.4 查看變量或表達式的值
- value(x); %查看變量x的值
- value(x^2+x^3); %查看表達式x^2+x^3的值
5.5 設置Yalmip和求解器的options
- 通過sdpsettings設置,(sdpsettings參數列表鏈接)
- options = sdpsettings('field',value,'field',value,.....); %filed為參數名,value為設置值
- 例如:options = sdpsettings('solver','cplex'); %設置求解器為cplex
- 或者這樣也可以:options.cplex.exportmodel = 'model.lp'; %設置求解器cplex輸出lp格式的數學模型,文件名為model。
圖4
圖5 options
圖6 options.cplex
圖7 xxxx.lp格式的數學模型
5.6 常用求解函數optimize
- sol = optimize(Constraints,Objective,options); %Constraints為約束,Objective為目標函數,options為5.5節的options
5.7 輸出Yalmip模型
- export函數是將Yalmip模型按照求解器的格式輸出。
- [model,recoverymodel,diagnostic,internalmodel] = export(Constraints,Objective,options); %Constraints為約束,Objective為目標函數,options為5.5節的options
- 例如:
- x = intvar(2,2);
- Constraints = [];
- Constraints = [Constraints,0 <= x <= 1];
- F = sum(x) * ones(2,1);
- options = sdpsettings('solver','cplex'); %設置求解器為cplex
- [model,recoverymodel,diagnostic,internalmodel] = export(Constraints,Objective,options); %此時model中就會有符合cplex求解器格式的模型
圖8 model中的參數列表
5.8 獲取求解器的求解時間和Yalmip的建模時間
- sol = optimize(Constraints,Objective,options); %Constraints為約束,Objective為目標函數,options為5.5節的options
- sol.yalmiptime; %Yalmip的建模時間
- sol.solvertime; %求解器的求解時間
5.9 設置初值
- P = sdpvar(2,2);
- assign(P,double(Pit)); %P為2×2的實數變量,Pit為2×2的已知矩陣,將Pit的值賦值給P
- options = sdpsettings('solver','cplex','usex0',1); %usex0默認為0,1為開啟設置初值功能
圖9 Yalmip網站說明
5.10 獲取對偶乘子
- 查看我的另一篇博客:『實踐』Yalmip獲取對偶函數乘子
5.11 Yalmip輸出模型,調用Cplex類求解
- 查看我的另一篇博客::『實踐』Yalmip建模+Cplex類求解
5.12 IPOPT參數設置說明
圖10 IPOPT參數列表
- IPOPT中參數的說明詳見: https://www.gams.com/latest/docs/S_IPOPT.html#IPOPTpardiso_max_iterative_refinement_steps
6.Yalmip+Cplex求解電力系統機組組合程序