Vous êtes sur la page 1sur 10

RAPPORT SUR LES ALGORITHMES UTILISEE DANS LE PROBLEME DU VOYAGEUR

DE COMMERCE

CHERGUI Oussama,+ CHERGUI Meriem,+ MANSOURKHOUDJA Asmaa, Yahia


Farès Université de Medea, Algerie
Introduction :

Le problème du voyageur de commerce (PVC) a été évoqué pour la première fois en 1930

par le mathématicien viennois Karl Menger et il a intrigué bon nombre de chercheurs depuis ce
temps : sans doute parce qu'il est facile à énoncer mais redoutable à résoudre. Ce problème, en
apparence anodin et insignifiant, cache de nombreuses finesses et difficultés qui nous
emmèneront dans les développements récents de la théorie des algorithmes.

Beaucoup de méthodes atteignant ce but de PVC ont été développées (dont certaines assez
récemment) : méthode des plus proches voisins, de Lin-Kernighan, de l'élastique, du recuit
simulé, les réseaux de neurones auto-adaptatifs, algorithmes génétiques, tabu search, colonie
de fourmis. Certaines méthodes sont très simples, d'autres très complexes. Ce qui est sûr, c'est
que ce problème stimule la créativité !

Parmi ces nombreuses méthodes, 3 nous intéressent : l’algorithme glouton, recherche tabou et
génétiques.

Le problème du voyageur rentre dans la catégorie des problèmes NP -complets, à savoir que sa
complexité n’est pas polynomiale. Durant ce rapport, on étudiéra quelque algorithme pour
savoir le meilleur algorithme qui peut résoudre ce probleme.

Solution de PVC:

On doit établir une démarche générale permettant de résoudre le problème pour n’importe quel
ensemble de villes : cette démarche s’appelle un algorithme. Les algorithmes pour résoudre le
problème du voyageur de commerce peuvent être répartis en deux classes :

- les algorithmes déterministes qui trouvent la solution optimale.

- les algorithmes d'approximation qui fournissent une solution presque optimale. Elles
permettent d’obtenir en un temps rapide de bonnes solutions, pas nécessairement optimales
mais de qualité suffisante.

Algorithme glouton (meilleure insertion) :

1. Principe : L'algorithme glouton (l’algorithme de la meilleure insertion) est une des méthodes
classiques pour résoudre le problème du voyageur de commerce. Il s'agit de construire le
parcours ville par ville, en insérant dans le parcours la ville qui le rallonge le moins.

2. Description : L’idée est la suivante : le parcours du voyageur de commerce est construit pas
à pas en y insérant de nouvelles villes. À un instant donné de l’algorithme, un certain cycle de
villes a été construit. L’étape suivante consiste à insérer une ville supplémentaire dans le cycle
de manière optimale, c'est-à-dire qu’elle augmente au minimum la longueur totale du cycle. À
l’étape initiale de l’algorithme, le parcours de voyageur est composé de deux villes, la ville de
départ et celle qui en est la plus proche. L’algorithme se termine lorsque toutes les villes à
visiter ont été insérées. Cependant, même si l’insertion d’une ville dans le cycle est optimale et
rapide à calculer, la solution finale n’est pas nécessairement optimale, mais elle est obtenue
rapidement.

3.Réalisation :

Nous présenterons dans cette partie les points clefs de programme exécuté par Python :

1.Importer les paquets nécessaires

2.Initialiser les villes et leur attribuer des valeurs

3.Calculer la distance entre deux villes

4.Fonction pour découvrir la ville la plus proche

5.On commence par la ville numéro un, on choisit la ville la plus proche et nous répétons la
même chose avec cette nouvelle ville jusqu'à la fin du parcours. Après cela, nous
commençons avec une ville différente et répétons le même processus. Enfin, nous choisissons
la route avec la distance minimale.
6.On exécute l'algorithme

Le résultat :

le temps d'exécution :

