examples/fctp.mod
author Alpar Juttner <alpar@cs.elte.hu>
Mon, 06 Dec 2010 13:09:21 +0100
changeset 1 c445c931472f
permissions -rw-r--r--
Import glpk-4.45

- Generated files and doc/notes are removed
alpar@1
     1
/* FCTP, Fixed-Charge Transportation Problem */
alpar@1
     2
alpar@1
     3
/* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */
alpar@1
     4
alpar@1
     5
/* The Fixed-Charge Transportation Problem (FCTP) is obtained from
alpar@1
     6
   classical transportation problem by imposing a fixed cost on each
alpar@1
     7
   transportation link if there is a positive flow on that link. */
alpar@1
     8
alpar@1
     9
param m, integer, > 0;
alpar@1
    10
/* number of sources */
alpar@1
    11
alpar@1
    12
param n, integer, > 0;
alpar@1
    13
/* number of customers */
alpar@1
    14
alpar@1
    15
set I := 1..m;
alpar@1
    16
/* set of sources */
alpar@1
    17
alpar@1
    18
set J := 1..n;
alpar@1
    19
/* set of customers */
alpar@1
    20
alpar@1
    21
param supply{i in I}, >= 0;
alpar@1
    22
/* supply at source i */
alpar@1
    23
alpar@1
    24
param demand{j in J}, >= 0;
alpar@1
    25
/* demand at customer j */
alpar@1
    26
alpar@1
    27
param varcost{i in I, j in J}, >= 0;
alpar@1
    28
/* variable cost (a cost per one unit shipped from i to j) */
alpar@1
    29
alpar@1
    30
param fixcost{i in I, j in J}, >= 0;
alpar@1
    31
/* fixed cost (a cost for shipping any amount from i to j) */
alpar@1
    32
alpar@1
    33
var x{i in I, j in J}, >= 0;
alpar@1
    34
/* amount shipped from source i to customer j */
alpar@1
    35
alpar@1
    36
s.t. f{i in I}: sum{j in J} x[i,j] = supply[i];
alpar@1
    37
/* observe supply at source i */
alpar@1
    38
alpar@1
    39
s.t. g{j in J}: sum{i in I} x[i,j] = demand[j];
alpar@1
    40
/* satisfy demand at customer j */
alpar@1
    41
alpar@1
    42
var y{i in I, j in J}, binary;
alpar@1
    43
/* y[i,j] = 1 means some amount is shipped from i to j */
alpar@1
    44
alpar@1
    45
s.t. h{i in I, j in J}: x[i,j] <= min(supply[i], demand[j]) * y[i,j];
alpar@1
    46
/* if y[i,j] is 0, force x[i,j] to be 0 (may note that supply[i] and
alpar@1
    47
   demand[j] are implicit upper bounds for x[i,j] as follows from the
alpar@1
    48
   constraints f[i] and g[j]) */
alpar@1
    49
alpar@1
    50
minimize cost: sum{i in I, j in J} varcost[i,j] * x[i,j] +
alpar@1
    51
               sum{i in I, j in J} fixcost[i,j] * y[i,j];
alpar@1
    52
/* total transportation costs */
alpar@1
    53
alpar@1
    54
data;
alpar@1
    55
alpar@1
    56
/* These data correspond to the instance bal8x12 from [Balinski]. */
alpar@1
    57
alpar@1
    58
/* The optimal solution is 471.55 */
alpar@1
    59
alpar@1
    60
param m := 8;
alpar@1
    61
alpar@1
    62
param n := 12;
alpar@1
    63
alpar@1
    64
param supply := 1 15.00,  2 20.00,  3 45.00,  4 35.00,
alpar@1
    65
                5 25.00,  6 35.00,  7 10.00,  8 25.00;
alpar@1
    66
alpar@1
    67
param demand := 1 20.00,  2 15.00,  3 20.00,  4 15.00,
alpar@1
    68
                5  5.00,  6 20.00,  7 30.00,  8 10.00,
alpar@1
    69
                9 35.00, 10 25.00, 11 10.00, 12  5.00;
alpar@1
    70
alpar@1
    71
param varcost
alpar@1
    72
      :   1    2    3    4    5    6    7    8    9    10   11   12  :=
alpar@1
    73
      1  0.69 0.64 0.71 0.79 1.70 2.83 2.02 5.64 5.94 5.94 5.94 7.68
alpar@1
    74
      2  1.01 0.75 0.88 0.59 1.50 2.63 2.26 5.64 5.85 5.62 5.85 4.94
alpar@1
    75
      3  1.05 1.06 1.08 0.64 1.22 2.37 1.66 5.64 5.91 5.62 5.91 4.94
alpar@1
    76
      4  1.94 1.50 1.56 1.22 1.98 1.98 1.36 6.99 6.99 6.99 6.99 3.68
alpar@1
    77
      5  1.61 1.40 1.61 1.33 1.68 2.83 1.54 4.26 4.26 4.26 4.26 2.99
alpar@1
    78
      6  5.29 5.94 6.08 5.29 5.96 6.77 5.08 0.31 0.21 0.17 0.31 1.53
alpar@1
    79
      7  5.29 5.94 6.08 5.29 5.96 6.77 5.08 0.55 0.35 0.40 0.19 1.53
alpar@1
    80
      8  5.29 6.08 6.08 5.29 5.96 6.45 5.08 2.43 2.30 2.33 1.81 2.50 ;
alpar@1
    81
alpar@1
    82
param fixcost
alpar@1
    83
      :   1    2    3    4    5    6    7    8    9    10   11   12  :=
alpar@1
    84
      1  11.0 16.0 18.0 17.0 10.0 20.0 17.0 13.0 15.0 12.0 14.0 14.0
alpar@1
    85
      2  14.0 17.0 17.0 13.0 15.0 13.0 16.0 11.0 20.0 11.0 15.0 10.0
alpar@1
    86
      3  12.0 13.0 20.0 17.0 13.0 15.0 16.0 13.0 12.0 13.0 10.0 18.0
alpar@1
    87
      4  16.0 19.0 16.0 11.0 15.0 12.0 18.0 12.0 18.0 13.0 13.0 14.0
alpar@1
    88
      5  19.0 18.0 15.0 16.0 12.0 14.0 20.0 19.0 11.0 17.0 16.0 18.0
alpar@1
    89
      6  13.0 20.0 20.0 17.0 15.0 12.0 14.0 11.0 12.0 19.0 15.0 16.0
alpar@1
    90
      7  11.0 12.0 15.0 10.0 17.0 11.0 11.0 16.0 10.0 18.0 17.0 12.0
alpar@1
    91
      8  17.0 10.0 20.0 12.0 17.0 20.0 16.0 15.0 10.0 12.0 16.0 18.0 ;
alpar@1
    92
alpar@1
    93
end;