2017-01-10

決策最佳化( Decision Optimization)-規劃求解

決策最佳化這東西,一聽到就感覺是應用數學中線性規劃(Linear Programming 簡稱LP <= 怪怪的)之類的東西,不知道各位在整個教育學程中是否有所觸及,不過只要有商業行為,都會運用它來求得最大利潤或最低成本....

這議題本來是想放棄不想聊的,其中的原因在於我認為實務上有點窒礙難行(有興趣可參考關於鋼筋損耗的問題 這篇文章),不過這幾年有兩位朋友與我討論過類似的問題,其中一位是要做H型鋼打設對既有材料做裁切,一位是帷幕鋁料裁切,都跟鋼筋裁切類似,希望獲得最小的損耗。讓我不得不稍微深入了解一點其中的做法...

說到線性規劃,以數學代數表示,無非如下(以下參考維基百科說法)
一個極大化線型函數
C1‧X1+C2‧X2+C3‧X3+.......
多個約束條件,如:
A11‧X1+A12‧X2+A13‧X3..... ≤ B1
A21‧X1+A22‧X2+A23‧X3..... ≤ B2
A31‧X1+A32‧X2+A33‧X3..... ≤ B1
..........

然後要求當X1、X2、X3.....各為多少時,線性函數才會得到, 最大或最小的值,

感覺跟國中代數中的
3X+2Y=10
2X-Y=2
求X、Y各為多少類似,只是代數量很多,它的解很多罷了...

拉拉雜雜講一堆,況且在下也不是數學出身的,各位一定沒興趣看下去。

我想各位在意的是,有甚麼工具可以列出條件與限制,就給我電腦算出來的答案,這樣子比較實在吧。坊間專業規劃求解的軟體很多,不過取得與學習都要花上時間與費用,對於我們這些需要在工地辛勞的勞工朋友,工人小包等雜事都處理不完,況且又不是專職分析師,拿解答去運用還是比較實在點。好在Excel有提供規劃求解這個增益集,只是它有個限制是決策變數在200以下或條件限制100條以下的限制(可參原開發商)。不過應該會符合大部分的需求。

以下以裁切最小化為例:

在使用該功能之前,有些問題是需要先討論的,這也是可達成規劃求解的必要準備:

1. 裁切組合形式:組數越多理論上越能算到更理想的數據,但如上所說有200組的限制需要考量。影響組數數量的因素包含來源材料長度的種類數(如10M/12M/14M..),及裁切的種類數,且裁切出來的組合還需要合理化,如殘料長度不可以大於裁切料任何一支長....之類的問題,才符合成為有效裁切的候選名單。


 2.決策分析表格
這部分需要利用先前組合形式表格來搭配,並設定相關符合後續規劃求解的相關公式設定,有才辦法延續後續的動作(這部分細節太多,有興趣可看下面建議書籍)

其中 淺藍色部分,為規劃求解的答案,目前先設為0。綠色部分為條件限制欄位,它需要達成模擬根數 ≥ 需求支數的條件。而黃色的部分為規劃求解的主角,也就是殘料數量。

3.0 一切就緒後,就可以開始進行規劃求解了。不過您若未使用過這個功能,那你一定找不到功能在哪 !! 您需要至檔案>選項>增益集,找到規劃求解增益集,並執行它才會掛載於Excel(若已掛載則省略本步驟)


3. 這時您就可以於資料>規劃求解找到功能,點選後會彈出對話框

3.1 設定目標式:填入黃色的儲存格位址 $G$1(註:圖面上所示_target,是因為在下有設定儲存格名稱所致)

3.2 選取至最小,即損耗最小值。

3.3 藉由變更變數儲存格;為水藍色區域,即$F$4:$F$19(註:圖面所示_dv,同3.1註解),這個區域程式會循環嘗試以求得黃色區域的最小值。

3.4 設定限制式,就是模擬根數(綠色區域)與需求支數(綠色區域上面)的相對關係,有幾種料型,就有幾條限制式。

3.5 勾選 將未設限的變數設為非負數

3.6 選擇線性規劃來求解(Simplex LP)。

3.7 一切就緒,就可以點選求解來看答案嚕...

3.8 這時候若沒意外應該會彈出 規劃求解結果對方框,決策變數欄位(水藍色的區域)自動填入計算出來的值,其他之前設定好公式的儲存格也就連動跟著改變。基本上作業已經完成95%的進度了。

4. 資料再整理..
以上的資料雖然足夠拿來用,不過裡面有不少廢資料需要移除(分析後未選用的組合列);且各位是否發現在condi_013這個組合裡面,有非整支的數值(2381.5,有人叫料叫0.5支15米的材料??)所以需要於另外表格進行去廢化整的處理。這部分我就不列出樣式了(實際上是還沒做到哪個階段啦><)。

5. 其他注意事項
在做規劃求解的所有儲存表格需要在同一個工作頁上,像我一開始在設定限制式時,因為在組合工作頁中已經有了需求支數的資訊,所以我就填入$B$3>=compose!$B$4 之類的限制式,計算是可以成功,不過若您變更數據後要重新運算時,規劃求解對話框中的資訊就改成$B$3>=$B$4,這下子就天差地別而求不出解了,這個值得注意的地方..


上述所提只有處理掉部分問題,尚有其他問題要解決,如:
1. 若供料鋼筋有根數限制?如11米材料最多只能提供1500支 之類的問題...
2. 若裁切型式跟供料長度種類變多,致組合型式超過200種而讓Excel無法運算又該如何處理?
3. 若考量定尺料與散尺料有價差,最佳裁切有可能不會是最低費用時,又該如何考量??
4. 還在想....
 
結語:
以上拉拉雜雜說了一堆,其實還是沒有完全說明其中的所有細節,若您有興趣,去買本坊間專書『 營建鋼筋損耗控制實務 』來看看比較實在吧。

其實我在想的事情是,這麼複雜的步驟,做起來還是挺累人的,況且製作決策分析表格中有很多的公式連結,在未有任何實際數據之前所設的公式,不易察覺錯誤何在,只要公式一個錯誤,算出來的資料一定是錯的。

另外求出的解又要人工謄表,也是很不自動化的作法。SO...開始研究一鍵直接求解的方式,無奈卡在規劃求解功能屬增益集,由程式去設定規劃求解的參數難度不低(不知道用SendKey函數來模擬人工輸入不知可否行得通,過陣子試試)(刪除線部分的問題已克服@2017/01/16)

上面推薦的書中有附的軟體,在組合計算部分是調用外部程式來完成,再以CSV檔(以逗點分隔的文字檔)的形式匯入Excel中進行處理,感覺動作蠻繁瑣的,這部分模組我已改寫成直接由Excel VBA的模組來運算及列出。後續再來寫決策表格的公式自動設定,與謄表自動化,若規劃求解對話框的門檻可過,就可以只要輸入參數,然後就去列印答案嚕...(敬請期待..^^)
 

1 則留言:

  1. 不知道過了6年有完成板了嗎><
    來自剛入營造業的小菜鳥

    回覆刪除