熊慶如
(浙江東方職業技術學院,浙江 溫州325011)
在科學管理和社會、經濟與生活的各種活動中,經常會用到一類合理地分配和使用有限資源,使能獲得“最優效益”的問題。如果要研究問題的目標函數和約束條件的函數都是線性的,這類問題就是線性規劃問題。對于只有單個的目標函數的線性規劃,我們都能方便地解決。但是在實際應用中往往出現多個目標函數的線性規劃,為了幫助解決此類問題,筆者羅列了幾種常見的情形,利用數學的基本思想和方法,歸納出幾種解決的方法。

求解思路:把多目標化為單目標。求解方法:使用多種方法,視模型特點而定。這里介紹目標法。
從多個目標中選出一個目標來(這些目標函數往往是相互矛盾的),這里不妨選擇利潤最大作為主要目標。把其他的目標函數轉化成約束條件,這樣就稱為了單目標。如何將目標函數轉化為約束條件呢?
首先,我們要知道需要轉化的目標函數的范圍,為求范圍,就需要求其最大值和最小值。在其范圍內取一個合適的值作為約束條件值,形成約束有條件。
現在以案例1 為例說明求第二目標范圍。這里先把刪除第一目標,再求第二目標最小值。其程序如下:

從結果發現,f2的最小值為0。
同理求最大值,得到如下結果是,f2的最大值為60,因此,我們可以確定目標2 的取值范圍是:f2∈[0,60],不妨取f2燮50。(這里可根據題意也可以取0 至60 之間的其他數)
因此,原多目標模型就轉化為單目標模型,結果如下:

結果顯示:(f1*,f2)=(106,50),(x1,x2,x3)=(8,2,1),此未知數的值,不是最優解,只是滿意解。

分析:兩個目標都求最小,我們考慮將將這兩個目標函數相加,然后求最小,minf1+f2,但是考慮到兩個目標函數的系數權重有所不同。
比如,上述模型中,
第一目標范圍是:f1∈[230,1150]
第二目標范圍是:f2∈[12,60]
這兩個目標的數量級不同,如果就這樣簡單相加,會造成“大數吃小數”的現象,從而造成結果失真。所以不能貿然將兩個目標加到一起,為此需要進行“標準化”處理。使得f1與f2的數量級相同,達到具有可比性。
如何進行“標準化”呢?
第一目標標準化:

第二目標標準化:

f1與f2都是[0,1]之間的數,其數量級相統一了。但考慮到兩個目標因素相對有所偏重,兩個目標函數應該采取偏重的辦法進行處理。這里引進權重比系數w1與w2(其中w1+w2=1,w1,w2>0),
化為單目標就得到:minf=w1f11+w2f22
比如w1=0.6,w2=0.4 或w1=0.7,w2=0.3,在同一數列級上的兩個因素就有所偏重了。這種方法我們就定義為線性加權法。
根據這一思路,在lingo軟件中,編寫程序如下:


案例3 與案例2 的不同點,在于目標1 函數與目標2 函數不同,一個是求極大值,另一個是求極小值,兩者就直接相加了。
第一目標標準化:

在第一目標標準化中,f1與f11是同向的,即f1取得極大值時,f11也取得極大值;在第二目標標準化中,發覺f2與f22是逆向的,即f2取得極小值時,就是f22取得極大值。
所以,將f11與f22合并相加就得到一個同向的函數,稱作極性統一,數列級也統一。求這一個函數的極大值就滿足題意了。
最后,引進權重系數,將多目標化為單目標了:

將此法通過lingo軟件編程如下:


運行結果顯示,目標值是(f1,f2)=(990,44),自變量取值是(x1,x2,x3)=(11,0,0)


目標函數相互矛盾。
第一目標的范圍是:f1∈[230,1150],第一目標是求最大值,它的理想解是1150;
第二目標范圍是:f2∈[12,60],第二目標是求最小值,它的理想解是12;
化為單目標:minf=w1(1150-f1)+w2(f2-12)
通過求f的最小值,讓f1逼近其理想值1150,f2逼近其理想值12,這樣就可以取到最優值。
在軟件lingo中運行程序:

程序運行結果顯示:目標值是(f1,f2)=(1150,57),自變量取值是(x1,x2,x3)=(7,1,3)