L’ algorithmes génétiques :
1.Principe : Les algorithmes génétiques forment une famille très intéressante d’algorithmes
d’optimisation, initiée par Charles Darwin au XIXème siècle. Le principe des algorithmes
génétiques s’inspire directement des lois de la sélection naturelle. On l’utilise dans la
résolution de problèmes complexes, nécessitant des temps de calcul élevés. Les algorithmes
génétiques sont des algorithmes d’optimisation s’appuyant sur des techniques dérivées de
la génétique et des mécanismes d’évolution de la nature : croisements, mutations, sélections,
etc... Ils appartiennent à la classe des algorithmes évolutionnaires. L’idée d’un algorithme
génétique est tirée de la théorie darwinienne de l'évolution. Chaque groupe d’individus
(animaux, espèces végétales...), appelé aussi population, donne lieu à une génération
suivante par reproduction sexuelle. Cette génération consiste à croiser les individus entre
eux pour donner des descendants possédant les caractères des deux parents. En plus de ce
croisement, des mutations de caractères interviennent aléatoirement dans la génération de
la population suivante. Puis, cette nouvelle population subit une sélection, métaphore de la
sélection naturelle : seuls les individus les mieux adaptés à l’environnement survivent.
Enfin, à son tour, cette population donnera lieu par le même processus à une nouvelle
population, qui sera encore plus performante dans son environnement. Pour développer un
algorithme génétique, les individus sont des solutions, la sélection se fait grâce à leur qualité
(évaluée à travers la fonction objectif), les croisements entre deux solutions sont faits à
l’aide d’opérateurs de croisement, etc.

2.Description d’AG :

Les étapes:

1. Tout d’abord, chaque individu est évalué. Pour cela, on calcule la valeur de la fonction
objective, c’est-à-dire la longueur du cycle parcouru par le voyageur de commerce. Puis,
une étape de sélection est appliquée. Cette étape permet d’éliminer les moins bons individus
et de garder uniquement les meilleurs en fonction de leur évaluation. Il existe plusieurs
méthodes de sélection. Une sélection par rang ne fait pas intervenir le hasard, contrairement
à la roulette, car elle choisit les n meilleurs individus de la population. Chaque individu a
ainsi une probabilité de sélection dépendant de son évaluation, avec une plus forte
probabilité pour les meilleurs individus.

2. L’étape suivante consiste à croiser les individus précédemment sélectionnés pour obtenir
une nouvelle population. Deux parents sont donc choisis pour appliquer un opérateur de
croisement afin d’obtenir un descendant (nouvel individu). Il existe de nombreuses
techniques de croisement ; dans le cas présent, nous utiliserons le « crossover en un point
». Cet opérateur consiste à recopier une partie du parent 1 et une partie du parent 2 pour
obtenir un nouvel individu. Le point de séparation des parents est appelé point de
croisement. Il faut cependant faire attention à ne pas visiter plusieurs fois la même ville (on
ne recopie pas les villes déjà visitées), et à ne pas oublier de ville (on rajoute à la fin les
villes non prises en compte).

Pour mieux comprendre le croissement :

1. On choisit aléatoirement deux points de découpe.


2. On interverti, entre les deux parcours, les parties qui se trouvent entre ces deux points.

3. On supprime, à l’extérieur des points de coupe, les villes qui sont déjà placées entre les
points de coupe.

Enfin, avant de revenir à la première étape, un procédé de mutation est utilisé pour
diversifier les solutions au fur et à mesure des générations. Cette mutation consiste à
modifier aléatoirement une petite partie d’un caractère dans certains individus de la nouvelle
génération. Cette étape est effectuée avec une très faible probabilité, et consiste par exemple
à échanger deux villes consécutives dans un individu.

3.Réalisation :

1.calculer la distance totale du route

2.nous donnons une valeur ‘fitness’ à chaque solution, qui est l'inverse de la distance de la
route. Et comme nous voulons minimiser la distance, une valeur de fitness supérieure signifie
une meilleure solution.

3.créer une population de solutions aléatoires, et nous classons les solutions en fonction de
leur forme (fitness)

4.lors de la phase de sélection, nous utilisons une combinaison d'élitisme (ligne 7) pour nous
assurer que les meilleures solutions sont choisies, et de la méthode de la roulette (pour ne pas
nous coincer dans une solution locale) afin de donner une chance à d'autres populations. Les
meilleures solutions ont la plus grande probabilité d'être choisies, mais il y a encore une
chance pour les pires solutions comme nous le voyons à la ligne 12.
5.nous créons une nouvelle génération à l'aide de croisement, la méthode que nous avons
utilisée ici est ‘simple enjambement’, nous choisissons un seul point aléatoire (ligne 5) et
divisons les chromosomes pour créer un enfant

