Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ALGORITHME GÉNÉTIQUE: PROBLÈME DU VOYAGEUR


Information sur la source

Catégorie :Divers Niveau : Débutant Date de création : 22/04/2005 Vu / téléchargé: 8 471 / 1 080

Note :
8,5 / 10 - par 2 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Ce code montre comment fonctionne un algorithme génétique avec un problème: le problème du voyageur. Ce dernier doit passer dans n villes en parcourant la plus petite distance possible. Un algorithme génétique permet de résoudre ce problème (surtout quand il y a beaucoup de villes) et de trouver le chemin idéal (il y a n! possibilités).
 

Conclusion

Pour 10 villes, le programme trouve le meilleur chemin en quelques dizaines d'itérations.
pour 100 villes, il faut compter quelques milliers d'itérations et en général il continue de trouver une meilleures solution après si on fait encore plus d'itérations (on arrive pas tout à fait à la solution idéale).
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de MAURICIO le 22/04/2005 15:29:43

Excelente démonstration !!!
Bon, j' ai pas analysé le code en detail mais je comprends mieux pourquoi ont a pas 2 fois le même résultat.
Le fait de garder les morceaux les plus cours n' est pas forcement une bonne idée parce que ça va provoquer de longs  déplacements pour les villes restantes.
Je pense qu' un systeme de localisation des villes les plus proches (dans un rayon autour d' une ville) serait plus judicieux en testant à partir d' une ville, les 2 prochaines etapes avec la distance la plus courte.
Bref, ça rejoins ce que fait cette méthode mais elle est trop aleatoire à mon goût.
Bravo en tout cas. 10/10

PS: mets Button1.Enabled à false puis à true dans Button2Click!!!

signaler à un administrateur
Commentaire de Gimli le 23/04/2005 08:24:45

salut,
d'abord merci; ensuite il faut savoir qu'il existe d'autres méthodes pour chaque étape de l'algorithme génétique qui rendent un peu moins aléatoire (les mutations...). Cependant le hasard est quand même à la base des évolutions génétiques.
Enfin le problème est que cette méthode n'est pas systématique (pour 1 grand nombre de villes) et qu'il garde effectivement certains morceaux qui ne sont pas forcement les meilleurs.
Il parait qu'on peut faire la même chose de manière systématique avec la théorie des graphes...
@+

signaler à un administrateur
Commentaire de ffert le 24/04/2005 15:05:08

