Je suis en train de créer une heuristique de recherche locale pour résoudre le TSP, et ce processus semble échouer. J'ai généré un cycle hamiltonien aléatoire et je l'ai stocké dans sortant [] avec sortant [i] indiquant le sommet duquel pointe l'un des bords provenant de i. distances [a] [b] désigne la distance du sommet a au sommet b. Cependant, chaque fois que je lance ce code, au lieu d'optimiser le cycle hamiltonien que je passe en sortant, l'algorithme crée simplement le nouveau cycle 0-> numcities-2-> 1-> numcities-1. Il devrait simplement changer les sommets sortants à plusieurs reprises s'il peut s'améliorer sur la distance d'un sommet à son sommet sortant. Je néglige probablement quelque chose de mineur, mais je ne peux tout simplement pas comprendre ce que j'ai fait de mal. Je vais courir cela plusieurs fois en passant, et c'est ce à quoi le booléen changé est utilisé.VRP recherche locale heuristique
for(int i = 0; i < numcities; i++)
{
for(int j = i+1; j < numcities; j++)
{
if(distances[i][outgoing[i]] + distances[j][outgoing[j]] > distances[i][outgoing[j]] + distances[j][outgoing[i]] && i != outgoing[j] && j != outgoing[i])
{
changed = true;
int temp = outgoing[j];
outgoing[j] = outgoing[i];
outgoing[i] = temp;
}
}
}
Il semble que mon code diviserait la moitié graphique du temps, donc je besoin pour exécuter DFS pour faire en sorte que le graphique est toujours connecté. – nosyarg