6.La mutation consiste à altérer un gène dans un chromosome selon un facteur de mutation.
Nous générons une probabilité de facteur de mutation avec une valeur faible et appliquons la
mutation à l'individu uniquement si la probabilité réussit

7.on exécute l'algorithme


Le résultat :

le temps d'exécution

L’algorithme Hill Climbing :

Contrairement aux autres algorithmes vus précédemment, le HILL CLIMBING génère dès le
départ une solution possible du problème posé. Bien sur; celle-ci a peu de chances d'être la
bonne puisque cet algorithme permet des conflits entre les affectations de départ.

Une fois cette solution implantée, le HILL CLIMBING "répare" donc au fur et à mesure les
affectations pour qu'il y ait le moins de conflits (minimisation des contraintes non satisfaites)
jusqu'à disparition de ceux-ci.
Voici la méthode de "réparation", l'algorithme sélectionne une variable x. Il regarde si
la valeur de x peut être remplacée par une autre valeur de D(x). Cette nouvelle valeur doit
provoquer moins de conflits que la précédente. Ensuite, l'algorithme recommence avec une
autre variable. Il continue ses minimisations jusqu'à trouver une bonne solution.

Nous avons plusieurs possibilités dans le choix de la solution de départ. Nous pouvons
affecter chaque variable x en prenant aléatoirement une valeur dans D(x). Autre choix,
établissons une solution facile à obtenir respectant quelques contraintes.

De même, le choix de la variable dans la minimisation nous laisse quelques possibilités. Nous
pouvons choisir aléatoirement l'ordre (première variable puis seconde etc. ...). Un autre choix
s'offre à nous, prendre la variable qui provoque le plus de conflits pour la minimiser en
premier. Nous verrons un exemple d'utilisation dans la 3eme partie.

En effet, au cours d'une minimisation, nous pouvons obtenir la situation suivante. Pour une
variable x, nous avons un nombre de conflits n(x). Mais pour toute autre valeur de D(x), le
nombre n(x) est plus important. Lors de la minimisation des autres variables, le nombre n(x)
ne diminue pas. L'algorithme est bloqué. Il ne trouvera pas la solution. C'est ce qu'on appelle
un minimum local de conflits. L'ensemble des réparations possibles ne permet pas de réduire
les conflits.

La raison de ces impasses vient du choix de la solution de départ qui n'est pas forcément la
plus adaptée pour ce type d'algorithme. Le choix de la solution de départ est donc très
importante.

Réalisation :

1.on choisit deux villes aléatoires pour les échanger

2.Dans notre version de ‘Hill Climbing’ l'algorithme commence par une solution aléatoire
(ligne 2) et calcule sa distance, Dans la boucle (ligne 7), on génère des solutions voisines. si
une meilleure solution existe, nous la choisissons et répétons le processus jusqu'à ce que le
nombre d'itérations dépasse 500. S'il n'y a pas de meilleure solution, nous cassons la boucle et
choisissons cette solution comme résultat
Le résultat :

Avec le temps d'exécution

Conclusion :

Pour conclure, ce projet a constitué une étape intéressante dans notre apprentissage de la
complexité des algorithmes. Ce travail nous a permis de faire une étude comparatives des
plusieurs algorithmes on a trouvé que l'algorithme glouton est le plus rapide mais sa solution
est la pire de loin.

Entre l'algorithme ‘HILL CLIMBING’ et l'algorithme génétique, nous remarquons que


l'algorithme génétique est moins rapide mais offre une meilleure solution.
Globalement, nous pouvons dire que l’Algorithme génétique est la meilleure approche pour
résoudre le problème du Voyageur du Commerce parce qu’elle trouve la meilleur solution
dans un délai raisonnable.Dans ce projet, nous avons eu la possibilité de dégager la solution
optimale ainsi que d’appliquer notre algorithme élu pour PVC.