The NETFLOW Procedure


Example 6.14 Generalized Networks: Distribution Problem

Consider a distribution problem (from Jensen and Bard 2003) with three supply plants ($S_1$$S_3$) and five demand points ($D_1$$D_5$). Further information about the problem is as follows:

$S_1$

To be closed. Entire inventory must be shipped or sold to scrap. The scrap value is $5 per unit.

$S_2$

Maximum production of 300 units with manufacturing cost of $10 per unit.

$S_3$

The production in regular time amounts to 200 units and must be shipped. An additional 100 units can be produced using overtime at $14 per unit.

$D_1$

Fixed demand of 200 units must be met.

$D_2$

Contracted demand of 300 units. An additional 100 units can be sold at $20 per unit.

$D_3$

Minimum demand of 200 units. An additional 100 units can be sold at $20 per unit. Additional units can be procured from $D_4$ at $4 per unit. There is a 5% "shipping loss" on the arc connecting these two nodes.

$D_4$

Fixed demand of 150 units must be met.

$D_5$

100 units left over from previous shipments. No firm demand, but up to 250 units can be sold at $25 per unit.

Additionally, there is a 5% "shipping loss" on each of the arcs between supply and demand nodes.

You can model this scenario as a generalized network. Since there are both fixed and varying supply and demand supdem values, you can transform this to a case where you need to address missing supply and demand simultaneously. As seen from Output 6.14.1, we have added two artificial nodes, Y and Z, with missing S supply value and missing D demand value, respectively. The extra production capability is depicted by arcs from node Y to the corresponding supply nodes, and the extra revenue generation capability of the demand points (and scrap revenue for $S_1$) is depicted by arcs to node Z.

Output 6.14.1: Distribution Problem

Distribution Problem


The following SAS data set has the complete information about the arc costs, multipliers, and node supdem values:

data dnodes;
   input _node_ $ _sd_ ;
   missing S D;
datalines;
S1   700
S2     0
S3   200
D1  -200
D2  -300
D3  -200
D4  -150
D5   100
Y      S
Z      D
;

data darcs;
   input _from_ $ _to_ $ _cost_ _capac_ _mult_;
datalines;
S1  D1    3   200  0.95
S1  D2    3   200  0.95
S1  D3    6   200  0.95
S1  D4    7   200  0.95
S2  D1    7   200  0.95
S2  D2    2   200  0.95
S2  D4    5   200  0.95
S3  D2    6   200  0.95
S3  D4    4   200  0.95
S3  D5    7   200  0.95
D4  D3    4   200  0.95
Y   S2   10   300  .
Y   S3   14   100  .
S1  Z   -5    700  .
D2  Z   -20   100  .
D3  Z   -20   100  .
D5  Z   -25   250  .
;

You can solve this problem by using the following call to PROC NETFLOW:

title1 'The NETFLOW Procedure';
proc netflow
   nodedata = dnodes
   arcdata  = darcs
   conout   = dsol;
run;

The optimal solution is displayed in Output 6.14.2.

Output 6.14.2: Distribution Problem: Optimal Solution

The NETFLOW Procedure

Obs _from_ _to_ _cost_ _capac_ _LO_ _mult_ _SUPPLY_ _DEMAND_ _FLOW_ _FCOST_
1 S1 D1 3 200 0 0.95 700 200 200.000 600.00
2 S2 D1 7 200 0 0.95 . 200 10.526 73.68
3 S1 D2 3 200 0 0.95 700 300 200.000 600.00
4 S2 D2 2 200 0 0.95 . 300 200.000 400.00
5 S3 D2 6 200 0 0.95 200 300 21.053 126.32
6 S1 D3 6 200 0 0.95 700 200 200.000 1200.00
7 D4 D3 4 200 0 0.95 . 200 10.526 42.11
8 S1 D4 7 200 0 0.95 700 150 100.000 700.00
9 S2 D4 5 200 0 0.95 . 150 47.922 239.61
10 S3 D4 4 200 0 0.95 200 150 21.053 84.21
11 S3 D5 7 200 0 0.95 200 . 157.895 1105.26
12 Y S2 10 300 0 1.00 S . 258.449 2584.49
13 Y S3 14 100 0 1.00 S . 0.000 0.00
14 S1 Z -5 700 0 1.00 700 D 0.000 0.00
15 D2 Z -20 100 0 1.00 . D 100.000 -2000.00
16 D3 Z -20 100 0 1.00 . D 0.000 0.00
17 D5 Z -25 250 0 1.00 100 D 250.000 -6250.00
                    -494.32