GPOPS工具箱在2019及以上版本中出錯(cuò)解決辦法
最近使用GPOPS進(jìn)行仿真,最開始用的matlab版本是15b,太老了,自動(dòng)補(bǔ)全代碼功能什么的都不如新版本,于是換了2021b,結(jié)果跑GPOPS會(huì)出動(dòng)態(tài)鏈接庫錯(cuò)誤。這是因?yàn)镚POPS里面采用的序列二次規(guī)劃方法是調(diào)用的IPOPT經(jīng)matlab老版本編譯的工具包,matlab這些年更新有些庫可能被移除了,所以無法使用。接下來是具體解決辦法(僅限windows平臺(tái)下,mac或Linux平臺(tái)做個(gè)參考吧):
1、Github上找mexIPOPT,參考鏈接:https://github.com/ebertolazzi/mexlPOPT。下載全部源碼后解壓mexIPOPT-master。
2、matlab安裝mingw,這個(gè)需要和matlab匹配,因?yàn)閙atlab支持的gcc版本最高才6.3.3,所以裝錯(cuò)版本matlab是無法支持的。推薦方法:附加功能管理器直接找mingw,下載安裝好直接配置:mex -setup。
3、matlab中路徑轉(zhuǎn)換到mexIPOPT解壓后的文件夾下的toolbox中,直接運(yùn)行CompileIpoptMexLib.m,等待編譯成功。
4、mexIPOPT-master\toolbox\bin\windows_mingw將該路徑下全部文件放到\Gpops\nlp\ipopt下,原GPOPS中的ipopt下文件只需要保留ipopt_auxdata.m,另外\mexIPOPT-master\toolbox\lib下的ipopt.m也要放到GPOPS下的ipopt文件夾中。
5、打開\Gpops\lib\gpopsRPMIntegration\gpopsIpoptRPMI.m將[Zsol info] = ipopt(ZG,funcs,options);改為[Zsol info] = ipopt_auxdata(ZG,funcs,options);如果用的是GPOPS中的微分部分,就修改:\Gpops\lib\gpopsRPMDifferentiation\gpopsIpoptRPMD.m相應(yīng)的程序。原始程序直接調(diào)用ipopt,funcs中的函數(shù)句柄沒有輸入輔助數(shù)據(jù),導(dǎo)致無法運(yùn)行。
ps:這樣編譯出來是一個(gè)mexw64文件加一些庫文件,也可以考慮直接用已編譯好帶庫的Ipopt包,文件占用會(huì)更小一點(diǎn),但是兼容性可能不太好。