Sophie

Sophie

distrib > Fedora > 13 > i386 > media > os > by-pkgid > f1e2bc5e1a8a784323c2a7a37d36f441 > files > 70

glpk-doc-4.42-1.fc13.i686.rpm

# DIST, a product distribution model
#
# References:
# Robert Fourer, David M. Gay and Brian W. Kernighan, "A Modeling Language
# for Mathematical Programming." Management Science 36 (1990) 519-554.

###  SHIPPING SETS AND PARAMETERS  ###

set whse 'warehouses';  # Locations from which demand is satisfied

set dctr 'distribution centers' within whse;

                        # Locations from which product may be shipped

param sc 'shipping cost' {dctr,whse} >= 0;

                        # Shipping costs, to whse from dctr, in $ / 100 lb

param huge 'largest shipping cost' > 0;

                        # Largest cost allowed for a usable shipping route

param msr 'minimum size restriction' {dctr,whse} logical;

                        # True indicates a minimum-size restriction on
                        # direct shipments using this dctr --> whse route

param dsr 'direct shipment requirement' {dctr} >= 0;

                        # Minimum total demand, in pallets, needed to
                        # allow shipment on routes subject to the
                        # minimum size restriction

###  PLANT SETS AND PARAMETERS  ###

set fact 'factories' within dctr;

                        # Locations where product is manufactured

param rtmin 'regular-time total minimum' >= 0;

                        # Lower limit on (average) total regular-time
                        # crews employed at all factories

param rtmax 'regular-time total maximum' >= rtmin;

                        # Upper limit on (average) total regular-time
                        # crews employed at all factories

param otmin 'overtime total minimum' >= 0;

                        # Lower limit on total overtime hours at all factories

param otmax 'overtime total maximum' >= otmin;

                        # Upper limit on total overtime hours at all factories

param rmin 'regular-time minimums' {fact} >= 0;

                        # Lower limits on (average) regular-time crews

param rmax 'regular-time maximums' {f in fact} >= rmin[f];

                        # Upper limits on (average) regular-time crews

param omin 'overtime minimums' {fact} >= 0;

                        # Lower limits on overtime hours

param omax 'overtime maximums' {f in fact} >= omin[f];

                        # Upper limits on overtime hours

param hd 'hours per day' {fact} >= 0;

                        # Regular-time hours per working day

param dp 'days in period' {fact} > 0;

                        # Working days in the current planning period

###  PRODUCT SETS AND PARAMETERS  ###

set prd 'products';     # Elements of the product group

param wt 'weight' {prd} > 0;

                        # Weight in 100 lb / 1000 cases

param cpp 'cases per pallet' {prd} > 0;

                        # Cases of product per shipping pallet

param tc 'transshipment cost' {prd} >= 0;

                        # Transshipment cost in $ / 1000 cases

param pt 'production time' {prd,fact} >= 0;

                        # Crew-hours to produce 1000 cases

param rpc 'regular-time production cost' {prd,fact} >= 0;

                        # Cost of production on regular time,
                        # in $ / 1000 cases

param opc 'overtime production cost' {prd,fact} >= 0;

                        # Cost of production on overtime, in $ / 1000 cases

###  DEMAND SETS AND PARAMETERS  ###

param dt 'total demand' {prd} >= 0;

                        # Total demands for products, in 1000s

param ds 'demand shares' {prd,whse} >= 0.0, <= 1.0;

                        # Historical demand data, from which each
                        # warehouse's share of total demand is deduced

param dstot {p in prd} := sum {w in whse} ds[p,w];

                        # Total of demand shares; should be 1, but often isn't

param dem 'demand' {p in prd, w in whse} := dt[p] * ds[p,w] / dstot[p];

                        # Projected demands to be satisfied, in 1000s

set rt 'shipping routes available' :=

 {d in dctr, w in whse:
         d <> w  and  sc[d,w] < huge  and
         (w in dctr or sum {p in prd} dem[p,w] > 0)  and
         not (msr[d,w] and sum {p in prd} 1000*dem[p,w]/cpp[p] < dsr[d]) };

                        # List of ordered pairs that represent routes
                        # on which shipments are allowed

