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


4結(jié)論
本文介紹了一種帶約束條件的數(shù)學(xué)規(guī)劃算法,通過(guò)循環(huán)迭代插值的方法解決了整數(shù)規(guī)劃,0,1規(guī)劃和線性規(guī)劃的有機(jī)結(jié)合。實(shí)踐使用發(fā)現(xiàn)對(duì)比人工使用EXCEL進(jìn)行計(jì)算,本文介紹的方法可優(yōu)化12%以上。
參考文獻(xiàn)
[1]《運(yùn)籌學(xué)》編寫教程組.運(yùn)籌學(xué)[M].4版.北京:清華大學(xué)出版社,2012,9.