set Cities ordered;@\Vlabel{line:back:ampl:parstart}@ set Paths := {i in Cities, j in Cities: ord(i) < ord(j)}; param cost {Paths} >= 0;@\Vlabel{line:back:ampl:parend}@ var Take {Paths} binary;@\Vlabel{line:back:ampl:var}@ param n := card {Cities};@\Vlabel{line:back:ampl:compstart}@ set SubSets := 0 .. (2**n - 1); set PowerSet {k in SubSets} := {i in Cities: (k div 2**(ord(i)-1)) mod 2 = 1};@\Vlabel{line:back:ampl:compend}@ minimize TotalCost: sum {(i,j) in Paths} cost[i,j] * Take[i,j];@\Vlabel{line:back:ampl:goal}@ subj to Tour {i in S}:@\Vlabel{line:back:ampl:con1}@ sum {(i,j) in Paths} Take[i,j] + sum {(j,i) in Paths} Take[j,i] = 2; subj to SubtourElimation {k in SubSet diff {0,2**n-1}}:@\Vlabel{line:back:ampl:con2}@ sum {i in PowerSet[k], j in Cities diff PowerSet[k]: (i,j) in Paths} X[i,j] + sum {i in PowerSet[k], j in Cities diff PowerSet[k]: (j,i) in Paths} X[j,i] >= 2;