Sophie

Sophie

distrib > Fedora > 13 > i386 > by-pkgid > f1e2bc5e1a8a784323c2a7a37d36f441 > files > 133

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

# TRAIN, a model of railroad passenger car allocation
#
# References:
# Robert Fourer, David M. Gay and Brian W. Kernighan, "A Modeling Language
# for Mathematical Programming." Management Science 36 (1990) 519-554.

###  SCHEDULE SETS AND PARAMETERS  ###

set cities;

set links within {c1 in cities, c2 in cities: c1 <> c2};

                        # Set of cities, and set of intercity links

param last > 0 integer; # Number of time intervals in a day

set times := 1..last;   # Set of time intervals in a day

set schedule within
      {c1 in cities, t1 in times,
       c2 in cities, t2 in times: (c1,c2) in links};

                        # Member (c1,t1,c2,t2) of this set represents
                        # a train that leaves city c1 at time t1
                        # and arrives in city c2 at time t2

###  DEMAND PARAMETERS  ###

param section > 0 integer;

                        # Maximum number of cars in one section of a train

param demand {schedule} > 0;

                        # For each scheduled train:
                        # the smallest number of cars that
                        # can meet demand for the train

param low {(c1,t1,c2,t2) in schedule} := ceil(demand[c1,t1,c2,t2]);

                        # Minimum number of cars needed to meet demand

param high {(c1,t1,c2,t2) in schedule}

   := max (2, min (ceil(2*demand[c1,t1,c2,t2]),
                   section*ceil(demand[c1,t1,c2,t2]/section) ));

                        # Maximum number of cars allowed on a train:
                        # 2 if demand is for less than one car;
                        # otherwise, lesser of
                        # number of cars needed to hold twice the demand, and
                        # number of cars in minimum number of sections needed

###  DISTANCE PARAMETERS  ###

param dist_table {links} >= 0 default 0.0;

param distance {(c1,c2) in links} > 0
   := if dist_table[c1,c2] > 0 then dist_table[c1,c2] else dist_table[c2,c1];

                        # Inter-city distances: distance[c1,c2] is miles
                        # between city c1 and city c2

###  VARIABLES  ###

var U 'cars stored' {cities,times} >= 0;

                        # u[c,t] is the number of unused cars stored
                        # at city c in the interval beginning at time t

var X 'cars in train' {schedule} >= 0;

                        # x[c1,t1,c2,t2] is the number of cars assigned to
                        # the scheduled train that leaves c1 at t1 and
                        # arrives in c2 at t2

###  OBJECTIVES  ###

minimize cars:
       sum {c in cities} U[c,last] +
       sum {(c1,t1,c2,t2) in schedule: t2 < t1} X[c1,t1,c2,t2];

                        # Number of cars in the system:
                        # sum of unused cars and cars in trains during
                        # the last time interval of the day

minimize miles:
       sum {(c1,t1,c2,t2) in schedule} distance[c1,c2] * X[c1,t1,c2,t2];

                        # Total car-miles run by all scheduled trains in a day

###  CONSTRAINTS  ###

account {c in cities, t in times}:

  U[c,t] = U[c, if t > 1 then t-1 else last] +

      sum {(c1,t1,c,t) in schedule} X[c1,t1,c,t] -
      sum {(c,t,c2,t2) in schedule} X[c,t,c2,t2];

                        # For every city and time:
                        # unused cars in the present interval must equal
                        # unused cars in the previous interval,
                        # plus cars just arriving in trains,
                        # minus cars just leaving in trains

satisfy {(c1,t1,c2,t2) in schedule}:

       low[c1,t1,c2,t2] <= X[c1,t1,c2,t2] <= high[c1,t1,c2,t2];

                        # For each scheduled train:
                        # number of cars must meet demand,
                        # but must not be so great that unnecessary
                        # sections are run

###  DATA  ###

data;

set cities := BO NY PH WA ;

set links := (BO,NY) (NY,PH) (PH,WA)
             (NY,BO) (PH,NY) (WA,PH) ;

param dist_table := [*,*]  BO NY  232
                           NY PH   90
                           PH WA  135 ;

param last := 48 ;

param section := 14 ;

set schedule :=

   (WA,*,PH,*)   2  5     6  9     8 11    10 13
                12 15    13 16    14 17    15 18
                16 19    17 20    18 21    19 22
                20 23    21 24    22 25    23 26
                24 27    25 28    26 29    27 30
                28 31    29 32    30 33    31 34
                32 35    33 36    34 37    35 38
                36 39    37 40    38 41    39 42
                40 43    41 44    42 45    44 47
                46  1

   (PH,*,NY,*)   1  3     5  7     9 11    11 13
                13 15    14 16    15 17    16 18
                17 19    18 20    19 21    20 22
                21 23    22 24    23 25    24 26
                25 27    26 28    27 29    28 30
                29 31    30 32    31 33    32 34
                33 35    34 36    35 37    36 38
                37 39    38 40    39 41    40 42
                41 43    42 44    43 45    44 46
                45 47    47  1

   (NY,*,BO,*)  10 16    12 18    14 20    15 21
                16 22    17 23    18 24    19 25
                20 26    21 27    22 28    23 29
                24 30    25 31    26 32    27 33
                28 34    29 35    30 36    31 37
                32 38    33 39    34 40    35 41
                36 42    37 43    38 44    39 45
                40 46    41 47    42 48    43  1
                44  2    45  3    46  4    48  6

   (BO,*,NY,*)   7 13     9 15    11 17    12 18
                13 19    14 20    15 21    16 22
                17 23    18 24    19 25    20 26
                21 27    22 28    23 29    24 30
                25 31    26 32    27 33    28 34
                29 35    30 36    31 37    32 38
                33 39    34 40    35 41    36 42
                37 43    38 44    39 45    40 46
                41 47    43  1    45  3    47  5

   (NY,*,PH,*)   1  3    12 14    13 15    14 16
                15 17    16 18    17 19    18 20
                19 21    20 22    21 23    22 24
                23 25    24 26    25 27    26 28
                27 29    28 30    29 31    30 32
                31 33    32 34    33 35    34 36
                35 37    36 38    37 39    38 40
                39 41    40 42    41 43    42 44
                43 45    44 46    45 47    46 48
                47  1

   (PH,*,WA,*)   1  4    14 17    15 18    16 19
                17 20    18 21    19 22    20 23
                21 24    22 25    23 26    24 27
                25 28    26 29    27 30    28 31
                29 32    30 33    31 34    32 35
                33 36    34 37    35 38    36 39
                37 40    38 41    39 42    40 43
                41 44    42 45    43 46    44 47
                45 48    46  1    47  2    ;

