senstran.gms : Sensitivity analysis using LOOPS

**Description**

This problem performs sensitivity analysis on the TRNSPORT problem. The basic model is taken from the GAMS model library. A separate model is solved for each variation of the transport cost matrix. The transport cost on each link is raised and lowered by 30 percent and the shipment patterns are either saved in a GAMS data table or written to file for further analysis by a statistical system.

**Reference**

- Dantzig, G B, Chapter 3.3. In Linear Programming and Extensions. Princeton University Press, Princeton, New Jersey, 1963.

**Small Model of Type :** LP

**Category :** GAMS Model library

**Main file :** senstran.gms

```
$Title Sensitivity analysis using LOOPS (SENSTRAN,SEQ=106)
$Ontext
This problem performs sensitivity analysis on the TRNSPORT
problem. The basic model is taken from the GAMS model
library. A separate model is solved for each variation of the
transport cost matrix. The transport cost on each link is raised
and lowered by 30 percent and the shipment patterns are either
saved in a GAMS data table or written to file for further analysis
by a statistical system.
Dantzig, G B, Chapter 3.3. In Linear Programming and Extensions.
Princeton University Press, Princeton, New Jersey, 1963.
$Offtext
Sets
i canning plants / seattle, san-diego /
j markets / new-york, chicago, topeka / ;
Parameters
a(i) capacity of plant i in cases
/ seattle 350
san-diego 600 /
b(j) demand at market j in cases
/ new-york 325
chicago 300
topeka 275 /
Table d(i,j) distance in thousands of miles
new-york chicago topeka
seattle 2.5 1.7 1.8
san-diego 2.5 1.8 1.4 ;
Scalar f freight in dollars per case per thousand miles /90/ ;
Parameter c(i,j) transport cost in thousands of dollars per case ;
c(i,j) = f * d(i,j) / 1000 ;
Variables
x(i,j) shipment quantities in cases
z total transportation costs in thousands of dollars ;
Positive Variable x ;
Equations
cost define objective function
supply(i) observe supply limit at plant i
demand(j) satisfy demand at market j ;
cost .. z =e= sum((i,j), c(i,j)*x(i,j)) ;
supply(i) .. sum(j, x(i,j)) =l= a(i) ;
demand(j) .. sum(i, x(i,j)) =g= b(j) ;
Model transport /all/ ;
$Stitle sensitivity part for trnsport
$Eolcom !
Alias (i,ip),(j,jp);
Scalar sens sensitivity value / .3 /
pors put or save option save=0 put=1 / 0 /
counter maximum number of problems / 2 /
Parameter report(*,ip,jp,i,j) summary results ;
File repdat sensitivity data report file ;
Option limcol=0,limrow=0,solprint=off;
pors = 1; ! write file
counter = 2; ! set to inf to run all problems
If(pors,
repdat.nw = 5; repdat.nd = 0; repdat.lw=11;
Put repdat "low/high i j x(i,j)" /);
counter = 10;
Loop((ip,jp)$counter, counter = counter-1;
c(ip,jp) = c(ip,jp)*(1-sens); ! reduce cell
Solve transport using lp minimizing z ; ! solve model
If(pors,
Put / "low ",ip.tl,jp.tl; ! write
Loop((i,j), ! solution
Put x.l(i,j) ); ! one solve per line
Else
report("low",ip,jp,i,j) = x.l(i,j)); ! save results
c(ip,jp) = c(ip,jp)/(1-sens)*(1+sens); ! increase cell
Solve transport using lp minimizing z ; ! solve model
c(ip,jp) = c(ip,jp)/(1+sens); ! reset cell
If(pors,
Put / "high ",ip.tl,jp.tl; ! write
Loop((i,j), ! solution
Put x.l(i,j) ); ! one solve per line
Else
report("high",ip,jp,i,j) = x.l(i,j)) );! save results
If(not pors,
Option report:3:3:2; Display report );
```