###  VARIABLES  ###

var Rprd 'regular-time production' {prd,fact} >= 0;

                        # Regular-time production of each product
                        # at each factory, in 1000s of cases

var Oprd 'overtime production' {prd,fact} >= 0;

                        # Overtime production of each product
                        # at each factory, in 1000s of cases

var Ship 'shipments' {prd,rt} >= 0;

                        # Shipments of each product on each allowed route,
                        # in 1000s of cases

var Trans 'transshipments' {prd,dctr} >= 0;

                        # Transshipments of each product at each
                        # distribution center, in 1000s of cases

###  OBJECTIVE  ###

minimize cost:  sum {p in prd, f in fact} rpc[p,f] * Rprd[p,f] +
                sum {p in prd, f in fact} opc[p,f] * Oprd[p,f] +
                sum {p in prd, (d,w) in rt} sc[d,w] * wt[p] * Ship[p,d,w] +
                sum {p in prd, d in dctr} tc[p] * Trans[p,d];

                        # Total cost:  regular production, overtime
                        # production, shipping, and transshipment

###  CONSTRAINTS  ###

rtlim 'regular-time total limits':

    rtmin <= sum {p in prd, f in fact}
                        (pt[p,f] * Rprd[p,f]) / (dp[f] * hd[f]) <= rtmax;

                        # Total crews must lie between limits

otlim 'overtime total limits':

    otmin <= sum {p in prd, f in fact} pt[p,f] * Oprd[p,f] <= otmax;

                        # Total overtime must lie between limits

rlim 'regular-time limits' {f in fact}:

    rmin[f] <= sum {p in prd}
                        (pt[p,f] * Rprd[p,f]) / (dp[f] * hd[f]) <= rmax[f];

                        # Crews at each factory must lie between limits

olim 'overtime limits' {f in fact}:

    omin[f] <= sum {p in prd} pt[p,f] * Oprd[p,f] <= omax[f];

                        # Overtime at each factory must lie between limits

noRprd 'no regular production' {p in prd, f in fact: rpc[p,f] = 0}:

    Rprd[p,f] = 0;

noOprd 'no overtime production' {p in prd, f in fact: opc[p,f] = 0}:

    Oprd[p,f] = 0;      # Do not produce where specified cost is zero

bal 'material balance' {p in prd, w in whse}:

    sum {(v,w) in rt}
       Ship [p,v,w] + (if w in fact then Rprd[p,w] + Oprd[p,w]) =

    dem[p,w] + (if w in dctr then sum {(w,v) in rt} Ship[p,w,v]);

                        # Demand is satisfied by shipment into warehouse
                        # plus production (if it is a factory)
                        # minus shipment out (if it is a distn. center)

trdef 'transshipment definition' {p in prd, d in dctr}:

    Trans[p,d] >= sum {(d,w) in rt} Ship [p,d,w] -
                  (if d in fact then Rprd[p,d] + Oprd[p,d]);

                        # Transshipment at a distribution center is
                        # shipments out less production (if any)

###  DATA -- 3 PRODUCTS  ###

data;

set prd := 18REG 24REG 24PRO ;

set whse := w01 w02 w03 w04 w05 w06 w08 w09 w12 w14 w15 w17
            w18 w19 w20 w21 w24 w25 w26 w27 w28 w29 w30 w31
            w32 w33 w34 w35 w36 w37 w38 w39 w40 w41 w42 w43
            w44 w45 w46 w47 w48 w49 w50 w51 w53 w54 w55 w56
            w57 w59 w60 w61 w62 w63 w64 w65 w66 w68 w69 w71
            w72 w73 w74 w75 w76 w77 w78 w79 w80 w81 w82 w83
            w84 w85 w86 w87 w89 w90 w91 w92 w93 w94 w95 w96
            w98 x22 x23 ;

set dctr := w01 w02 w03 w04 w05 w62 w76 w96 ;

set fact := w01 w05 w96 ;

