編者按:

優化求解器對於做運籌學應用的學生來說,意義重大。

然而直到今天,放眼望去,全網(包括牆外)幾乎沒有一個系統的Cplex中文求解器教程。

作為華人運籌學的最大的社區,『運籌OR帷幄』 責無旁貸,我們決定承擔這「吃力不討好」的責任。

Cplex視頻教程由『運籌OR帷幄』【視頻】版塊榮譽出品,主編留德華叫獸策劃和監製,【視頻】版塊責編唐博編程並錄製,初步設置16節課,希望能為大家掃盲數學規劃求解器的編程基礎,並且用實例帶大家入門如今最火的人工智慧、計算機視覺(底層即優化問題)。

文章作者:?? @留德華叫獸,『運籌OR帷幄』主編

視頻錄製、剪輯:唐博 ,『運籌OR帷幄』報道、視頻版塊責編視頻策劃、監製:??? @留德華叫獸 文章發表於微信公眾號【運籌OR帷幄】:視頻教程 | 用Python玩轉運籌優化求解器IBM Cplex(一 )歡迎原鏈接轉發,轉載請私信 @運籌OR帷幄 獲取信息,盜版必究。敬請關注和擴散本專欄及同名公眾號,會邀請全球知名學者發布運籌學、人工智慧中優化理論等相關乾貨、知乎Live及行業動態:『運籌OR帷幄』大數據人工智慧時代的運籌學

01優化求解器概述

當我們費勁千辛萬苦對一個實際問題用數學規劃建模以後,寫成如下優化問題:

我們知道,數學建模完成後要求解具體的實例,下一步便需要設計相應演算法,然後導入實際數據求解。

如果問題是線性規劃,因為有相應的多項式時間演算法(例如內點演算法),設計並實現一下演算法可能還不是那麼的困難。

但是,如果問題是一個整數規劃,其求解的基本演算法是分支定界法:

留德華叫獸:【學界】混合整數規劃/離散優化的精確演算法--分支定界法及優化求解器

那麼我們是否還要親自手擼一遍指數級複雜度的分支定界法呢?

幾十年前,當市場上還不存在優化求解器的時候,很不幸的告訴你:需要!

在海德堡大學讀博期間,我與歐洲運籌協會主席、巴塞羅那理工Elena Fernandez教授(eio.upc.edu/en/homepage)閑聊的時候,她就跟我訴苦當年她讀博時期手擼分支定界演算法的「悲慘」經歷。(當時作為一名運籌學研究精確演算法博士生的畢業難度/代碼能力可想而知。)

而今,正因為有了優化求解器的存在,我們只需將以上整數規劃模型的係數矩陣輸入到優化求解器中,它就能夠給我們快速求出最優解或可行解。

並且除了最基礎的分支定界法,求解器通常還集成了各種「花式「的啟發式和割平面演算法,使得求解效率大大提高!

因此,運籌學博士生的畢業難度大大降低!

還是一頭霧水?優化求解器到底是什麼呢?

