can anyone help me remove subtour tsp? Topic is solved

Problems with modeling
Post Reply
nazive
User
User
Posts: 2
Joined: 4 years ago

can anyone help me remove subtour tsp?

Post by nazive »

hello, i'm trying to do tsp with 9 node but GAMS always generate 2 tour, like i1-i3-i8-i4-i2-i5-i1 and i9-i7-i6-i9.
what should i add to prevent this?
i'm very very beginner at this.

Code: Select all

set i cities /i1,i2,i3,i4,i5,i6,i7,i8,i9/;
alias(i,j);
table d(i,j) distance from i to j
         i1         i2         i3         i4         i5         i6         i7         i8         i9
i1       0          246        176        286        198        184        264        246        182
i2       246        0          175        156        148        236        263        165        234
i3       176        175        0          196        153        137        190        147        136
i4       286        156        196        0          200        251        238        155        239
i5       198        148        153        200        0          211        264        180        213
i6       184        236        137        251        211        0          181        197        102
i7       264        263        190        238        264        181        0          199        132
i8       246        165        147        155        180        197        199        0          184
i9       182        234        136        239        213        102        132        184        0
   ;
variable Tdist total distance;
binary variable x(i,j) 1 iff go from i to j;
equations in(i) going in city i once
          out(i) leaving city i once
          obj total distance
          cl subtour elimination contraint
          c2 subtour elimination contraint
          c3 subtour elimination contraint
          c4 subtour elimination contraint
          c5 subtour elimination contraint
          c6 subtour elimination contraint
          c7 subtour elimination contraint
          c8 subtour elimination contraint
          c9 subtour elimination contraint
          c10 subtour elimination contraint
          c11 subtour elimination contraint
          c12 subtour elimination contraint
          c13 subtour elimination contraint
          c14 subtour elimination contraint
          c15 subtour elimination contraint
          c16 subtour elimination contraint
          c17 subtour elimination contraint
          c18 subtour elimination contraint
          c19 subtour elimination contraint
          c20 subtour elimination contraint
          c2l subtour elimination contraint
          c22 subtour elimination contraint
          c23 subtour elimination contraint
          c24 subtour elimination contraint
          c25 subtour elimination contraint
          c26 subtour elimination contraint
          c27 subtour elimination contraint
          c28 subtour elimination contraint
          c29 subtour elimination contraint
          c30 subtour elimination contraint
          c3l subtour elimination contraint
          c32 subtour elimination contraint
          c33 subtour elimination contraint
          c34 subtour elimination contraint
          c35 subtour elimination contraint
          c36 subtour elimination contraint ;
in(i)..   sum(j, x(j,i)) =e= 1;
out(i)..  sum(j, x(i,j)) =e= 1;
obj..     sum((i,j),d(i,j)*x(i,j))=e= Tdist;
cl..  x('i1','i2') + x('i2','i1') =l= 1;
c2..  x('i1','i3') + x('i3','i1') =l= 1;
c3..  x('i1','i4') + x('i4','i1') =l= 1;
c4..  x('i1','i5') + x('i5','i1') =l= 1;
c5..  x('i1','i6') + x('i6','i1') =l= 1;
c6..  x('i1','i7') + x('i7','i1') =l= 1;
c7..  x('i1','i8') + x('i8','i1') =l= 1;
c8..  x('i1','i9') + x('i9','i1') =l= 1;
c9..  x('i2','i3') + x('i3','i2') =l= 1;
c10.. x('i2','i4') + x('i4','i2') =l= 1;
c11.. x('i2','i5') + x('i5','i2') =l= 1;
c12.. x('i2','i6') + x('i6','i2') =l= 1;
c13.. x('i2','i7') + x('i7','i2') =l= 1;
c14.. x('i2','i8') + x('i8','i2') =l= 1;
c15.. x('i2','i9') + x('i9','i2') =l= 1;
c16.. x('i3','i4') + x('i4','i3') =l= 1;
c17.. x('i3','i5') + x('i5','i3') =l= 1;
c18.. x('i3','i6') + x('i6','i3') =l= 1;
c19.. x('i3','i7') + x('i7','i3') =l= 1;
c20.. x('i3','i8') + x('i8','i3') =l= 1;
c2l.. x('i3','i9') + x('i9','i3') =l= 1;
c22.. x('i4','i5') + x('i5','i4') =l= 1;
c23.. x('i4','i6') + x('i6','i4') =l= 1;
c24.. x('i4','i7') + x('i7','i4') =l= 1;
c25.. x('i4','i8') + x('i8','i4') =l= 1;
c26.. x('i4','i9') + x('i9','i4') =l= 1;
c27.. x('i5','i6') + x('i6','i5') =l= 1;
c28.. x('i5','i7') + x('i7','i5') =l= 1;
c29.. x('i5','i8') + x('i8','i5') =l= 1;
c30.. x('i5','i9') + x('i9','i5') =l= 1;
c3l.. x('i6','i7') + x('i7','i6') =l= 1;
c32.. x('i6','i8') + x('i8','i6') =l= 1;
c33.. x('i6','i9') + x('i9','i6') =l= 1;
c34.. x('i7','i8') + x('i8','i7') =l= 1;
c35.. x('i7','i9') + x('i9','i7') =l= 1;
c36.. x('i8','i9') + x('i9','i8') =l= 1;
x.fx(i,i) = 0;
model tsp /all/;
solve tsp using rminlp min Tdist;
display x.l,Tdist.l;
User avatar
bussieck
Moderator
Moderator
Posts: 1038
Joined: 7 years ago

Re: can anyone help me remove subtour tsp?

Post by bussieck »

Check out the TSP examples in the GAMS Model Library. Go to https://www.gams.com/latest/gamslib_ml/ ... ml#gamslib and filter for "tsp".

-Michael
nazive
User
User
Posts: 2
Joined: 4 years ago

Re: can anyone help me remove subtour tsp?

Post by nazive »

bussieck wrote: 4 years ago Check out the TSP examples in the GAMS Model Library. Go to https://www.gams.com/latest/gamslib_ml/ ... ml#gamslib and filter for "tsp".

-Michael
thank you very much!!
i found the solution with tsp2. just copy paste all of it and change data.
Post Reply