begin process at 2010 02 10 11:03:46
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

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

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


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Niveau :Débutant Date de création :22/04/2005 Vu / téléchargé :9 334 / 1 163

Auteur : Gimli

Ecrire un message privé
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

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture RÉGRESSION POLYNOMIALE
Source avec Zip Source avec une capture COMPRESSEUR JPEG
Source avec Zip Source avec une capture DÉCOMPOSITION EN FACTEURS PREMIERS
Source avec Zip Source avec une capture ECRAN DE VEILLE MATRIX
Source avec Zip Source avec une capture FRACTAL DE MANDELBROT

 Sources de la même categorie

Source avec Zip Source avec une capture LOGICIEL DE DIAGNOSTIC AUTOMOBILE KWP2000 par Oniria
Source avec Zip Source avec une capture RÉGLE TRANSPARENTE POUR MESURER UN OBJET ECRAN par dubois77
Source avec Zip Source avec une capture LE BOOK DU PAUVRE par dubois77
Source avec Zip Source avec une capture CAHIER 90 PAGES par dubois77
Source avec Zip Source avec une capture TABLEAU DE BOUTONS DYNAMIQUES (AGENDA) par dubois77

Commentaires et avis

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!!!

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...
@+

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...

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+

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

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.

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.
@+

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

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.

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 )

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.

Commentaire de dalila2006 le 16/03/2006 17:42:12

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

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...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales