教你如何AMPL自动求解tsp问题
1,本章经过很多粉丝反应所想要解决的问题,和对需求的情况。“千树V”决定做一个不一样的AMPL写法,处理tsp的问题。
2,大家对tsp这个问题了解的都知道基本概念,我的文章里面也有对普通的TSP写法,本章来跟新一下。
废话不多说进入代码环节:
param N:=25;
param locx{1..N}:=Uniform01();
param locy{1..N}:=Uniform01();
var m{1..N};
param dist{1..N,1..N};
var x{1..N,1..N} binary;
for{i in 1..N,j in 1..N: i<>j}
let dist[i,j]:=sqrt((locx[i]-locx[j])^2+(locy[i]-locy[j])^2);
minimize obj:sum{ i in 1..N,j in 1..N: i<>j} dist[i,j]* x[i,j];
#进入城市
C1{k in 1..N}: sum{i in 1..N: i <> k} x[i,k] =1;
#离开城市
C2{k in 1..N}: sum{i in 1..N: i <> k} x[k,i] =1;
#回路限制
C3{i in 1..N, j in 1..N: i>1 and j>1 and i <> j}: m[i]-m[j]+N*x[i,j]<=N-1;
#限制回路的范围,不排除掉TSP问题的最优解
C4{i in 1..N: i>1}: m[i]<=N-2;
option solver cplex;
solv