3.1 recuit simul´e
Pour mettre en œuvre la m´ethode du recuit simul´e sur ce probl`eme, il nous faut encore
choisir la matrice Q. Pour cela, on dira que deux tourn´ees Let L0sont voisines, s’il existe
une transposition τi,j sur [L1, .., Ln] avec 2 ≤i<j≤n, permutant Liet Lj,telle que
τi,j(L) = L0. Q(L, L0) est alors la probabilit´e uniforme sur les (n−1)(n−2)/2 voisins de L.
La relation de voisinage ´etant sym´etrique, la matrice de transition Q(L, L0) l’est aussi. De
plus, comme les transitions engendrent les permutations, tous les points de Ecommuniquent.
Impl´ementation. Une liste Lde villes sera repr´esent´ee par une matrice n×2 donnant les
coordonn´ees des villes.
1. Ecrire la fonction d=dist(L) qui calcule la distance parcourue le long de la tourn´ee
L.
2. Ecrire une fonction LL=transp(L,i,j) qui prend en argument une liste de longueur
n, deux entiers i, j tels que 2 ≤i<j≤net retourne la liste voisine τ(i,j)(L).
3. Ecrire une fonction LL= rvois-ville(L) qui prend une liste Len argument et re-
tourne al´eatoirement une liste voisine de Lau sens pr´ec´edent, de telle sorte que
rvois-ville(L) simule une variable de loi uniforme sur l’ensemble des voisins de L.
4. Ecrire une fonction [Lmin,LL,eLL]=recuit(voisin,energie,T,L0,P), qui prend
comme arguments
—voisin, chaˆıne de caract`eres contenant le nom du g´en´erateur al´eatoires de voisins.
—energie, chaˆıne de caract`eres contenant le nom de la fonction `a minimiser ;
—T, suite des temp´eratures, vecteur (N-1)x1 ;
—L0, ´etat initial de la chaˆıne ;
—P, param`etres ´eventuels de la fonction energie ;
et rend
—Lmin, ´etat qui minimise la fonction energie parmi ceux visit´es par la chaˆıne.
—LL, ´etat final de la chaˆıne.
—eLL, suite des ´energies (vecteur Nx1) ;
5. Mettre en œuvre le recuit simul´e pour T(n) = e−n,T(n) = klog(n). Le tester d’abord
sur de petites valeurs de npour lesquelles on pourra calculer le miminum.
3.2 Algorithme g´en´etique.
Ici, on va cherche `a maximiser −V. Une population est constitu´ee par mtourn´ees. Une
tourn´ee va ˆetre ici repr´esent´ee par une ligne d’entiers entre 2 et nqui repr´esentent l’ordre
dans lequel on effectue la tourn´ee. Ainsi pour n= 3, la ligne (3,2) signifie qu’on effectue la
tournee (ville 1, ville 3, ville 2, ville 1). On aura pris soin au pr´ealable de d´efinir un tableau
Villes de taille 2 ×ncontenant les abscisses et les ordonn´ees des diff´erentes villes.
Une population sera repr´esent´ee par un tableau m×(n−1) d’entiers entre 2 et nqui donnent
sur chaque ligne une tourn´ee.
Pour l’´etape de mutation, on va choisir pour Qla matrice utilis´ee pour le recuit qui consiste
`a ´echanger deux villes dans une tourn´ee.
On devra ´ecrire :
— une fonction d=dist(pop,Villes), qui pour chaque tourn´ee de la population pop,
calcule la distance parcourue lors de la tourn´ee. dest donc un vecteur colonne de
dimension m, qui contient les distances associ´ees `a chaque tourn´ee de pop.
5