# Difference: AmericanSteelTransshipmentProblem (19 vs. 20)

#### Revision 202008-04-29 - MichaelOSullivan

Line: 1 to 1

 META TOPICPARENT name="SubmitCaseStudy"
`<-- Under Construction -->`
Line: 80 to 80

Deleted:
<
<
• steel_graphical.jpg:

 META FORM FORM FIELD Title name="OpsRes.CaseStudyForm" Title The American Steel Transshipment Problem DateSubmitted 15 Feb 2008
Line: 93 to 90
|*FORM FIELD ProblemFormulation*|ProblemFormulation|The American Steel Problem can be solved as a transshipment problem. The supply at the supply nodes is the maximum production at the steel mills, i.e., 10,000 and 15,000 for Youngstown and Pittsburgh repsectively. The demand at demand nodes in given by the demand at the field warehouses and the other nodes are transshipment nodes. The costs and bounds on flow through the network are also given. The most compact formulation for this problem is a network formulation (see The Transshipment Problem for details).

| |*FORM FIELD ComputationalModel*|ComputationalModel|We can use the AMPL model file `transshipment.mod` (see The Transshipment Problem in AMPL for details) to solve the American Steel Transshipment Problem. We need a data file to describe the nodes, arcs, costs and bounds. The node set is simply a list of the node names:

```set NODES := Youngstown  Pittsburgh
Cincinnati 'Kansas City' Chicago
Albany      Houston      Tempe   Gary ;
```

Note that `Kansas City` must be enclosed in `'` and `'` because of the whitespace in the name.

The arc set is 2-dimensional and can be defined in a number of different ways:

```# List of arcs
set ARCS := (Youngstown, Albany), (Youngstown, Cincinnati), ... , (Chicago, Gary) ;
```
```# Table of arcs
set ARCS:   Cincinnati 'Kansas City' Chicago Albany Houston Tempe Gary :=
Youngstown         +          +         +      +       -      -    -
Pittsburgh         +          +         +      -       -      -    +
.
.
.
```
```# Array of arcs
set ARCS :=
(Youngstown, *)    Cincinnati 'Kansas City' Chicago Albany
(Pittsburgh, *)    Cincinnati 'Kansas City' Chicago Gary
.
.
.
(Chicago, *)       Tempe       Gary
;
```

Since the node set is small and the arc set is "dense", i.e., many of the node pairs are represented in the arc set, we choose a table to define ARCS:

```set ARCS:   Cincinnati 'Kansas City' Chicago Albany Houston Tempe Gary :=
Youngstown         +          +         +      +       -      -    -
Pittsburgh         +          +         +      -       -      -    +
Cincinnati         -          -         -      +       +      -    -
'Kansas City'      -          -         -      -       +      +    -
Chicago            -          -         -      -       -      +    + ;
```

The `NetDemand` can be defined easily from the supply and demand. Since the default is 0 we don't need to define `NetDemand` for the transshipment nodes:

```param      NetDemand :=
Youngstown -10000
Pittsburgh -15000
Albany       3000
Houston      7000
Tempe        4000
Gary         6000
;
```

We can use lists, tables or arrays to define the parameters for the American Steel Transhippment Problem, but in this case we will use a list and define multiple parameters at once. This allows us to "cut-and-paste" the parameters from the problem description. Note the use of `.` for parameters where the defaults will suffice (e.g., `Lower` for `Youngstown` and `Albany`):

```param:                  	Cost    Lower  	Upper:=
Youngstown	Albany		500	.	1000
Youngstown	Cincinnati	350	.	3000
Youngstown	'Kansas City'	450	1000	5000
Youngstown	Chicago		375	.	5000
Pittsburgh 	Cincinnati	350	.	2000
Pittsburgh	'Kansas City'	450	2000	3000
Pittsburgh	Chicago		400	.	4000
Pittsburgh	Gary 		450	.	2000
Cincinnati	Albany		350	1000	5000
Cincinnati	Houston		550	.	6000
'Kansas City'	Houston		375	.	4000
'Kansas City'	Tempe		650	.	4000
Chicago		Tempe		600	.	2000
Chicago		Gary		120	.	4000
;
```

Note that the cost is in \$/1000 ton, so we must divide the cost by 1000 in our script file before solving:

```reset;

model transshipment.mod;

data steel.dat;

let {(m, n) in ARCS} Cost[m, n] := Cost[m, n] / 1000;

option solver cplex;
solve;

display Flow;
```
| |*FORM FIELD Results*|Results|Using `transshipment.mod`, and the data and script files defined in Computational Model we can solve the American Steel Transshipment Problem to get the optimal `Flow` variables:

If the total supply is greater than the total demand, the transshipment problem will solve, but flow may be left in the network (in this case at the Pittsburgh node). In `transshipment.mod` we `check` that sum {n in NODES} NetDemand[n] <= 0 to ensure a problem is feasible before solving.

If total supply is less than demand (hence the problem is infeasible) we can add a dummy supply node (see with arcs to all the demand nodes. The optimal solution will show the "best" nodes to send the extra supply to. |

Changed:
<
<
|*FORM FIELD Conclusions*|Conclusions|In order to minimise the monthly shipment costs, American Steel should follow the shipment plan shown in Table 3.

Table 3 Optimal Shipment Plan

 From/To Cincinnati Kansas City Chicago Albany Houston Tempe Gary Youngstown 3000 3000 3000 1000 Pittsburgh 2000 3000 3000 2000 Cincinnati 2000 3000 Kansas City 4000 2000 Chicago 2000 4000

As with many network problems, it can be illuminating to display the solution graphically as shown in Figure 1.

Figure 1 Optimal Shipment Plan |

>
>
|*FORM FIELD Conclusions*|Conclusions|In order to minimise the monthly shipment costs, American Steel should follow the shipment plan shown in Table 3.

Table 3 Optimal Shipment Plan

 From/To Cincinnati Kansas City Chicago Albany Houston Tempe Gary Youngstown 3000 3000 3000 1000 Pittsburgh 2000 3000 3000 2000 Cincinnati 2000 3000 Kansas City 4000 2000 Chicago 2000 4000

As with many network problems, it can be illuminating to display the solution graphically as shown in Figure 1.

Figure 1 Optimal Shipment Plan

|

 FORM FIELD ExtraForExperts ExtraForExperts