param huge := 99. ;

param rtmin := 0.0 ;
param rtmax := 8.0 ;

param otmin :=  0.0 ;
param otmax := 96.0 ;

param rmin  :=  w01 0.00   w05 0.00   w96 0.00 ;
param rmax  :=  w01 3.00   w05 2.00   w96 3.00 ;

param omin  :=  w01  0.0   w05  0.0   w96  0.0 ;
param omax  :=  w01 48.0   w05  0.0   w96 48.0 ;

param hd    :=  w01  8.0   w05  8.0   w96  8.0 ;

param dp    :=  w01 19.0   w05 19.0   w96 19.0 ;

param wt  :=  18REG  47.3    24REG  63.0    24PRO  63.0 ;

param tc  :=  18REG  40.00   24REG  45.00   24PRO  45.00 ;

param dt  :=  18REG 376.0    24REG 172.4    24PRO 316.3 ;

param cpp :=  18REG 102.     24REG  91.     24PRO  91. ;

param dsr := w01 96.  w02 96.  w03 96.  w04 96.  w05 96.
             w62 96.  w76 96.  w96 96. ;

param pt (tr) :

       18REG     24REG     24PRO    :=

w01    1.194     1.429     1.429
w05    1.194     1.509     1.509
w96    0.000     1.600     1.600    ;

param rpc (tr) :

       18REG     24REG     24PRO    :=

w01    2119.       2653.    2617.
w05    2489.       3182.    3176.
w96       0.       2925.    2918.   ;

param opc (tr) :

       18REG     24REG     24PRO    :=

w01    2903.     3585.     3579.
w05       0.        0.        0.
w96       0.     3629.     3622.    ;

param sc  default 99.99 (tr) :

         w01     w02     w03     w04     w05     w62     w76     w96  :=

