看到BC資料架構系統中的演算法運用後,談談自己對列生成演算法的理解

kenaiou發表於2022-04-09

看到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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章