Originally posted by: csfab
Hello, Alex, how are you?
So, I had already seen the manual but could not get it to work:
Here's the template I'm working on:
//Parâmetros
int n = 100;
range cidades = 1..n;
float x[cidades];
float y[cidades];
float distancias[cidades][cidades];
1) I want to sort a distance from the distance matrix
float destino[cidades][cidades] = rand(distancias);
//Pré-processamento
execute DADOS{
function calcdistancia(cidadea,cidadeb){
return Opl.sqrt(Opl.pow(x[i]-x[j], 2)+ Opl.pow(y[i]-y[j], 2));
}
for (var c in cidades){
x[c]=Opl.rand(2000);
y[c]=Opl.rand(2000);
writeln ("cidade" + ' '+c+": ("+x[c]+','+y[c]+")");}
for (var i in cidades)
for (var j in cidades)
if (i!=j){
distancias[i][j]=calcdistancia(i,j);
if (j>i){
writeln ("A distância entre a cidade"+' '+i+' '+"e a cidade"+ ' ',j+ ' '+ "é de "+' '+distancias[i][j]+ ' '+"km");
}
}
}
//Variáveis de decisão
dvar boolean rota[cidades][cidades];
dvar float+ u[cidades];
//Expressões
dexpr float caminho = sum(i in cidades, j in cidades: i!=j) distancias[i][j]*rota[i][j];
//Função objetivo
minimize
caminho;
//Restrições
subject to{
flowing:
forall (j in cidades)
sum(i in cidades: i!=j) rota[i][j]==1;
flowout:
forall (i in cidades)
sum(j in cidades: i!=j) rota[i][j]==1;
ESubrotas:
forall (i in cidades, j in cidades: i>1 && j>1 && i!=j)
u[i]-u[j] + n*rota[i][j] <= n-1;
}
#DecisionOptimization#OPLusingCPLEXOptimizer