譚澤漢 陳萬銳
摘 要 本文闡述了一種數學規劃的方法,通過循環迭代插值的方法將整數規劃、0、1規劃結合起來解決帶約束的線性規劃問題。并即將其應用于鋼材采購中,達到了很好的效果。
關鍵詞 PSO算法;神經網絡算法;空調物理模型;參數估計
中圖分類號 O29 文獻標識碼 A 文章編號 1674-6708(2016)162-0201-02
1 背景介紹
采購鋼材時,在進行商務談判時經常會有這樣或那樣的約束條件。比如:請設定如果單規格總量≤100t時,只分配一個供應廠家;若單規格鋼材總量>100t時,需保證分配給廠家的數量必須為20的整數倍(還要根據雙方商務交談結果,可以隨時改動數值,例如,20/50/100等;某供應廠家某型號鋼材的分配量必須為該供應廠家分配總量的X%(要求任何一個鋼廠都有這樣的功能,X為0-100之間的整數);每個供應廠家都有一個對應的最小供貨量等。
我們的目的是在滿足這些約束條件下實現采購總價最小。很自然會想到使用線性規劃的理論。但要考慮這些約束條件,自動識別多種商務約定的訂單限制條件,就只能自己設計的相關算法自動完成每個供應商采購數量的最優選擇。
2 方案思路
首先,對數據進行建模,確定目標函數,本文涉及到整數規劃,0,1規劃,線性規劃的組合。其次,求最優,將數學規劃的結果按大于100,和小于等于100分為2部分;第三,結果小于等于100部分,按最優解趨勢依次求出數據并寫入到輸出的EXCEL中;第四,結果大于100,部分,先按線性規劃求出最優解,其次按“四舍五入”轉化為指定數據倍數,然后剩余部分根據最優結果或價格從小到大依次進行插入到輸出的EXCEL中;最后對輸出的EXCEL數據進行合并。
其核心思路是:1)在線性規劃的基礎上,運用最優差值實現0-1規劃和整數規劃;2)每次按某種約束條件進行數學規劃得到最優解后,要循環迭代更新需求條件。比如優化找到第一個最大值,則總數減去該優化值,再次優化尋找第二個最大值,如此循環迭代更新需求。如圖1所示。
圖1為舉例,目標函數的系數4851,3326等均為杜撰的價格值。
選擇0,1規劃是因為約束條件中要求小于100t的鋼材,只能分給1個廠家,則每次求出的結果,有且僅有1個不等于0,其它的解均為0。
選擇整數規劃是因為約束條件要求分配的結果為20的倍數,如果求解出的結果有小數,就向下取整到20的倍數,然后再觀察結果是否滿足小于等于訂單的要求,如果結果大于訂單的要求,就繼續向下取整到20的倍數。直到結果滿足小于等于訂單的要求。然后更新訂單的需求,再次選擇0,1規劃,將小于100t的鋼材,只分給1個廠家。
3 循環迭代插值代碼實現
為方便示例,本文的代碼使用Matlab進行描述。代碼中核心實現的是根據最優趨勢,根據最優結果或價格高低將計算結果插入到輸出表,即把計算出的結果按價格從小到大插入剩余部分,通過循環迭代更改需求的方法實現最優計算,本文稱之為循環迭代插值。
這部分的代碼實現如下:
function [m, mb] = bestinsert(beq, mbest, m,A, b, varargin)
% m是數量數組,mb是不等式系數值,beq是等式值,mbest是最優結果,A是不等式系數, b是不等式值


4結論
本文介紹了一種帶約束條件的數學規劃算法,通過循環迭代插值的方法解決了整數規劃,0,1規劃和線性規劃的有機結合。實踐使用發現對比人工使用EXCEL進行計算,本文介紹的方法可優化12%以上。
參考文獻
[1]《運籌學》編寫教程組.運籌學[M].4版.北京:清華大學出版社,2012,9.