w01      .      2.97    1.14    2.08    2.37    1.26    2.42    1.43
w02     4.74     .      4.17    6.12    7.41    3.78    7.04    5.21
w03     2.45    4.74     .      3.67    2.84    0.90    2.41    2.55
w04     1.74    5.03    2.43     .      3.19    2.45    2.69    0.58
w05     2.70    5.16    2.84    2.85     .      3.26    3.34    2.71
w06     1.99    4.17    2.13    2.19    2.52    2.06    2.00    1.51
w08     0.21    2.92    1.24    2.07    2.29    1.25    2.32    1.55
w09     0.66    3.76    1.41    2.47    1.82    1.66     .      1.87
w12     1.38    3.83    1.68    2.53    2.39     .      1.96    1.94
w14     2.47    1.58    2.40    3.59    3.85    2.25     .      3.05
w15     1.06    4.95    2.48    1.39    3.41    1.96     .      1.02
w17     0.88    3.39    1.46    2.00    2.67    1.45     .      1.46
w18     7.90    6.57    7.79    9.59    10.81    .       .      6.70
w19     1.42    4.12    1.96    1.99    3.52    1.88     .      1.26
w20     3.03    1.59    2.34    4.76    3.98    1.88     .      3.73
w24     1.58    2.80    2.27    2.87    3.19    1.31     .      2.05
w25     1.51    5.05    2.74    0.57    2.98     .      2.95    0.27
w26     1.75    3.61    2.70    1.54    4.07    3.52     .      1.03
w27     2.48    6.87    3.17    1.59    2.08    3.45     .      0.99
w28     2.05    6.83    2.97    1.13    2.91     .       .      1.26
w29     4.03    3.68    4.46    3.20    5.50     .       .      3.20
w30     2.48    5.78    2.99    2.24    1.79    3.10     .      1.39
w31     2.34    5.41    2.87    1.67    1.66     .       .      1.39
w32     14.36    .       .       .       .       .       .       .
w33     3.87    4.27    5.11    3.48    5.66    4.03     .      3.05
w34     3.26    4.80    3.21    2.70    4.14     .       .      1.77
w35     2.34    2.84    2.89    3.35    3.78    2.68     .      2.52
w36     2.43    5.69    2.96    2.95    1.02    2.61    1.07    2.54
w37     2.23    4.64    2.41    1.99    4.30    2.61     .      1.44
w38     4.66    4.36    5.23    3.04    4.46     .       .      3.82
w39     1.11    3.51    1.10    2.53    3.07    1.12     .      2.23
w40     2.99    4.78    4.23    1.57    3.92     .       .      1.80
w41     4.93    4.00    5.43    4.45    6.31     .       .      3.81
w42     3.86    6.55    5.03    2.11    4.41     .       .      2.63
w43     4.61    4.45    3.77    1.22    4.31     .       .      2.35
w44     2.05    4.48    1.06    3.70    3.46    1.10     .      3.21
w45     0.92    3.42    1.58    3.04    1.82    1.94     .      2.52
w46     1.36    2.44    0.95    3.08    2.78    0.39    2.16    2.37
w47     1.30    3.39    1.60    2.49    4.29    2.04     .      1.68
w48     1.65    3.78    1.03    2.97    2.21    1.31     .      2.74
w49     1.96    3.00    1.50    3.24    3.68    1.00     .      2.99
w50     0.90    4.14    1.60    1.95    3.61    1.61     .      1.52
w51     1.59    3.95    0.25    2.96    2.58    1.00    2.41    2.71
w53     1.59    3.79    1.28    3.12    3.10    0.89     .      2.98
w54     1.72    4.36    1.61    2.92    2.34    1.91    1.97    3.05
w55     2.45    2.73    2.21    4.47    4.30    2.57     .      4.48
w56     1.10    3.73    1.59    2.74    2.33    1.45     .      2.44
w57     0.95    3.39    1.37    2.30    2.47    1.15     .      1.95
w59     3.29    5.35    3.32    3.81    1.52    3.38    1.34    4.08
w60     2.41    6.12    2.46    3.65    2.35     .      1.37    4.06
w61     3.32    5.50    3.41    3.38    1.23     .      0.99    4.28
w62     1.12    3.00    0.82    3.22    2.95     .      3.33    2.53
w63     3.59    6.36    3.25    4.12    1.84    3.59    1.46    4.03
w64     1.85    4.45    2.17    3.43    2.13    2.03     .      4.02
w65     2.78    4.79    2.81    2.94    1.54    2.90    1.07    2.94
w66     3.90    5.79    3.05    3.65    1.36    3.39    1.22    3.57
w68     2.61    5.20    2.90    2.34    1.68    3.19    1.48    2.31
w69     2.94    5.21    2.78    3.43    0.21    3.26    0.68    2.54
w71     2.06    4.98    2.38    2.44    1.59    2.97    1.05    2.55
w72     2.61    5.50    2.83    3.12    1.35    3.23    0.88    2.99
w73     8.52    6.16    8.03    8.83    10.44   7.38    10.26    .
w74     6.11    5.46    9.07    9.38    10.80    .       .      8.25
w75     2.66    4.94    2.87    3.69    1.52    3.15    1.24    4.00
w76     1.99    5.26    2.23    3.36    0.58    3.17     .      2.50
w77     4.32    3.07    5.05    3.88    6.04     .       .      4.15
w78     5.60    2.59    5.78    5.56    7.10     .       .      5.60
w79     4.25    2.32    4.93    4.57    6.04     .       .      4.58
w80     5.94    4.00    5.60    7.02    9.46     .       .      7.51
w81     5.39    2.21    5.10    6.22    6.46     .       .      6.58
w82     8.80    5.69    9.29    9.88    11.69   8.63    11.52    .
w83     4.40     .      5.24    5.21    5.81    3.91    7.04    5.33
w84     5.87    5.43    6.17    5.70    7.63     .       .      5.70
w85     3.90    3.65    3.38    4.57    5.64    3.05     .      5.04
w86     5.48    2.10    5.70    6.37    7.33     .       .      6.19
w87     8.88    5.54    9.50    9.71    11.64   8.85    11.68    .
w89     4.62    4.01    4.03    6.30    6.30    3.81     .      7.77
w90     4.35    2.72    4.61    4.01    5.60     .       .      3.20
w91     7.61    4.42    7.83    6.85    8.79     .       .      7.66
w92     7.15    2.69    6.91    7.20     .       .       .      7.06
w93     3.17    3.95    4.37    3.74    5.05     .       .      2.40
w94     1.21    3.07    0.90    2.74    3.17     .      2.63    2.39
w95     5.82    3.29    6.55    7.06    11.47    .       .      7.83
w96     1.77    5.20    2.72    0.59    3.47    2.48     .       .
w98     3.04    1.92    3.64    3.70    4.90    3.05     .      3.88
x22     4.08    6.25    4.15    4.30    1.77     .      1.77     .
x23     3.39    5.74    3.55    4.08    1.69     .      1.47     .      ;

