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

Yalmip使用Knitro的一些總結

1.軟件

  Knitro 11.0.1  html

  Win64(包含安裝包和肯定機器ID的軟件):連接:https://pan.baidu.com/s/14IfxlAdo3myYiAeCGzfSQQ 密碼:2k9qide

  

圖1  Knitro 11.0.1 win64 下載地址函數

  官網獲取地址:https://www.artelys.com/en/optimization-tools/knitro/downloads字體

  經過學術郵箱能夠申請一個月的完整版使用權。ui

圖2 Knitro 的申請spa

  Yalmip的獲取教程見http://www.javashuo.com/article/p-dvihtkdw-cb.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版本接口code

圖4 Yalmip調用Knitro求解器的函數htm

 

3.Yalmip設置Knitro的參數

 

1 options = sdpsettings('verbose',2,'solver','knitro','savesolveroutput',1);%verbose設置顯示信息的程度;savesolveroutput默認爲0,表示不保存求解結果,設爲1表示保存求解結果。
2 sol = optimize(Constraints,F,options);%Constraints爲約束;F爲目標函數;options爲屬性。

 

  • 設置Knitro參數咱們能夠經過設置options來實現,不過options中的Knitro的參數名稱和Knitro給出的參數說明文檔對不上。因此建議使用下面的設置參數的方法。

 

  1.首先找到Knitro的Matlab版本的Nlp例子,其路徑爲:C:\Program Files\Artelys\Knitro 11.0.1\knitromatlab,下面代碼中的knitromatlab是Knitro的matlab的調用接口。blog

[x,fval,exitflag,output,lambda,grad,hess] = knitromatlab(@objfun,x0,A,b,Aeq,beq,lb,ub,@constfun,extendedFeatures,[],'nlp2options.opt');%紅色字體是參數設置文檔

  2.圖5中的exampleNLP2.m文件是Knitro給的NLP的例子,其中nlp2options.opt是Knitro參數設置文檔,參數設置的具體格式見圖6。

  3.圖6是nlp2options.opt文件裏的內容。其中加了‘#’的語句,則‘#’後面的語句不執行(即藍色框)。紅色框爲一個參數的設置語句(參數詳見:https://www.gams.com/latest/docs/S_KNITRO.html#KNITROopttol),後半句爲說明這個參數對應Yalmip中的參數名稱(即圖7中藍色框部分).

  4.那麼咱們將nlp2options.opt文件拷貝到咱們本身項目的路徑下,而後修改Yalmip調用Knitro的函數文件(callknitro.m)中的內容,具體修改見下面的代碼紅色字體部分

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);

 

  5.那麼咱們之後要修改Knitro的參數,只須要在callknitro.m文件中修改便可。

 

圖5  Knitro的Matlab版本的例子

圖6 Knitro的參數設置文檔

圖7 Yalmip中Knitro的參數列表

 

 

4. Knitro返回的代碼編號說明

  具體見:https://www.artelys.com/tools/knitro_doc/3_referenceManual/returnCodes.html#returncodes

 

5.Knitro的用戶使用手冊

  具體見: https://www.artelys.com/tools/knitro_doc/2_userGuide.html

相關文章
相關標籤/搜索