examples/tsp.mod
changeset 2 4c8956a7bdf4
equal deleted inserted replaced
-1:000000000000 0:e2124ad79da3
       
     1 /* TSP, Traveling Salesman Problem */
       
     2 
       
     3 /* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */
       
     4 
       
     5 /* The Traveling Salesman Problem (TSP) is stated as follows.
       
     6    Let a directed graph G = (V, E) be given, where V = {1, ..., n} is
       
     7    a set of nodes, E <= V x V is a set of arcs. Let also each arc
       
     8    e = (i,j) be assigned a number c[i,j], which is the length of the
       
     9    arc e. The problem is to find a closed path of minimal length going
       
    10    through each node of G exactly once. */
       
    11 
       
    12 param n, integer, >= 3;
       
    13 /* number of nodes */
       
    14 
       
    15 set V := 1..n;
       
    16 /* set of nodes */
       
    17 
       
    18 set E, within V cross V;
       
    19 /* set of arcs */
       
    20 
       
    21 param c{(i,j) in E};
       
    22 /* distance from node i to node j */
       
    23 
       
    24 var x{(i,j) in E}, binary;
       
    25 /* x[i,j] = 1 means that the salesman goes from node i to node j */
       
    26 
       
    27 minimize total: sum{(i,j) in E} c[i,j] * x[i,j];
       
    28 /* the objective is to make the path length as small as possible */
       
    29 
       
    30 s.t. leave{i in V}: sum{(i,j) in E} x[i,j] = 1;
       
    31 /* the salesman leaves each node i exactly once */
       
    32 
       
    33 s.t. enter{j in V}: sum{(i,j) in E} x[i,j] = 1;
       
    34 /* the salesman enters each node j exactly once */
       
    35 
       
    36 /* Constraints above are not sufficient to describe valid tours, so we
       
    37    need to add constraints to eliminate subtours, i.e. tours which have
       
    38    disconnected components. Although there are many known ways to do
       
    39    that, I invented yet another way. The general idea is the following.
       
    40    Let the salesman sells, say, cars, starting the travel from node 1,
       
    41    where he has n cars. If we require the salesman to sell exactly one
       
    42    car in each node, he will need to go through all nodes to satisfy
       
    43    this requirement, thus, all subtours will be eliminated. */
       
    44 
       
    45 var y{(i,j) in E}, >= 0;
       
    46 /* y[i,j] is the number of cars, which the salesman has after leaving
       
    47    node i and before entering node j; in terms of the network analysis,
       
    48    y[i,j] is a flow through arc (i,j) */
       
    49 
       
    50 s.t. cap{(i,j) in E}: y[i,j] <= (n-1) * x[i,j];
       
    51 /* if arc (i,j) does not belong to the salesman's tour, its capacity
       
    52    must be zero; it is obvious that on leaving a node, it is sufficient
       
    53    to have not more than n-1 cars */
       
    54 
       
    55 s.t. node{i in V}:
       
    56 /* node[i] is a conservation constraint for node i */
       
    57 
       
    58       sum{(j,i) in E} y[j,i]
       
    59       /* summary flow into node i through all ingoing arcs */
       
    60 
       
    61       + (if i = 1 then n)
       
    62       /* plus n cars which the salesman has at starting node */
       
    63 
       
    64       = /* must be equal to */
       
    65 
       
    66       sum{(i,j) in E} y[i,j]
       
    67       /* summary flow from node i through all outgoing arcs */
       
    68 
       
    69       + 1;
       
    70       /* plus one car which the salesman sells at node i */
       
    71 
       
    72 solve;
       
    73 
       
    74 printf "Optimal tour has length %d\n",
       
    75    sum{(i,j) in E} c[i,j] * x[i,j];
       
    76 printf("From node   To node   Distance\n");
       
    77 printf{(i,j) in E: x[i,j]} "      %3d       %3d   %8g\n",
       
    78    i, j, c[i,j];
       
    79 
       
    80 data;
       
    81 
       
    82 /* These data correspond to the symmetric instance ulysses16 from:
       
    83 
       
    84    Reinelt, G.: TSPLIB - A travelling salesman problem library.
       
    85    ORSA-Journal of the Computing 3 (1991) 376-84;
       
    86    http://elib.zib.de/pub/Packages/mp-testdata/tsp/tsplib */
       
    87 
       
    88 /* The optimal solution is 6859 */
       
    89 
       
    90 param n := 16;
       
    91 
       
    92 param : E : c :=
       
    93     1  2   509
       
    94     1  3   501
       
    95     1  4   312
       
    96     1  5  1019
       
    97     1  6   736
       
    98     1  7   656
       
    99     1  8    60
       
   100     1  9  1039
       
   101     1 10   726
       
   102     1 11  2314
       
   103     1 12   479
       
   104     1 13   448
       
   105     1 14   479
       
   106     1 15   619
       
   107     1 16   150
       
   108     2  1   509
       
   109     2  3   126
       
   110     2  4   474
       
   111     2  5  1526
       
   112     2  6  1226
       
   113     2  7  1133
       
   114     2  8   532
       
   115     2  9  1449
       
   116     2 10  1122
       
   117     2 11  2789
       
   118     2 12   958
       
   119     2 13   941
       
   120     2 14   978
       
   121     2 15  1127
       
   122     2 16   542
       
   123     3  1   501
       
   124     3  2   126
       
   125     3  4   541
       
   126     3  5  1516
       
   127     3  6  1184
       
   128     3  7  1084
       
   129     3  8   536
       
   130     3  9  1371
       
   131     3 10  1045
       
   132     3 11  2728
       
   133     3 12   913
       
   134     3 13   904
       
   135     3 14   946
       
   136     3 15  1115
       
   137     3 16   499
       
   138     4  1   312
       
   139     4  2   474
       
   140     4  3   541
       
   141     4  5  1157
       
   142     4  6   980
       
   143     4  7   919
       
   144     4  8   271
       
   145     4  9  1333
       
   146     4 10  1029
       
   147     4 11  2553
       
   148     4 12   751
       
   149     4 13   704
       
   150     4 14   720
       
   151     4 15   783
       
   152     4 16   455
       
   153     5  1  1019
       
   154     5  2  1526
       
   155     5  3  1516
       
   156     5  4  1157
       
   157     5  6   478
       
   158     5  7   583
       
   159     5  8   996
       
   160     5  9   858
       
   161     5 10   855
       
   162     5 11  1504
       
   163     5 12   677
       
   164     5 13   651
       
   165     5 14   600
       
   166     5 15   401
       
   167     5 16  1033
       
   168     6  1   736
       
   169     6  2  1226
       
   170     6  3  1184
       
   171     6  4   980
       
   172     6  5   478
       
   173     6  7   115
       
   174     6  8   740
       
   175     6  9   470
       
   176     6 10   379
       
   177     6 11  1581
       
   178     6 12   271
       
   179     6 13   289
       
   180     6 14   261
       
   181     6 15   308
       
   182     6 16   687
       
   183     7  1   656
       
   184     7  2  1133
       
   185     7  3  1084
       
   186     7  4   919
       
   187     7  5   583
       
   188     7  6   115
       
   189     7  8   667
       
   190     7  9   455
       
   191     7 10   288
       
   192     7 11  1661
       
   193     7 12   177
       
   194     7 13   216
       
   195     7 14   207
       
   196     7 15   343
       
   197     7 16   592
       
   198     8  1    60
       
   199     8  2   532
       
   200     8  3   536
       
   201     8  4   271
       
   202     8  5   996
       
   203     8  6   740
       
   204     8  7   667
       
   205     8  9  1066
       
   206     8 10   759
       
   207     8 11  2320
       
   208     8 12   493
       
   209     8 13   454
       
   210     8 14   479
       
   211     8 15   598
       
   212     8 16   206
       
   213     9  1  1039
       
   214     9  2  1449
       
   215     9  3  1371
       
   216     9  4  1333
       
   217     9  5   858
       
   218     9  6   470
       
   219     9  7   455
       
   220     9  8  1066
       
   221     9 10   328
       
   222     9 11  1387
       
   223     9 12   591
       
   224     9 13   650
       
   225     9 14   656
       
   226     9 15   776
       
   227     9 16   933
       
   228    10  1   726
       
   229    10  2  1122
       
   230    10  3  1045
       
   231    10  4  1029
       
   232    10  5   855
       
   233    10  6   379
       
   234    10  7   288
       
   235    10  8   759
       
   236    10  9   328
       
   237    10 11  1697
       
   238    10 12   333
       
   239    10 13   400
       
   240    10 14   427
       
   241    10 15   622
       
   242    10 16   610
       
   243    11  1  2314
       
   244    11  2  2789
       
   245    11  3  2728
       
   246    11  4  2553
       
   247    11  5  1504
       
   248    11  6  1581
       
   249    11  7  1661
       
   250    11  8  2320
       
   251    11  9  1387
       
   252    11 10  1697
       
   253    11 12  1838
       
   254    11 13  1868
       
   255    11 14  1841
       
   256    11 15  1789
       
   257    11 16  2248
       
   258    12  1   479
       
   259    12  2   958
       
   260    12  3   913
       
   261    12  4   751
       
   262    12  5   677
       
   263    12  6   271
       
   264    12  7   177
       
   265    12  8   493
       
   266    12  9   591
       
   267    12 10   333
       
   268    12 11  1838
       
   269    12 13    68
       
   270    12 14   105
       
   271    12 15   336
       
   272    12 16   417
       
   273    13  1   448
       
   274    13  2   941
       
   275    13  3   904
       
   276    13  4   704
       
   277    13  5   651
       
   278    13  6   289
       
   279    13  7   216
       
   280    13  8   454
       
   281    13  9   650
       
   282    13 10   400
       
   283    13 11  1868
       
   284    13 12    68
       
   285    13 14    52
       
   286    13 15   287
       
   287    13 16   406
       
   288    14  1   479
       
   289    14  2   978
       
   290    14  3   946
       
   291    14  4   720
       
   292    14  5   600
       
   293    14  6   261
       
   294    14  7   207
       
   295    14  8   479
       
   296    14  9   656
       
   297    14 10   427
       
   298    14 11  1841
       
   299    14 12   105
       
   300    14 13    52
       
   301    14 15   237
       
   302    14 16   449
       
   303    15  1   619
       
   304    15  2  1127
       
   305    15  3  1115
       
   306    15  4   783
       
   307    15  5   401
       
   308    15  6   308
       
   309    15  7   343
       
   310    15  8   598
       
   311    15  9   776
       
   312    15 10   622
       
   313    15 11  1789
       
   314    15 12   336
       
   315    15 13   287
       
   316    15 14   237
       
   317    15 16   636
       
   318    16  1   150
       
   319    16  2   542
       
   320    16  3   499
       
   321    16  4   455
       
   322    16  5  1033
       
   323    16  6   687
       
   324    16  7   592
       
   325    16  8   206
       
   326    16  9   933
       
   327    16 10   610
       
   328    16 11  2248
       
   329    16 12   417
       
   330    16 13   406
       
   331    16 14   449
       
   332    16 15   636
       
   333 ;
       
   334 
       
   335 end;