【實踐】Yalmip使用Knitro的一些總結
阿新 • • 發佈:2018-06-29
完整 步驟 bubuko pro 打開 ecg LV start features
Yalmip使用Knitro的一些總結
1.軟件
Knitro 11.0.1
Win64(包含安裝包和確定機器ID的軟件):鏈接:https://pan.baidu.com/s/14IfxlAdo3myYiAeCGzfSQQ 密碼:2k9q
圖1 Knitro 11.0.1 win64 下載地址
官網獲取地址:https://www.artelys.com/en/optimization-tools/knitro/downloads
通過學術郵箱可以申請一個月的完整版使用權。
圖2 Knitro 的申請
Yalmip的獲取教程見https://www.cnblogs.com/landiljy/p/6776434.html
2.Yalmip使用Knitro
- Yalmip和Knitro都安裝好以後,命令行窗口輸入yalmiptest,看下是否找到knitro求解器
- Yalmip中調用knitro。見下面代碼
1 options = sdpsettings(‘verbose‘,2,‘solver‘,‘knitro‘,‘savesolveroutput‘,1);%verbose設置顯示信息的程度;savesolveroutput默認為0,表示不保存求解結果,設為1表示保存求解結果。 2 sol = optimize(Constraints,F,options);%Constraints為約束;F為目標函數;options為屬性。
- 按照上面步驟設置savesolveroutput=1後,報錯。
- 然後查看了Yalmip調用Knitro求解器的函數文件,發現了問題。方法如下:
- 按照路徑F:\MATLAB2014\AddTool\YALMIP-master\solvers\callknitro.m(紅色部分為軟件裏的路徑部分),打開callknitro.m文件。
- 可以發現圖4中保存計算結果的語句中fmin語句有錯(沒有fmin這個變量)。圖3中返回的是fval。
- 其中這裏可以參考:http://blog.sina.com.cn/s/blog_50c154510102wusb.html
圖3 Yalmip調用Knitro的Matlab版本接口
圖4 Yalmip調用Knitro求解器的函數
- 設置Knitro的參數方法如下:
- Knitro的Matlab版本的Nlp例子路徑:C:\Program Files\Artelys\Knitro 11.0.1\knitromatlab
[x,fval,exitflag,output,lambda,grad,hess] = knitromatlab(@objfun,x0,A,b,Aeq,beq,lb,ub,@constfun,extendedFeatures,[],‘nlp2options.opt‘);%紅色字體是參數設置文檔
- 圖5中exampleNLP2.m文件是Knitro給的NLP的例子,其中nlp2options.opt是Knitro參數設置文檔,具體格式見圖6。
- 圖6中加了‘#’的語句,則‘#’後面的語句不執行(即藍色框)。紅色框為一個參數的設置語句(參數詳見:https://www.gams.com/latest/docs/S_KNITRO.html#KNITROopttol),後半句為說明這個參數對應Yalmip中的參數名稱(即圖7中藍色框部分).
- 那麽我們將nlp2options.opt文件拷貝到我們自己項目的路徑下,然後修改callknitro.m文件,具體修改見最後的代碼紅色字體部分。
- 那麽我們以後要修改Knitro的參數,只需要在callknitro.m文件中修改即可。
圖5 Knitro的Matlab版本的例子
圖6 Knitro的參數設置文檔
圖7 Yalmip中Knitro的參數列表
1 solvertime = tic; 2 %自己加的對options的設置---start----2018.06.27 3 model.options.knitro.optionsfile = ‘nlp2options.opt‘; %參數設置文檔 4 %自己加的對options的設置---end---- 5 [xout,fval,exitflag,output,lambda] = knitromatlab_mip(funcs.objective,model.x0,model.A,full(model.b),model.Aeq,full(model.beq),model.lb,model.ub,funcs.constraints,model.xType,model.objFnType,model.cineqFnType,model.extendedFeatures,model.options.knitro,model.options.knitro.optionsfile); 6 solvertime = toc(solvertime);
【實踐】Yalmip使用Knitro的一些總結