Ce qui laisse la combinaison 11 inutilis´ee.
Le risque est alors que cette portion de code apparaisse lors d’un croisement ou d’une mutation. Ce TIPE
n’utilisera donc que le premier codage des solutions.
La seule information qui nous int´eresse dans la distribution des villes est donc la distance entre deux villes
quelconques de cette distribution. Cette information va ˆetre rassembl´ee dans une matrice dite ”d’adjacence”.
Le coefficient (i, j) de cette matrice sera la distance entre la ville iet la ville j.
2.2 Mutation
On souhaite une fonction de mutation qui g´en`ere un trajet assez ”proche” du trajet pass´e en argument. Le
cas g´en´eral pr´esent´e dans la premi`ere section ne fonctionne pas ici, en effet, si on modifie la valeur d’une case
du tableau repr´esentant un trajet, on va obtenir un nouveau trajet qui ne passera pas par toutes les villes et
qui passera deux fois par une ville.
Nous verrons trois op´erations pour conserver un trajet valable.
La premi`ere consiste `a ´echanger deux villes dans le tableau qui repr´esente le trajet. On la note mutation na¨ıve.
La seconde est d’inverser le sens d’une fraction du trajet. On la note mutation inversion.
On peut aussi translater une partie du trajet en d´ecalant le reste. C’est la mutation d´eplacement.
Nous verrons dans la section suivante que ces trois mutations ne donnent pas les mˆemes r´esultats. On peut d´ej`a
remarquer que la seconde semble donner un trajet un peu plus proche du trajet pass´e en argument.
2.3 Croisement
De la mˆeme mani`ere que pour les mutations, l’exemple g´en´erique du croisement pr´esent´e dans la section
pr´ec´edente ne fonctionne pas ici.
Si la premi`ere partie du parent 1 contient la ville i, ville iaussi pr´esente dans la seconde partie du parent 2.
On obtiendrait un trajet qui contient deux fois la ville iet donc ne contenant pas une ville que le voyageur de
commerce est cens´e visiter.
On peut effectuer une variation du croisement g´en´erique : on prend toujours la premi`ere partie du parent
1, et on compl`ete ensuite par les villes qui ne sont pas dans cette premi`ere partie, mais dans l’ordre dans lequel
elles apparaissent dans le parent 2. De cette mani`ere on conserve toute une partie du trajet du parent 1 et des
sections du trajet du parent 2.
On peut garder non pas seulement le d´ebut du parent 1, mais le d´ebut et la fin, et n’effectuer le remplacement
qu’entre deux points du trajet. On appelle cette variation un croisement bipoint.
On constate que ce n’est pas l’ordre dans lequel apparaissent les villes qui importe, mais leur position rela-
tive dans le trajet.
Les voisins d’une ville lors d’un trajet sont les donn´ees qui importent. On va donc tenter de pr´eserver un maxi-
mum ces relations de voisinage lors du croisement.
Pour cela on va ´ecrire une fonction de croisement heuristique qui va construire un trajet qui tente de r´eutiliser
au maximum les relations de voisinage que nous allons appeler arˆetes par la suite. Plus pr´ecis´ement on dira
qu’un trajet contient l’arˆete (i, j) si iest visit´ee juste apr`es jou jvisit´ee juste apr`es i.
Le proc´ed´e est le suivant :
1 On construit la liste l1des arˆetes pr´esentes dans les trajets des deux parents.
2 On d´etermine la ville qui est pr´esente dans le moins d’arˆetes.
3 Cette ville devient la ville courante vc
4 On retire les arˆetes contenant vcde la liste l1et on en fait une liste l2contenant vc.
5 On place vc`a la fin du trajet.
6 Si la liste l2est vide on prend une ville non visit´ee au hasard, celle ville devient la ville courante vcet on
revient au point 4
7 Si l2n’est pas vide, on choisit l’arˆete telle que la deuxi`eme ville soit pr´esente dans le moins d’arˆetes de l1.
Cette ville devient la ville courante et on revient au point 4
8 On s’arrˆete quand toutes les villes ont ´et´e visit´ees.
2.4 S´election
La premi`ere m´ethode de s´election est celle qui consiste `a classer les trajets par longueur croissante et `a ne
retenir que les pplus courts.
Cette s´election par classement assure que le meilleur individu de la population sera toujours conserv´e, mais
3