param msr (tr) :

         w01     w02     w03     w04     w05     w62     w76     w96    :=

w01        0       0       0       0       0       0       1       0
w02        0       0       0       0       0       0       1       0
w03        0       0       0       0       0       0       1       0
w04        0       0       0       0       0       0       1       0
w05        0       0       0       0       0       0       0       0
w06        0       1       1       1       1       1       1       1
w08        0       1       1       1       1       1       1       1
w09        0       1       1       1       1       1       0       1
w12        0       1       1       1       1       0       1       1
w14        1       1       1       1       1       0       0       1
w15        0       1       1       1       1       1       0       1
w17        0       1       1       1       1       1       0       1
w18        0       1       1       1       1       0       0       1
w19        0       1       1       1       1       0       0       1
w20        1       1       1       1       1       0       0       1
w24        0       1       1       1       1       0       0       1
w25        0       1       1       1       1       0       1       0
w26        1       1       1       0       1       1       0       1
w27        1       1       1       0       1       1       0       1
w28        1       1       1       0       1       0       0       1
w29        0       1       1       1       1       0       0       1
w30        1       1       1       0       1       1       0       1
w31        1       1       1       0       1       0       0       1
w32        0       0       0       0       0       0       0       0
w33        1       0       1       1       1       1       0       1
w34        1       1       1       0       1       0       0       1
w35        1       1       1       1       1       0       0       1
w36        0       1       1       1       0       1       1       1
w37        1       1       1       0       1       1       0       1
w38        1       1       1       0       1       0       0       1
w39        0       1       1       1       1       1       0       1
w40        1       1       1       0       1       0       0       1
w41        1       0       1       1       1       0       0       1
w42        1       1       1       0       1       0       0       1
w43        1       1       1       0       1       0       0       1
w44        1       1       1       1       1       0       0       1
w45        0       1       1       1       1       1       0       1
w46        0       1       1       1       1       0       1       1
w47        0       1       1       1       1       1       0       1
w48        0       1       1       1       1       0       0       1
w49        1       1       1       1       1       0       0       1
w50        0       1       1       1       1       1       0       1
w51        0       1       1       1       1       0       1       1
w53        1       1       1       1       1       0       0       1
w54        0       1       1       1       1       1       1       1
w55        0       1       1       1       1       0       0       1
w56        0       1       1       1       1       1       0       1
w57        0       1       1       1       1       1       0       1
w59        0       1       1       1       0       1       1       1
w60        0       1       1       1       1       0       1       1
w61        0       1       1       1       0       0       1       1
w62        0       0       0       0       0       0       1       0
w63        0       1       1       1       0       1       1       1
w64        0       1       1       1       1       1       0       1
w65        0       1       1       1       0       1       1       1
w66        0       1       1       1       0       1       1       1
w68        0       1       1       1       0       1       1       1
w69        0       1       1       1       0       1       1       1
w71        0       1       1       1       0       1       1       1
w72        0       1       1       1       0       1       1       1
w73        0       1       1       1       0       1       1       0
w74        0       1       1       1       0       0       0       1
w75        0       1       1       1       0       1       1       1
w76        0       0       0       0       0       0       0       0
w77        1       0       1       1       1       0       0       1
w78        1       0       1       1       1       0       0       1
w79        1       0       1       1       1       0       0       1
w80        1       0       1       1       1       0       0       1
w81        1       0       1       1       1       0       0       1
w82        1       0       1       1       1       1       1       0
w83        1       0       1       1       1       0       1       1
w84        1       0       1       1       1       0       0       1
w85        1       1       1       1       1       0       0       1
w86        1       0       1       1       1       0       0       1
w87        1       0       1       1       1       1       1       0
w89        1       0       1       1       1       1       0       1
w90        0       1       1       1       1       0       0       1
w91        1       0       1       1       1       0       0       1
w92        1       0       1       1       1       0       0       1
w93        1       1       1       0       1       0       0       1
w94        0       0       1       1       1       0       1       1
w95        1       0       1       1       1       0       0       1
w96        0       0       0       0       0       0       0       0
w98        1       0       1       1       1       1       0       1
x22        1       1       1       1       0       0       1       0
x23        1       1       1       1       0       0       1       0    ;