Salut,
Bon boulot concernant l'approche génétique...  Mais à mon avis dans ce cas là, un Algo génétique n'est pas la meilleur solution pour trouver le plus cours chemin (dans le cas d'un contexte systèmatique). Avec un algo du plus court chemin c'est n-1 itérations (si mes souvenirs sont bon) et avec toujours le même résultat qu'il y ait 10 ou 1000 villes !!! ;)
des algos tels que Floyd ou Disjktra sont trés performants !!!

Si les graphes (et bien d'autres choses) vous interresses, rendez-vous sur mon site : http://ffert.free.fr/ Rubrique "cours" puis "cours de recherche opérationnelle"

Bonne lecture...

signaler à un administrateur
Commentaire de DExM le 24/04/2005 16:15:41

Salut
pour le problème du voyageur de commerce, avec n villes, un algorithme naif (qui teste toutes les solutions) demanderait (n-1)!/2 itérations, se qui est énorme. Les algorithmes génétiques permettent de trouver rapidement une bonne solution.
a+

signaler à un administrateur
Commentaire de Gimli le 24/04/2005 18:44:41

salut,
j'ai regardé les possibilites de la théorie des graphes (qui sont vraiment énormes) et on peut résoudre ce problème de manière systématique mais étant donné que dans mon cas il s'agirait d'1 graphe complet (tous les points sont connectés entre eux), je me demande si ca ne serait pas 1 peu long, (mais c'est sur ces algos sont tres performants).
sinon une petite amélioration: remplacer Nbmutations := 1 par NbMutation := random(2); car le nombre de mutations etait trop élevé pour un nombre de ville < 100.
@+ et merci

signaler à un administrateur
Commentaire de sim51 le 20/05/2005 22:44:17

Salut grimli,
J'ai un peu regardé ton code et surtout quel était ta méthode d'algo génétique.
Tu suis bien la méthode, cependant ton principe de sélection des individus et ton cross-over sont un peu à améliorer...

En effet, pour le cross-over, le principe est de garder les caractéristiques des parents, or toi tu gardes qu'une partie d'un seul parent, donc une seule caractéristique, et ensuite tu complète l'enfant. D'où le principe n'est pas 100% respecté.

Deuxièmement, lors de la sélection des individus pour la population suivante, on ne doit pas garder que les meilleurs individus, sinon il y a une dégénérescense de la population. Et oui cela peut paraitre bizard, mais pour faire de bonne solution il en faut aussi des mauvaises lors du cross-over. D'où il existe la méthode de la roulette pour le choix des individus lors de la sélection.


Voilà pour les remarques, et oui pour s'améliorer il faut bien qq remarque lol. Allez bon courage.

signaler à un administrateur
Commentaire de Gimli le 21/05/2005 09:30:02

salut, merci de tes remarques, mais j'ai moi aussi quelques commentaires à faire:
je ne vois pas comment dans un algo de ce type (avec les permutations), on peut garder les parties de chaque parent. mais à mon avis ca doit bcp compliquer le code.

pour la selection, j'utilise la méthode de la roulette mais en classant les chromosomes, car la méthode de la roulette (si on parle bien de la meme) a tendance, dans les cas extremes, à eliminer les moins bons. mais peut etre parlait-tu d'1 equiprobabilite.
la methode que j'utilise est la suivante:
sur 4 chromosomes, la probabilité que le meilleur soit selectionné est de 4/10, le 2e de 3/10, le 3e de 2/10 et le dernier 1/10 (10 étant la somme 1 + 2 + 3 + 4).
maid c'est sur il y a des ameliorations a faire.
@+

signaler à un administrateur
Commentaire de NeoFoenix le 21/06/2005 11:16:29

Salut,
le piege serait de tomber sur des optimums locaux.
(ca y ressemble quand tu peux pas optimiser plus parce que t'as deja
utilisé des longueurs plus courtes).

si tes chromosomes ont n-1 genes (il y a n villes, et on a le point de
depart et d'arrivee)

ex :
n = 6
depart = 1
population initiale :
chromosome1 = 2 3 4 5 6
chromosome2 = 5 3 4 2 6
chromosome3 = 4 6 3 5 2
...

avec une coupure a 1 point
chromosome1 = 2 3:4 5 6
chromosome2 = 5 3:4 2 6

tu copies  le debut et recopies les villes non presentes dans
l'ordre ou elles sont chez l'autre parent.

chromosome1 = 2 3:4 5 6
chromosome2 = 5 3:4 2 6
enfant1     = 2 3 5 4 6 (2 et 3, puis dans l'ordre 5, 4, 6)
enfant2     = 5 3 2 4 6

signaler à un administrateur
Commentaire de NeoFoenix le 21/06/2005 11:19:44

j'oubliais...
pour eviter la degenerescence tu peux hybrider l'algo genetique
avec une methode qui travaille sur le voisinage. Il y a aussi
la mutation qui influe, mais un facteur trop fort et ca ne conserve
plus suffisament longtemps les bonnes carac.

signaler à un administrateur
Commentaire de sim51 le 27/06/2005 22:47:00

Salut,
NéoFoenix, pour éviter la dégénérescence dans un algo génétique on utilise la mutation ainsi que la méthode de la roulette lors de la sélection, ce que cette source. De plus les méthodes dite méta heuristique ne s'applique pas aux algos génétiques ( pour diverses raisons que je n'expliquerai pas ici si ce n'est un mot : le hasard ).
Sinon pour la méthode de croisement je te l'accorde il y mieu ( mais je l'ai déjà dit et ton exemple est bon )

signaler à un administrateur
Commentaire de NeoFoenix le 28/06/2005 00:52:37

Je pensais a hybrider l'ag avec une rts (reactive tabu search)

...(blahblah)...
selection
croisement
rech locale / tabu search / rts <--- et hop
mutation
...(blahblah)...

y'a toujours le hasard de la selection mais la
rts permet de pas tomber dans les optima locaux.
et la rts peut faire un echappement si jamais
on a itere trop longtemps (parametre ?) sans
amelioration notable.

signaler à un administrateur
Commentaire de dalila2006 le 16/03/2006 17:42:12

slt
trés bonne modélisation des AG ,pas évidente mais néanmoins excellente.

signaler à un administrateur
Commentaire de Mall64 le 13/08/2007 01:08:37

Je travail sur un projet  traitement une d’image avec la méthode snack génétique
Je ne sais pas par ou commencé ci vous avait une idée.
le projet consiste de tracée le contour une image
Merci d’avance de votre aide mon email capi64@voila.fr

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,234 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.