param demand :=

 [WA,*,PH,*]   2  5    .55      6  9    .01      8 11    .01
              10 13    .13     12 15   1.59     13 16   1.69
              14 17   5.19     15 18   3.55     16 19   6.29
              17 20   4.00     18 21   5.80     19 22   3.40
              20 23   4.88     21 24   2.92     22 25   4.37
              23 26   2.80     24 27   4.23     25 28   2.88
              26 29   4.33     27 30   3.11     28 31   4.64
              29 32   3.44     30 33   4.95     31 34   3.73
              32 35   5.27     33 36   3.77     34 37   4.80
              35 38   3.31     36 39   3.89     37 40   2.65
              38 41   3.01     39 42   2.04     40 43   2.31
              41 44   1.52     42 45   1.75     44 47   1.88
              46  1   1.05

 [PH,*,NY,*]   1  3   1.05      5  7    .43      9 11    .20
              11 13    .21     13 15    .40     14 16   6.49
              15 17  16.40     16 18   9.48     17 19  17.15
              18 20   9.31     19 21  15.20     20 22   8.21
              21 23  13.32     22 24   7.35     23 25  11.83
              24 26   6.61     25 27  10.61     26 28   6.05
              27 29   9.65     28 30   5.61     29 31   9.25
              30 32   5.40     31 33   8.24     32 34   4.84
              33 35   7.44     34 36   4.44     35 37   6.80
              36 38   4.11     37 39   6.25     38 40   3.69
              39 41   5.55     40 42   3.29     41 43   4.77
              42 44   2.91     43 45   4.19     44 46   2.53
              45 47   4.00     47 1    1.65

 [NY,*,BO,*]  10 16   1.23     12 18   3.84     14 20   4.08
              15 21   1.47     16 22   2.96     17 23   1.60
              18 24   2.95     19 25   1.71     20 26   2.81
              21 27   1.77     22 28   2.87     23 29   1.84
              24 30   2.95     25 31   1.91     26 32   3.12
              27 33   1.93     28 34   3.31     29 35   2.00
              30 36   3.40     31 37   2.08     32 38   3.41
              33 39   2.69     34 40   4.45     35 41   2.32
              36 42   3.40     37 43   1.80     38 44   2.63
              39 45   1.52     40 46   2.23     41 47   1.25
              42 48   1.79     43  1    .97     44  2   1.28
              45  3    .48     46  4    .68     48  6    .08

 [BO,*,NY,*]   7 13    .03      9 15   1.29     11 17   4.59
              12 18   2.56     13 19   3.92     14 20   2.37
              15 21   3.81     16 22   2.24     17 23   3.51
              18 24   2.13     19 25   3.28     20 26   2.05
              21 27   3.15     22 28   1.99     23 29   3.09
              24 30   1.93     25 31   3.19     26 32   1.91
              27 33   3.21     28 34   1.85     29 35   3.21
              30 36   1.71     31 37   3.04     32 38   2.08
              33 39   3.13     34 40   1.96     35 41   2.53
              36 42   1.43     37 43   2.04     38 44   1.12
              39 45   1.71     40 46    .91     41 47   1.32
              43  1   1.80     45  3   1.13     47  5    .23

 [NY,*,PH,*]   1  3    .04     12 14   4.68     13 15   5.61
              14 16   3.56     15 17   5.81     16 18   3.81
              17 19   6.31     18 20   4.07     19 21   7.33
              20 22   4.55     21 23   7.37     22 24   4.73
              23 25   7.61     24 26   4.92     25 27   7.91
              26 28   5.19     27 29   8.40     28 30   5.53
              29 31   9.32     30 32   5.51     31 33  10.33
              32 34   9.21     33 35  18.95     34 36  11.23
              35 37  16.85     36 38   7.29     37 39  10.89
              38 40   5.41     39 41   8.21     40 42   4.52
              41 43   6.99     42 44   3.92     43 45   6.21
              44 46   3.44     45 47   5.17     46 48   2.55
              47  1   1.24

 [PH,*,WA,*]   1  4    .20     14 17   4.49     15 18   3.53
              16 19   2.67     17 20   3.83     18 21   3.01
              19 22   4.12     20 23   3.15     21 24   4.67
              22 25   3.20     23 26   4.23     24 27   2.87
              25 28   3.84     26 29   2.60     27 30   3.80
              28 31   2.77     29 32   4.31     30 33   3.16
              31 34   4.88     32 35   3.45     33 36   5.55
              34 37   3.52     35 38   6.11     36 39   3.32
              37 40   5.53     38 41   3.03     39 42   4.51
              40 43   2.53     41 44   3.39     42 45   1.93
              43 46   2.52     44 47   1.20     45 48   1.75
              46  1    .88     47  2    .87     ;

end;