Cplex的幾種使用方法總結(jié)2019-05-07

1. 需求的出現(xiàn)

  • 由于我要做的是混合整數(shù)規(guī)劃問題(MIP)举哟,考慮到有現(xiàn)成的求解工具耕蝉,于是決定使用Cplex來進行計算韩肝。

2. 嘗試的第一種解決方法——Cplex+yalmip+Matlab

  • 首先下載Cplex焊切,現(xiàn)在最新的已經(jīng)出到了12.9砰碴,當(dāng)然其實版本問題自己看吧躏筏。
    下載的話可以去官網(wǎng)下載,如果是學(xué)生或者教師是有教育版的可供免費下載的呈枉,需要注冊一下即可趁尼。
    https://www.ibm.com/cn-zh/products/ilog-cplex-optimization-studio?mhq=Cplex%20product&mhsrc=ibmsearch_p
    這個鏈接里有學(xué)生孩擂、教師版茵瘾。)
  • yalmip 是一個可以把不同優(yōu)化器用yalmip自己的語言來進行調(diào)用的一個“通用接口器”般的存在,在其官網(wǎng)上有詳細的安裝介紹芽死,在此不多贅述啃憎。官方鏈接附上:
    https://yalmip.github.io/tutorial/installation/
    里面有詳細的安裝方法和例子可供參考芝囤,而且據(jù)我的同學(xué)說有什么問題給作者留言他會耐心解答。
  • 在如下鏈接中也有一些使用上的介紹辛萍,不過其實官網(wǎng)上的肯定是最直接的悯姊,如果能夠看懂的話建議還是去看官網(wǎng)上的tutorial:
    http://ravenxrz.ink/2019/05/03/yalmip-usage-learning.html
  • Matlab不用多說了。

3. Cplex Python API

  • 首先附上cplex的使用說明贩毕,里面有關(guān)于接口的詳細描述悯许,包括C++, java等等,當(dāng)然也有python的辉阶。https://www.ibm.com/support/knowledgecenter/SSSA5P_12.8.0/ilog.odms.studio.help/pdf/gscplex.pdf
    按照這里面的安裝好python下的cplex module以后先壕,就可以參考一下里面幾個示例lpex.py瘩扼。其中l(wèi)pex1.py是關(guān)于人工輸入模型的方法的描述,lpex2.py是關(guān)于調(diào)用.lp文件的描述垃僚。

4. 使用文件導(dǎo)入模型并求解

  • Cplex Python API +.lp文件導(dǎo)入模型:模型變量過多集绰、約束過多-->手動輸入不可能時,可以通過編寫模型的文件并使用python程序來調(diào)用Cplex谆棺、導(dǎo)入模型并求解來實現(xiàn)問題的解決栽燕。
  • Cplex支持三種文件輸入來導(dǎo)入模型,包括LP包券、MPS和SAV。具體的文件編寫規(guī)則自己查找炫贤,這里附上一個寫的很好的LP文件的編寫規(guī)則的鏈接:
    http://lpsolve.sourceforge.net/5.5/CPLEX-format.htm
  • 在寫好.lp文件以后溅固,可以按前面說的使用lpex2.py來從Terminal里面使用命令行實現(xiàn)問題的求解。

5. 總結(jié)

  • 之所以后面使用了python Cplex API其實是因Matlab+yalmip+Cplex的組合雖然簡單易行兰珍,上手特別快侍郭,而且在matlab里面使用矩陣真的特別方便,但是有些想象不到的問題會出現(xiàn)掠河。
  • 比如我的問題分為大中小三個時亮元,以不同的求解順序來使用Matlab+yalmip+Cplex求解時,大唠摹、中爆捞、小三個的求解時間有比較大的區(qū)別,也就是說勾拉,求解的時間或者說是效率和求解順序有關(guān)(這個就很神了煮甥,內(nèi)心有點不安)。
  • 后來在求解一個更大的問題時使用Matlab+yalmip+Cplex又出現(xiàn)的問題——“跑->跑->matlab自動退出藕赞,跑->跑->matlab自動退出成肘,...,跑->跑->matlab自動退出”的情況斧蜕。
  • 后面使用python調(diào)用API接口双霍,感覺效率比Matlab+yalmip+Cplex更高。

使用中碰到的問題:

  • 問題1:Dual infeasible due to empty column 'x4161'.
    網(wǎng)上找的解答:Like I said above, this problem occurs if presolve reduces the model to a model with an empty column. You can disable presolve (set CPX_PARAM_PREIND=0) but that will not fix the issue that your model is infeasible. You can use the conflict refiner to analyze the infeasibility of your model. You will have to check with yalmip support to figure out how to do any of this. 即應(yīng)該是有全零行出現(xiàn)批销。
  • 問題2:Infeasibility row 'c27283': 0 = 1.
    解決:出現(xiàn)0等于1的情況了洒闸,說明有0等于1這樣的約束出現(xiàn),不可能有可行解均芽∏牦埃可能是約束哪里寫錯了。我最后就是找了一下約束中的問題并進行了解決骡技。
  • 問題3:raise CplexSolverError(error_string, env, status)
    cplex.exceptions.errors.CplexSolverError: CPLEX Error 1464: Line 27618: Identifier/name too long to process.
    解決:
    This error is due to the fact that an LP file has a maximum length of any line (560)
    說明一行的字太長了鸣个,在需要的時候在lp文件里面使用'\n'進行分行即可羞反,反正lp文件是可以分行的。
    對應(yīng)問題的一個鏈接:https://www.ibm.com/developerworks/community/forums/html/threadTopic?id=77777777-0000-0000-0000-000014393504

注:

本文只是個人使用中的一些小小的總結(jié)囤萤,如果有讀者和其他人有更好的方法和更多的經(jīng)驗昼窗,歡迎批評指正和分享經(jīng)驗。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涛舍,一起剝皮案震驚了整個濱河市澄惊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌富雅,老刑警劉巖掸驱,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異没佑,居然都是意外死亡毕贼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進店門蛤奢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鬼癣,“玉大人,你說我怎么就攤上這事啤贩〈海” “怎么了?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵痹屹,是天一觀的道長章郁。 經(jīng)常有香客問我,道長志衍,這世上最難降的妖魔是什么驱犹? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮足画,結(jié)果婚禮上雄驹,老公的妹妹穿的比我還像新娘。我一直安慰自己淹辞,他們只是感情好医舆,可當(dāng)我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著象缀,像睡著了一般蔬将。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上央星,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天霞怀,我揣著相機與錄音,去河邊找鬼莉给。 笑死毙石,一個胖子當(dāng)著我的面吹牛廉沮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播徐矩,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼滞时,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了滤灯?” 一聲冷哼從身側(cè)響起坪稽,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鳞骤,沒想到半個月后窒百,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡豫尽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年篙梢,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拂募。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡庭猩,死狀恐怖窟她,靈堂內(nèi)的尸體忽然破棺而出陈症,到底是詐尸還是另有隱情,我是刑警寧澤震糖,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布录肯,位于F島的核電站,受9級特大地震影響吊说,放射性物質(zhì)發(fā)生泄漏论咏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一颁井、第九天 我趴在偏房一處隱蔽的房頂上張望厅贪。 院中可真熱鬧,春花似錦雅宾、人聲如沸养涮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贯吓。三九已至,卻和暖如春蜀变,著一層夾襖步出監(jiān)牢的瞬間悄谐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工库北, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留爬舰,地道東北人们陆。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像洼专,于是被迫代替她去往敵國和親棒掠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容