看到BC資料架構系統中的演算法運用後,談談自己對列生成演算法的理解
看到BC程式設計系統中的演算法運用和做過大量的BC專案後,越來越能感覺到,現在的所有的程式系統搭建演變,都是附隨著一代又一代的演算法迭代和創新才推動出更多元化的專案場景的解決方案。平時的BC演示專案中運用比較多的列生成演算法,應該是邏輯演算法中的應用典範了。讓我用最簡單的文字敘述來慢慢為你解釋列生成演算法的邏輯演變過程。
弄懂列生成演算法的基礎原理,才能更好的使用好這個工具
列生成演算法是由對偶角度和單純形演算法角度組成。在
對偶的概念。
假設有個長得很標準的線性規劃問題:
那麼,它的對偶問題為:
下面我們都以這個問題來討論,即說到原問題時,預設是一個最小化問題;說到對偶問題時,預設是一個最大化問題。
怎麼理解這個對偶關係呢?借用經濟學方面的話來說,假設原問題的目標是讓成本最小,那麼對偶就是讓收入最大。更確切地講,是:
原問題丶:保證收入不低於某個值的條件下,使成本最小化。
對偶問題:保證成本不高於某個值的條件下,使收入最大化。
那個丶純粹是為了對齊,忽略之……
可以看到,原問題和對偶問題其實就是一個問題:目標淨收益最大。只是一個是約束收入最佳化成本,一個是約束成本最佳化收入。角度不同而已。體現在公式上,就是原問題的變數對應對偶問題的約束,目標係數對應約束邊界,約束矩陣倒轉過來。
單純型法雖然能保證在數次迭代後找到最優解,但是其面對變數很多的線性規劃問題就顯得很弱了。因為它需要去在眾多變數裡進行基變換,就上面的問題而言,你想想你要在近10000個變數裡面找個能進基的,活著不好嗎?
再有,在用單純形法求解這類線性規劃問題時,基變數(basic variable)只與約束的個數相關,每次迭代只會有一個新的非基變數(non-basic variable)進基,因此,在整個求解過程中其實只有很少一部分變數會被涉及到。
因此,有人基於單純型法提出了列生成演算法。其思路大概如下:[1]
先把原問題(master problem)restrict到一個規模更小(即變數數比原問題少的)的restricted master problem,在restricted master problem上用單純型法求最優解,但是此時求得的最優解只是restricted master problem上的,並不是master problem的最優解。
此時,就需要透過一個subproblem去check在那些未被考慮的變數中是否有使得reduced cost小於零的?如果有,那麼就把這個變數的相關係數列加入到restricted master problem的係數矩陣中,回到第1步。
經過反覆的迭代,直到subproblem中的reduced cost rate大於等於零,那麼master problem就求到了最優解。
看演算法流程圖會更加直觀哦:[2]
03 相關概念科普
剛剛講的內容涉及到了幾個概念,master problem,restricted master problem,subproblem等,這一節來把這幾個概念給講清楚。基於一個問題線性規劃問題:
min(y1+...+yn)R1:a11y1+...+a1nyn≥b1R2:a21y1+...+a2nyn≥b2……Rm:am1y1+...+amnyn≥bmmin(y1+...+yn)R1:a11y1+...+a1nyn≥b1R2:a21y1+...+a2nyn≥b2……Rm:am1y1+...+amnyn≥bm
3.1 master problem(MP)
master problem可以認為是原問題。即
min(y1+...+yn)R1:a11y1+...+a1nyn≥b1R2:a21y1+...+a2nyn≥b2……Rm:am1y1+...+amnyn≥bmmin(y1+...+yn)R1:a11y1+...+a1nyn≥b1R2:a21y1+...+a2nyn≥b2……Rm:am1y1+...+amnyn≥bm
3.2 restricted master problem(RMP)
前面我們說過,把原問題(master problem)restrict到一個規模更小(即變數數比原問題少的)的就是restricted master problem了。比如可以用啟發式演算法,在上面的master problem找出滿足條件(也就是形成的restricted master problem必須要有可行解)的k個列,得到如下的restricted master problem:
min(y1+y2+...+yk)R1:a11y1+...+a1kyk≥b1R2:a21y1+...+a2kyk≥b2……Rm:am1y1+...+amkyk≥bmmin(y1+y2+...+yk)R1:a11y1+...+a1kyk≥b1R2:a21y1+...+a2kyk≥b2……Rm:am1y1+...+amkyk≥bm
可以看到,相比原來的master problem,restricted master problem相當於把yk+1...ymyk+1...ym強制限制為非基變數了。[4]
3.3 subproblem
核能預警,如果這部分看不懂,請確保預備知識過關。如果預備知識不過關,請在運籌學老師的陪同下觀看,謝謝合作!
上面的限制主問題求解完成後,我們想使用單純型法進行基變數的轉換,看看yk+1...ymyk+1...ym中,是否有可以轉入基變數的列。還記得怎麼找進基的非基變數嗎?(不記得就去問你們的運籌學老師)。當然是透過非基變數的檢驗數辣,透過σj=cj−cBB−1ajσj=cj−cBB−1aj,在yk+1...ymyk+1...ym中尋找檢驗數最小並且為負數的變數,將變數對應的那一列新增到RMP中。
那麼,在檢驗數的計算公式中,大家還記得cBB−1cBB−1是什麼嗎?cBB−1cBB−1有兩重含義:
透過求解RMP問題得到的影子價格(shadow price)。
透過求解RMP對偶問題得到的對偶變數(dual variable)。
所以在開始之前小編一直強調預備知識一定要過關。這兩個含義意味著我們有上面兩種方式得到cBB−1cBB−1,不過我們一般傾向於使用第二種,WHY?
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69979876/viewspace-2886333/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MVC、MVP、MVVM,談談我對Android應用架構的理解MVCMVPMVVMAndroid應用架構
- 談談對資料架構的幾點認識架構
- 談談對中斷的理解
- 談談我對js中閉包的理解JS
- 淺談分散式儲存系統的資料分佈演算法分散式演算法
- 談談位運算和在Android中的運用Android
- 談談你對Promise的理解Promise
- 對資料結構和演算法的關係的理解資料結構演算法
- 談談關於 iOS 的架構以及應用iOS架構
- 演算法和資料結構在JS中的運用(三)演算法資料結構JS
- 談談我對Spring IOC的理解Spring
- 談談人工智慧和機器學習的資料架構人工智慧機器學習架構
- 談一談對vuex的簡單理解Vue
- 談談對MVC、MVP和MVVM的理解?MVCMVPMVVM
- 每日一問:談談對 MeasureSpec 的理解
- 談談我對服務化的理解
- 談一談我對Spring Resource的理解Spring
- 【搞定面試官】談談你對JDK中Executor的理解?面試JDK
- 談談中臺架構之交易中臺架構
- 百萬年薪架構師之路:談應用系統架構設計架構
- 談談如何從資料湖(Data Lake)架構轉向資料網格(Data Mesh)架構架構
- 談談我對服務網格的理解
- 談談你對前端效能優化的理解前端優化
- 談談對IOC及DI的理解與思考
- 談談WINDOWS下重灌系統後oracle的恢復WindowsOracle
- 淺談大型分散式Web系統的架構演進分散式Web架構
- KMP演算法中我對獲取next陣列的理解KMP演算法陣列
- 淺談hdfs架構與資料流架構
- 資深架構師談Redis高可用架構的應用及改進架構Redis
- 工作十年,談談我的高可用架構和系統設計經驗架構
- 面試——談談你對Java 平臺的理解面試Java
- 談一談對vue-router的簡單理解Vue
- Java面試題:請談談對ThreadLocal的理解?Java面試題thread
- 大白話聊聊Java併發面試問題之談談你對AQS的理解?【石杉的架構筆記】Java面試AQS架構筆記
- 淺談《守望先鋒》中的 ECS 構架
- 談談從CAP定理到Lambda架構的演化架構
- 面試官:談談你對JVM垃圾收集器演算法的瞭解面試JVM演算法
- 面試精選01-談談你對Abp中模組的理解面試