(1)問題分析:
運輸費=運輸單價*運輸量。這裏要求是總運輸費最低,也就是說規劃的目標函數是使得運輸費最小。
約束條件有:
a.ABC三個工廠生產能力存在上限,當然也存在下限(產量為0)
b.至少應甲乙丙丁四個市場的需求量。
(2)符號說明:
xij代表i工廠給j市場的箱數,當然這裏i=1,2,3分別代表ABC;j=1,2,3,4分別代表甲乙丙丁
costij代表i工廠運到j市場每箱的運輸費。由題意得cost=[2,1,3,2;1,3,2,1;3,4,1,1];
proi代表i工廠生產的總箱數,很明顯proi=sum(xij,j,1,4)-----註意這裏引入的東西是說對j從1到4求和。即xi1+xi2+xi3+xi4
needj代表j市場的實際進貨,很明顯needj=sum(xij,i,1,3)----同上
根據"問題分析"我們可以得到規劃
目標:min f=sum(sum(costij.*xij,i,1,3),j,1,4)
約束條件:
xij>=0 其中i=1,2,3;j=1,2,3,4
pro1=sum(x1j,j,1,4)<=60
pro2=sum(x2j,j,1,4)<=40
pro3=sum(x3j,j,1,4)<=50
need1=sum(xi1,i,1,3)>=20
need2=sum(x21,i,1,3)>=35
need3=sum(x31,i,1,3)>=33
need4=sum(x41,i,1,3)>=34
(3)程序編寫(基於Matlab,註意這裏要將Aij轉成列向量)
clear
cost=[2,1,3,2;1,3,2,1;3,4,1,1];
f=cost(:);%目標
A=[
1,0,0,1,0,0,1,0,0,1,0,0;
0,1,0,0,1,0,0,1,0,0,1,0;
0,0,1,0,0,1,0,0,1,0,0,1;
-1,-1,-1,0,0,0,0,0,0,0,0,0;
0,0,0,-1,-1,-1,0,0,0,0,0,0;
0,0,0,0,0,0,-1,-1,-1,0,0,0;
0,0,0,0,0,0,0,0,0,-1,-1,-1;
];%約束,註意大於號約束時,我們兩邊乘以-1,變成小於號約束
b=[60;40;50;-20;-35;-33;-34];
Aeq=[];
beq=[];
xmin=zeros(12,1);
xmax=inf*ones(12,1);
x0=xmin;
[x,fmin]=linprog(f,A,b,Aeq,beq,xmin,xmax,x0);
reshape(x,3,4),fmin
totalbox=sum(x)
(4)結果分析
上述程序的結果是:
ans =
0.0000 35.0000 0.0000 0.0000
20.0000 0.0000 0.0000 17.3777
0.0000 0.0000 33.0000 16.6223
fmin =
122.0000
totalbox =
122.0000
其中ans就是Aij,得到的總費用是122元,運輸的總箱數也為122箱。也就是說平均每箱的費用也是1元。
(5)啟示
我們註意觀察
cost與ans的關系
cost =
2 1 3 2
1 3 2 1
3 4 1 1
ans =
0.0000 35.0000 0.0000 0.0000
20.0000 0.0000 0.0000 17.3777
0.0000 0.0000 33.0000 16.6223
我們可以發現,ans中非元素與cost中的1元素是對應的。
也就是說對於j市場,它可以從ABC三個廠進貨。但是要使得費用最近,當然是希望從運費最低的那個廠進貨。
先觀察甲乙丙和ABC,對於甲乙丙來說,他們分別從BAC三個廠進貸是最合算的,當然BAC的產量都大於甲乙丙三個市場的需求量。這三個市場都從BAC那裏進貨。
對於丁市場來說,它的最低運費的有BC兩個工廠,而BC工廠分別給甲丁兩個市場20,33個箱。它們離最大的產量還剩20,17。只要丁市場從這裏取34箱就可以了。對於這兩個就沒有什麽優先性,因為它的運輸費是壹致的。
所以本例存在多解情況,先讓BAC三個工廠分別滿足甲乙丙三個市場,丁市場從BC兩個工廠進貨34箱即可(而這34箱從B廠的20箱和C廠的17箱裏面運出即可),考慮到箱數壹般為整數。BC廠給丁市場的箱數可有以下幾種組合
B廠 C廠
20 14
19 15
18 16
17 17