編者按:
優化求解器對於做運籌學應用的學生來說,意義重大。
然而直到今天,放眼望去,全網(包括牆外)幾乎沒有一個系統的Cplex中文求解器教程。
作為華人運籌學的最大的社區,『運籌OR帷幄』 責無旁貸,我們決定承擔這「吃力不討好」的責任。
Cplex視頻教程由『運籌OR帷幄』【視頻】版塊榮譽出品,主編留德華叫獸策劃和監製,【視頻】版塊責編唐博編程並錄製,初步設置16節課,希望能為大家掃盲數學規劃求解器的編程基礎,並且用實例帶大家入門如今最火的人工智慧、計算機視覺(底層即優化問題)。
文章作者:?? @留德華叫獸,『運籌OR帷幄』主編視頻錄製、剪輯:唐博 ,『運籌OR帷幄』報道、視頻版塊責編視頻策劃、監製:??? @留德華叫獸 文章發表於微信公眾號【運籌OR帷幄】:視頻教程 | 用Python玩轉運籌優化求解器IBM Cplex(一 )歡迎原鏈接轉發,轉載請私信 @運籌OR帷幄 獲取信息,盜版必究。敬請關注和擴散本專欄及同名公眾號,會邀請全球知名學者發布運籌學、人工智慧中優化理論等相關乾貨、知乎Live及行業動態:『運籌OR帷幄』大數據人工智慧時代的運籌學
文章作者:?? @留德華叫獸,『運籌OR帷幄』主編
當我們費勁千辛萬苦對一個實際問題用數學規劃建模以後,寫成如下優化問題:
我們知道,數學建模完成後要求解具體的實例,下一步便需要設計相應演算法,然後導入實際數據求解。
如果問題是線性規劃,因為有相應的多項式時間演算法(例如內點演算法),設計並實現一下演算法可能還不是那麼的困難。
但是,如果問題是一個整數規劃,其求解的基本演算法是分支定界法:
留德華叫獸:【學界】混合整數規劃/離散優化的精確演算法--分支定界法及優化求解器
那麼我們是否還要親自手擼一遍指數級複雜度的分支定界法呢?
幾十年前,當市場上還不存在優化求解器的時候,很不幸的告訴你:需要!
在海德堡大學讀博期間,我與歐洲運籌協會主席、巴塞羅那理工Elena Fernandez教授(https://www.eio.upc.edu/en/homepages/elena)閑聊的時候,她就跟我訴苦當年她讀博時期手擼分支定界演算法的「悲慘」經歷。(當時作為一名運籌學研究精確演算法博士生的畢業難度/代碼能力可想而知。)
而今,正因為有了優化求解器的存在,我們只需將以上整數規劃模型的係數矩陣輸入到優化求解器中,它就能夠給我們快速求出最優解或可行解。
並且除了最基礎的分支定界法,求解器通常還集成了各種「花式「的啟發式和割平面演算法,使得求解效率大大提高!
因此,運籌學博士生的畢業難度大大降低!
還是一頭霧水?優化求解器到底是什麼呢?
從編程的角度,大家可以把它理解為一個專門求解優化/整數規劃模型的演算法包(library),你可以用任何編程語言(C/C++、Java、Python)去調用這個包里的方程,只要你把你要求解的整數規劃模型目標方程和係數矩陣輸入進去(告訴它你要求解的具體問題),它就會給你求解出結果。
例如在Python環境下只需如下四步:
1導入CPLEX的包
import cplex
2初始化一個優化模型
prob = cplex.Cplex() # 此處的prob可以是任意變數名
3輸入模型的目標函數、約束條件及變數係數
prob.objective.set_sense(...) # 設置目標方程的取值方向:求最大值/最小值
prob.variables.add(...) # 添加變數
prob.linear_constraints.add(...) # 添加約束條件
4直接調用優化求解器的求解方法(method),一鍵求解
prob.solve()
1. IBM ILOG Cplex
由於歐盟瑪麗居里項目的緣故,我曾經在義大利Blogna Cplex的developer之一Andrea Tramontani手底下「實習」了半年
網址:http://www.ibm.com/products/ilog-cplex-optimization-studio
支持模型:混合整數(平方)規劃、Constraint programming
支持語言:C/C++、Java、Python、Matlab等
特點:支持Benders分解模塊(僅此一家)、速度Top2
當前版本:12.8
2. Gurobi
網址:http://www.gurobi.com
支持語言:C/C++、Java、R、Python、Matlab等
特點:速度Top2、價格最高
當前版本:8.0
3. FICO Xpress
網址:http://www.fico.com/en/products/fico-xpress-optimization
支持模型:混合整數(非線性)規劃、Constraint programming
特點:速度Top3,支持魯棒優化
當前版本:8.5
更多關於優化求解器的介紹,請參見【運籌OR帷幄】之前的一篇推文:【學界】運籌學數學規劃|離散優化求解器大搜羅
因為本科和碩士都是數學背景的關係,我的編程基礎很差。回想起當年我讀博初期,從碩士研究優化理論到博士初次接觸運籌學的應用,在建立好優化模型後,對於如何使用求解器是一頭霧水,無從下手。
直到去到IBM Cplex實習,Cplex開發者之一的Dr. Andrea和IBM科學家Andrea Lodi教授,以及瑪麗居里項目幾個同事悉心地指導,才使我短短几個月便從Cplex最簡單的應用到Cplex callback function到列生成法的實現逐一捋了一遍!
Cplex視頻教程由『運籌OR帷幄』視頻版塊榮譽出品,主編留德華叫獸策劃和監製,【視頻】版塊責編唐博編程並錄製。
我們假設讀者已有一定的Python編程基礎,在傳授如何用Python調用Cplex求解數學規劃問題的同時,我們也試圖講解如何把一個實際問題(例如計算機視覺案例)數學建模成整數規劃模型,以及一些常用的大規模優化問題的分解方法(割平面、列生成)等建模技巧。
希望這個系列視頻能為大家掃盲數學規劃求解器的編程基礎,並且用實例帶大家入門如今最火的人工智慧、計算機視覺(底層都是優化問題)。
總提綱(試行):
以上提綱僅為試行版本,隨著視頻錄製的進行,可能會有修改或增減。
也希望優化求解器大牛們參與到我們的視頻教程創作中來,或提供寶貴的建議,一起參與到運籌學的科普中~
第一期視頻內容:
據@唐博說,第一期視頻雖然只有不到10分鐘,但是前期策劃和轉變,加上反覆錄製和剪輯,前前後後花了至少有8個小時。
不光是錄製視頻,其實『運籌OR帷幄』創作推文也一樣,每篇文章都會花費責編/作者數小時創作/編輯。
因此,各位讀者如果看到您覺得不錯的推文,希望可以點個「好看」和分享,讓知識傳播地更遠,一起科普運籌學!
鄭重聲明:所有Cplex Python API視頻教程免費代碼開源
鄭重聲明:
嫌手機屏幕太小,看得不夠過癮!?
沒問題!歡迎關注『運籌OR帷幄』官方B站:運籌OR帷幄,Cplex Python API系列視頻教程和視頻直播都會首發於B站。
B站網址:https://space.bilibili.com/403058474
此外,欲獲得視頻中的源代碼,請於『運籌OR帷幄』公眾號後台回復關鍵詞: Cplex教程
「視頻」版塊上線初期,將涵蓋三個模塊:
Part ONE:
視頻教程--即類似今天這樣的技術視頻教程
Part TWO:
科普快照--即科普類、趣味性視頻,讓學科傳播地更遠
Part THREE:
SundayLive--即留德華叫獸擔任主播,並不定期邀請行業好友/大佬,與大家談天說地
欲知詳情,請見:
號外!『運籌OR帷幄』開直播、出教程啦!「視頻」版塊正式開通!
溫馨提示
欲獲得視頻中的源代碼, 可以在 本公眾號後台 回復關鍵詞:「 Cplex教程 」,如果覺得有用, 請勿吝嗇你的留言和贊哦!~
掃二維碼關注『運籌OR帷幄』公眾號:
點擊查看『運籌OR帷幄』志願者招募介紹及加入方式: