1. 程式人生 > >【實踐】Yalmip使用Knitro的一些總結

【實踐】Yalmip使用Knitro的一些總結

完整 步驟 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的一些總結