param ds default 0.000 (tr) :

         18REG     24REG     24PRO    :=

w01      0.000     0.000     0.008
w02      0.004     0.000     0.000
w03      0.000     0.000     0.000
w04      0.010     0.002     0.000
w05      0.000     0.000     0.000
w06      0.010     0.008     0.008
w08      0.030     0.024     0.024
w09      0.014     0.018     0.020
w12      0.014     0.012     0.010
w14      0.007     0.007     0.012
w15      0.010     0.019     0.018
w17      0.013     0.010     0.011
w19      0.015     0.012     0.009
w20      0.012     0.021     0.022
w21      0.000     0.000     0.000
w24      0.012     0.022     0.018
w25      0.019     0.025     0.020
w26      0.006     0.015     0.021
w27      0.008     0.010     0.015
w28      0.011     0.016     0.019
w29      0.008     0.020     0.013
w30      0.011     0.013     0.015
w31      0.011     0.013     0.017
w32      0.006     0.000     0.000
w33      0.000     0.015     0.014
w34      0.008     0.007     0.005
w35      0.002     0.006     0.014
w36      0.015     0.013     0.005
w37      0.017     0.016     0.015
w38      0.015     0.009     0.012
w39      0.007     0.017     0.022
w40      0.009     0.014     0.020
w41      0.003     0.014     0.011
w42      0.017     0.011     0.012
w43      0.009     0.013     0.011
w44      0.002     0.012     0.012
w45      0.016     0.025     0.028
w46      0.038     0.062     0.040
w47      0.007     0.010     0.010
w48      0.003     0.015     0.016
w49      0.005     0.016     0.017
w50      0.011     0.008     0.007
w51      0.010     0.022     0.021
w53      0.004     0.026     0.020
w54      0.020     0.017     0.025
w55      0.004     0.019     0.028
w56      0.004     0.010     0.008
w57      0.014     0.020     0.018
w59      0.012     0.006     0.007
w60      0.019     0.010     0.009
w61      0.028     0.010     0.012
w62      0.000     0.000     0.000
w63      0.070     0.027     0.037
w64      0.009     0.004     0.005
w65      0.022     0.015     0.016
w66      0.046     0.017     0.020
w68      0.005     0.012     0.016
w69      0.085     0.036     0.039
w71      0.011     0.013     0.010
w72      0.089     0.031     0.034
w75      0.026     0.012     0.010
w77      0.001     0.004     0.002
w78      0.002     0.004     0.002
w79      0.001     0.004     0.002
w80      0.001     0.001     0.002
w81      0.001     0.003     0.002
w83      0.009     0.010     0.008
w84      0.001     0.002     0.002
w85      0.001     0.004     0.005
w86      0.001     0.002     0.002
w87      0.002     0.003     0.000
w89      0.001     0.001     0.002
w90      0.006     0.017     0.013
w91      0.002     0.010     0.013
w92      0.000     0.003     0.002
w93      0.002     0.006     0.007
w95      0.001     0.007     0.007
w96      0.000     0.000     0.000
w98      0.006     0.005     0.002    ;

end;