從編程的角度,大家可以把它理解為一個專門求解優化/整數規劃模型的演算法包(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()

02商業整數規劃求解器

1. IBM ILOG Cplex

由於歐盟瑪麗居里項目的緣故,我曾經在義大利Blogna Cplex的developer之一Andrea Tramontani手底下「實習」了半年

網址:ibm.com/products/ilog-c

支持模型:混合整數(平方)規劃、Constraint programming

支持語言:C/C++、Java、Python、Matlab等

特點:支持Benders分解模塊(僅此一家)、速度Top2

當前版本:12.8

2. Gurobi

網址:gurobi.com

支持模型:混合整數(平方)規劃、Constraint programming

支持語言:C/C++、Java、R、Python、Matlab等

特點:速度Top2、價格最高

當前版本:8.0

3. FICO Xpress

網址:fico.com/en/products/fi

支持模型:混合整數(非線性)規劃、Constraint programming

特點:速度Top3,支持魯棒優化

當前版本:8.5

更多關於優化求解器的介紹,請參見【運籌OR帷幄】之前的一篇推文:【學界】運籌學數學規劃|離散優化求解器大搜羅

03Cplex視頻教程(Python API)

因為本科和碩士都是數學背景的關係,我的編程基礎很差。回想起當年我讀博初期,從碩士研究優化理論到博士初次接觸運籌學的應用,在建立好優化模型後,對於如何使用求解器是一頭霧水,無從下手。

直到去到IBM Cplex實習,Cplex開發者之一的Dr. Andrea和IBM科學家Andrea Lodi教授,以及瑪麗居里項目幾個同事悉心地指導,才使我短短几個月便從Cplex最簡單的應用到Cplex callback function到列生成法的實現逐一捋了一遍!

優化求解器對於做運籌學應用的學生來說,意義重大。

然而直到今天,放眼望去,全網(包括牆外)幾乎沒有一個系統的Cplex中文求解器教程。

作為華人運籌學的最大的社區,『運籌OR帷幄』 責無旁貸,我們決定承擔這「吃力不討好」的責任。

Cplex視頻教程由『運籌OR帷幄』視頻版塊榮譽出品,主編留德華叫獸策劃和監製,【視頻】版塊責編唐博編程並錄製。

我們假設讀者已有一定的Python編程基礎,在傳授如何用Python調用Cplex求解數學規劃問題的同時,我們也試圖講解如何把一個實際問題(例如計算機視覺案例)數學建模成整數規劃模型,以及一些常用的大規模優化問題的分解方法(割平面、列生成)等建模技巧。

希望這個系列視頻能為大家掃盲數學規劃求解器的編程基礎,並且用實例帶大家入門如今最火的人工智慧、計算機視覺(底層都是優化問題)。

總提綱(試行):

  • CPLEX的下載和安裝
  • CPLEX Python API的安裝和調用
  • 數學規劃模型lp、mps格式文件的讀寫
  • 線性規劃問題建模及求解
  • 線性規劃問題敏感性分析
  • 線性規劃問題優化器選擇
  • 混合整數規劃問題建模及求解
  • 混合整數規劃問題求解策略設置
  • 混合整數二次規劃問題求解
  • 模型修改和重新優化
  • 進階版--絕對值不等式轉線性
  • 進階版--高次不等式轉線性
  • 進階版--大M不等式及其傷害
  • 進階版--數學建模的藝術之一題多解
  • 進階版--割平面法之計算機視覺實例
  • 進階版--列生成法之計算機視覺實例

以上提綱僅為試行版本,隨著視頻錄製的進行,可能會有修改或增減。

也希望優化求解器大牛們參與到我們的視頻教程創作中來,或提供寶貴的建議,一起參與到運籌學的科普中~

第一期視頻內容:

  • 用CPLEX製作圖像處理工具之展望
  • CPLEX學術版申請
  • CPLEX下載及安裝
  • Anaconda環境下安裝CPLEX Python API
  • CPLEX Python API的調用

據@唐博說,第一期視頻雖然只有不到10分鐘,但是前期策劃和轉變,加上反覆錄製和剪輯,前前後後花了至少有8個小時。

不光是錄製視頻,其實『運籌OR帷幄』創作推文也一樣,每篇文章都會花費責編/作者數小時創作/編輯。

因此,各位讀者如果看到您覺得不錯的推文,希望可以點個「好看」和分享,讓知識傳播地更遠,一起科普運籌學!

鄭重聲明:

所有Cplex Python API視頻教程免費代碼開源

好了,千呼萬喚使出來,下面便是第一期的視頻教程:

嫌手機屏幕太小,看得不夠過癮!?

沒問題!歡迎關注『運籌OR帷幄』官方B站:運籌OR帷幄,Cplex Python API系列視頻教程和視頻直播都會首發於B站。

B站網址:space.bilibili.com/4030

此外,欲獲得視頻中的源代碼,請於『運籌OR帷幄』公眾號後台回復關鍵詞: Cplex教程

強烈建議大家下載源代碼,跟著唐博一起手擼Cplex的Python源代碼喔!~

04運籌OR帷幄【視頻】版塊成立啦

「視頻」版塊上線初期,將涵蓋三個模塊:

Part ONE:

視頻教程--即類似今天這樣的技術視頻教程

Part TWO:

科普快照--即科普類、趣味性視頻,讓學科傳播地更遠

Part THREE:

SundayLive--即留德華叫獸擔任主播,並不定期邀請行業好友/大佬,與大家談天說地

欲知詳情,請見:

號外!『運籌OR帷幄』開直播、出教程啦!「視頻」版塊正式開通!

【視頻】版塊主編/責編火熱招募中【視頻】版塊現招募版塊(副)主編,歡迎對運籌學/數據科學/AI科普有熱情的小夥伴加盟,將學科知識傳播給平台10W+的同行,共同學習和成長。最後,如果對於【視頻】版塊或者Cplex教程的提綱有任何建議或想法,都歡迎在評論區指出!

溫馨提示

欲獲得視頻中的源代碼, 可以在 本公眾號後台 回復關鍵詞:「 Cplex教程 」,如果覺得有用, 請勿吝嗇你的留言和贊哦!~


掃二維碼關注『運籌OR帷幄』公眾號:

點擊查看『運籌OR帷幄』志願者招募介紹及加入方式:


推薦閱讀:
相关文章