PROGRAMMATION EN LANGAGE C
L1 Année 2007 - 2008
PROGRAMMATION EN LANGAGE C
L1 Année 2007 - 2008
SOMMAIRE
Description du projet ......................................................................................................................... 1
Applications ..................................................................................................................................... 1
Solution approchée .......................................................................................................................... 2
Algorithmes génétiques ..................................................................................................................... 2
Grands principes et définitions ........................................................................................................ 2
Performances et applications ........................................................................................................... 2
Et concrètement ? ............................................................................................................................ 3
Carte ............................................................................................................................................ 3
Individus ...................................................................................................................................... 3
Adaptation .................................................................................................................................... 4
Initialisation (« génèse ») ............................................................................................................ 4
Grandes étapes d'une itération ......................................................................................................... 5
Arrêt de l'algorithme .................................................................................................................... 5
Sélection .......................................................................................................................................... 5
Croisement ....................................................................................................................................... 6
Mutation ........................................................................................................................................... 7
Travail demandé ................................................................................................................................ 7
Programme ....................................................................................................................................... 7
Paramètres ........................................................................................................................................ 8
Rapport ............................................................................................................................................ 8
Contraintes techniques ...................................................................................................................... 9
Soutenance .......................................................................................................................................... 9
Dès maintenant ! .............................................................................................................................. 9
Le Voyageur de Commerce L1 2007/2008 1
PROGRAMMATION EN LANGAGE C
L1 Année 2007 - 2008
Description du projet
Un voyageur de commerce doit visiter un certain nombre de villes (n, pour ne pas se
mouiller). Il veut le faire en parcourant le moins de distance possible et sans repasser deux fois par
la même ville, sauf la première (il aimerait bien rentrer chez lui à la fin!). Il faut donc trouver le bon
ordre de visite de ces villes.
Ce problème apparemment simple est en fait très difficile à résoudre car le nombre de
possibilités est
2)!1( n
, donc croît très vite avec le nombre de villes. On parle d'explosion
combinatoire. Voici un petit aperçu de cette explosion (en comptant une micro-seconde pour l'étude
d'une possibilité) :
n
Nombre de possibilités
Temps de calcul
5
12
Micro-seconde
10
181440
Dixième de seconde
15
43 milliards
Dizaine d'heures
20
60.1015
Milliers d'années
25
310.1021
Milliards d'années
Notre problème : parmi autant de possibilités, comment trouver la meilleure ?
Applications
Dans le cas général, on ne considère pas une simple distance géographique (éloignement
entre deux villes) mais un coût qui peut refléter la difficulté ou le prix de la liaison entre deux
points. Ce problème trouve des applications concrètes dans l'industrie, dans la logistique bien sur
(approvisionnements successifs de différents clients avec le même camion) mais aussi, par
exemple, dans la fabrication des cartes électroniques complexes (optimiser les mouvements des
perceuses).
Le Voyageur de Commerce L1 2007/2008 2
PROGRAMMATION EN LANGAGE C
L1 Année 2007 - 2008
Solution approchée
Pour des problèmes de ce type, il faut bien souvent abandonner l'idée d'avoir la « meilleure
solution possible » et se contenter d'une « très bonne solution ». Dans ce projet, à partir d'un fichier
contenant les coordonnées d'une rie de villes, vous devrez calculer une solution acceptable à
l'aide d'un algorithme un peu particulier : un algorithme génétique.
Algorithmes génétiques
Grands principes et définitions
Les algorithmes génétiques sont inspirés de la théorie de l'évolution et des principes de la
génétique. L'idée est de partir de différentes solutions possibles d'un problème et de les améliorer
en les “croisant” et en en faisant “muter”. Régulièrement, les individus sont “évalués” et certains
sont éliminés. On retrouve ainsi les concepts :
d'individu : une solution possible du problème ;
de population : tous les individus pris en compte simultanément ;
de reproduction : croisement de deux individus pour en produire de nouveaux ;
de mutation : modification aléatoire d'un individu ;
d'adaptation à l'environnement : évaluation d'un individu par rapport à l'objectif ;
de sélection naturelle : élimination aléatoire de certains individus (moins l'individu est
adapté, plus il a de chances d'être éliminé).
Performances et applications
Tout comme l'évolution naturelle, ce type d'algorithme laisse une large place au hasard.
Cette technique est étonnamment efficace. Elle permet de trouver rapidement de très bonnes
solutions à des problèmes réputés difficiles, comme le voyageur de commerce. Par contre, il n'y a
pas moyen de savoir si notre meilleure solution est la meilleure solution... mais on s'en passera !
Le Voyageur de Commerce L1 2007/2008 3
PROGRAMMATION EN LANGAGE C
L1 Année 2007 - 2008
Les algorithmes génétiques sont couramment utilisés dans l'industrie pour traiter des
problèmes trop difficiles à résoudre par les méthodes traditionnelles. Ainsi, Dassault les a utilisés
pour concevoir des ailes d'avions de combat dont l'écho radar est le plus faible possible : plus l'écho
est faible, et plus l'avion est « furtif » !
Et concrètement ?
Carte
Un fichier « carte » sera le point de départ du programme. Ce fichier texte contient la liste
des villes avec leur nom et leurs coordonnées. La première ligne du fichier contient juste un entier :
le nombre de villes du fichier. Ensuite, chaque ligne décrit une ville avec trois informations
séparées par des séries de tabulations (caractère '\t') : tout d'abord le nom (au plus 20
caractères), puis deux réels, l'abscisse et l'ordonnée.
Individus
Un algorithme génétique manipule des individus, qui sont des solutions possibles du
problème à résoudre. Dans notre cas, un individu est un ordre possible pour visiter les n villes. Si
on attribue à chaque ville un numéro (de 0 à n-1 par exemple), un individu est alors réduit à un
tableau de n entiers.
Vous aurez un ensemble d'individus à gérer simultanément (votre population), il s'agira
donc d'un ensemble de tableaux de même taille. Cette population sera un tableau à deux
dimensions. Remarque : le nombre de villes est variable suivant les exécutions (dépend du fichier
carte), et le nombre d'individus dans la population dépend du paramétrage de l'algorithme, vous
aurez donc à faire des allocations dynamiques.
1 / 11 100%