運輸問題(產銷平衡)
某商品有m 個產地、n 個銷地,各產地的產量分別為a1,a2,...am ,各銷地的 需求量分別為b,..bn , , 1 L 。若該商品由i 產地運到 j 銷地的單位運價為 cij ,問應該如何調 運才能使總運費最省?
解:引入變量 xij ,其取值為由i 產地運往 j 銷地的該商品數量,數學模型為
顯然是一個線性規划問題,當然可以用單純形法求解。
對產銷平衡的運輸問題,由於有以下關系式存在:
其約束條件的系數矩陣相當特殊,可用比較簡單的計算方法,習慣上稱為表上作業法(由 康托洛維奇和希奇柯克兩人獨立地提出,簡稱康—希表上作業法)
例題:
某公司有三個加工廠A1,A2.A3生產某產品,每日的產量分別為:7噸、4噸、9噸;該公司把這些產品分別運往四個銷售點B1,B2、B3、B4,各銷售點每日銷量分別為:3噸、6噸、5噸、6噸;從各工廠到各銷售點的單位產品運價如表4-1所示。問該公司應如何調運這些產品,在滿足各銷售點的需要量的前提下,使總運費最少?
解析: 典型的產銷平衡問題,將已知數據做成表格如下:
將所有數據列成表格會更加清晰,根據題意可以得到目標函數的表達式如下:
然后將已知約束關系整理如下:
可見題目中並沒有不等式約束關系,同時也沒有約束上界ub。
Matlab 程序實現
clc;clear %清空數據防止干擾
f=[3;11;3;10;1;9;2;8;7;4;10;5]; %價值向量
aeq=[ones(1,4),zeros(1,8); %線性等式約束 構造矩陣
zeros(1,4),ones(1,4),zeros(1,4);
zeros(1,8),ones(1,4);
1,zeros(1,3),1,zeros(1,3),1,zeros(1,3);
0,1,zeros(1,2), 0,1,zeros(1,2), 0,1,zeros(1,2);
zeros(1,2),1,0, zeros(1,2),1,0, zeros(1,2),1,0;
zeros(1,3),1,zeros(1,3),1,zeros(1,3),1];
beq=[7;4;9;3;6;5;6]; %線性等式約束
[x,y]=linprog(f,[],[],aeq,beq,zeros(12,1)) %求解
題目答案:
x=[0;0;5;2;3;0;0;1;0;6;0;3]
y=85