paperco.gms : Vertically Integrated Company

Description

This is an alternative formulation of the model PAPERCO found in
Computational Economics, Chapter 9. This version introduces
several sets to partition the equation and variable space into
four groups. This example further shows how to implement the
suggested scenarios by using a LOOP statement.


Reference

  • Thompson, G, and Thor, S, Computational Economics: Economic Modeling with Optimization Software. The Scientific Press, San Francisco, 1991.

Small Model of Type : LP


Category : GAMS Model library


Main file : paperco.gms

$title Vertically Integrated Company (PAPERCO,SEQ=102)

$onText
This is an alternative formulation of the model PAPERCO found in
Computational Economics, Chapter 9. This version introduces
several sets to partition the equation and variable space into
four groups. This example further shows how to implement the
suggested scenarios by using a LOOP statement.


Thompson, G, and Thor, S, Computational Economics: Economic Modeling
with Optimization Software. The Scientific Press, San Francisco, 1991.

Keywords: linear programming, production planning, pulp and paper industry,
          scenario analysis, manufacturing
$offText

$eolCom //

Set
   l 'log suppliers' / company, farmer /
   w 'wood products' / ground, chips   /
   p 'pulp types'    / pulp-1, pulp-2  /
   q 'paper types'   / kraft, newsprint, printing /;

Table ap(w,p) 'pulp manufacturing input requirements'
               pulp-1  pulp-2
   ground          .6      .3
   chips           .4      .7;

Table aq(p,q) 'paper manufacturing input requirements'
               kraft  newsprint  printing
   pulp-1        .68        .45       .25
   pulp-2        .32        .55       .75;

Table cw(w,p) 'wood shipment cost'
               pulp-1  pulp-2
   (ground
    chips )        40      55;

Table cp(p,q) 'pulp shipment cost'
               kraft  newsprint  printing
   pulp-1         40        60         70
   pulp-2         55        50         45;

Table sdat(q,*) 'sales data'
               lower  upper
   kraft          18     25
   newsprint      12     15
   printing        0      7;

Parameter
   pq(q) 'sales price'   / kraft 265, newsprint 275, printing 310 /
   pp(p) 'price of pulp'
   pc(w) 'price of wood products'           / ground 18, chips 16 /;

Scalar plog / 65 /;

Positive Variable
   logs(l)     'purchases of logs                      (tons)'
   xw(w,p)     'shipments of wood products             (tons)'
   pulp(p)     'production of pulp                     (tons)'
   xp(p,q)     'shipments of pulp                      (tons)'
   paper(q)    'production and sales of paper products (tons)'
   sales(p)    'sales of pulp                          (tons)'
   purchase(p) 'purchase of pulp                       (tons)';

Variable profit 'net operating income';

Equation
    logbal
    wbal(w,p)
    pbal(p)
    qbal(p,q)
    obj;

logbal..      .97*sum(l, logs(l)) =e= sum((w,p), xw(w,p));

wbal(w,p)..   xw(w,p)             =e= ap(w,p)*pulp(p);

pbal(p)..     sum(q, xp(p,q))     =e= purchase(p) - sales(p) + pulp(p);

qbal(p,q)..   xp(p,q)             =e= aq(p,q)*paper(q);

obj..  profit =e= sum(p, pp(p)*sales(p))              // sales of pulp
               +  sum(q, pq(q)*paper(q))              // sales of paper
               -  sum(l, plog*logs(l))                // cost of logs
               -  sum((p,q), cp(p,q)*xp(p,q))         // transport cost of pulp
               -  sum((w,p), (cw(w,p)+pc(w))*xw(w,p)) // transport cost of wood
               -  sum(p, pp(p)*purchase(p));

paper.lo(q) = sdat(q,'lower');
paper.up(q) = sdat(q,'upper');

Model wood / all /;

Set scenario 'scenario identifier'  / scenario-1*scenario-3 /;

Table psdat(scenario,p,*) 'bounds on pulp trade          (tons)'
                pulp-1.s  pulp-1.p  pulp-2.s  pulp-2.p
   scenario-1
   scenario-2          3         5         3         5
   scenario-3          6         6        10        10;

Table ppdat(scenario,p) 'price data for pulp trade ($ per tons)'
                pulp-1  pulp-2
   scenario-1      120     140
   scenario-2      120     140
   scenario-3      120     150;

loop(scenario,
   purchase.up(p) = psdat(scenario,p,'p');
   sales.up(p)    = psdat(scenario,p,'s');
   pp(p)          = ppdat(scenario,p);
   solve wood maximizing profit using lp;
   option limCol = 0, limRow = 0;
);