Previous Up Next

6.54.7  Solving transportation problems: tpsolve

The objective of a transportation problem is to minimize the cost of distributing a product from m sources to n destinations. It is determined by three parameters :

The optimal solution is represented as matrix X*=[xij*]m× n , where xij* is number of units that must be transported from i -th source to j -th destination for i=1,2,…,m and j=1,2,…,n .

Function tpsolve accepts three arguments: supply vector, demand vector and cost matrix, in that order. It returns a sequence of two elements: total (minimal) cost of transportation c=∑i=1mj=1ncij xij* and the optimal solution X* .

Input :

s:=[12,17,11];d:=[10,10,10,10];
C:=[[50,75,30,45],[65,80,40,60],[40,70,50,55]];
tpsolve(s,d,C)

Output :

2020,[[0,0,2,10],[0,9,8,0],[10,1,0,0]]

If total supply and total demand are equal, i.e. if ∑i=1msi=∑j=1ndj holds, transportation problem is said to be closed or balanced. If total supply exceeds total demand or vice versa, the problem is unbalanced. Such cases are handled by adding a dummy demand resp. supply point to cover the excess and setting cost of “transportation” from resp. to dummy point to zero. In case of unbalanced problem, function tpsolve adds dummy supply/demand point automatically.

Input :

s:=[7,10,8,8,9,6];d:=[9,6,12,8,10];
C:=[[36,40,32,43,29],[28,27,29,40,38],[34,35,41,29,31],
[41,42,35,27,36],[25,28,40,34,38],[31,30,43,38,40]];
tpsolve(s,d,C)

Output :

1275,[[0,0,2,0,5],[0,0,10,0,0],[0,0,0,0,5],
[0,0,0,8,0],[9,0,0,0,0],[0,6,0,0,0]]

Sometimes it is desirable to forbid transportation on certain routes. That is usually achieved by setting very high cost to these routes, represented by symbol M . If tpsolve detects a symbol in cost matrix, it interprets it as M and assigns 100 times larger cost than the largest numeric element of C to the corresponding routes, which forces the algorithm to avoid them.

Input :

s:=[95,70,165,165];d:=[195,150,30,45,75];
C:=[[15,M,45,M,0],[12,40,M,M,0],
[0,15,25,25,0],[M,0,M,12,0]]
tpsolve(s,d,C)

Output :

2820,[[20,0,0,0,75],[70,0,0,0,0],
[105,0,30,30,0],[0,150,0,15,0]]

Previous Up Next