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