Curriculum and Labs for Engineering Education

cancel
Showing results for 
Search instead for 
Did you mean: 

Challenge mathématiques #12 : Problème du voyageur de commerce. Le plus court chemin entre des points

voyageur.png

Bonjour à tous j’espère en forme pour un nouveau défi ! encore une certification de votre choix au catalogue passable gratuitement est en jeu. (CLAD, CLD, CLA, CTD...)

Comme tout le monde n’est pas un voyageur de commerce, donc nommer un problème du même nom n’est peut être pas adapté à ce défi…

Que pensez-vous plutôt de pouvoir optimiser vos déplacements quand vous avez plusieurs endroits à visiter pendant vos congés ? C’est plus séduisant…

Cela correspond à quoi en LabVIEW ? Passer par tous les points d’un tableau de coordonnées XY en utilisant que le chemin le plus court.

Voici le défi : Vous disposez d’un programme de départ d’exemple du problème du voyageur. (Pièce jointe en ZIP)

Il est demandé de renvoyer à mon adresse emmanuel.roset@ni.com le VI nommé « Plus court chemin_Votre Pseudo.vi », (avec le projet entier si vous voulez)

bien entendu avec votre vrai Pseudo et contenant l’algorithme de résolution votre choix.

Celui fourni est un exemple qui n’est pas forcément optimisé et au-delà de 10 points de passages le code devient très lent.

Le gagnant sera celui dont le VI fournit : les points du chemin le plus court, la distance la plus petite, ainsi que le point de départ/arrivée et qui effectue le calcul le plus rapidement.

Pour le test final, un tableau de points commun sera généré à tous les algorithmes afin de comparer les vitesses.

Le nombre de points généré sera ajusté en fonction de la vitesse de l’algorithme. La comparaison de vitesse sera effectuée avec un code différent qui ne teste que le Sous_VI.

N’hésitez pas à m’envoyer vos codes même si vous pensez qu’il n’est pas "super" optimisé, le but c’est de participer et de s’amuser !

Voici des liens Wikipédia comme piste d’algorithmes possibles : (fournis, génétique, Dijkstra…)

http://fr.wikipedia.org/wiki/Probl%C3%A8me_du_voyageur_de_commerce

Très bon site avec des graphes d’explication

http://en.wikipedia.org/wiki/Travelling_salesman_problem

http://fr.wikipedia.org/wiki/Algorithme_de_Dijkstra

Bonne réflexion !

Emmanuel ROSET

****************************************************************************************************

Résulats au 01/04/2014

Pièce jointe ajoutée

Il est temps de faire les comparatifs et les tests des chemins les plus courts

Méthode :

  • Vérification de l’utilisation de la dernière version des codes reçus
  • Test d’une ligne aller-retour pour vérifier la distance identique pour tous
  • Test du cercle pour vérifier la distance et la validité de l’algorithme
  • Test du plus court chemin sur des tableaux de points aléatoires de 8 – 10 – 20 (suivant la durée de calcul effectuable dans un temps raisonnable.)

Tests :


Cisco : On analyse le plus court chemin au fur et à mesure, par la construction de l'arbre des trajets possibles.

Sous_VI testé : Plus court chemin_Cisco_v2.vi

Résultat pour 20 points : 3057,41 calculé en 140 secondes

Régis65 : On choisit le point le moins distant autour du point actuel

Sous_VI testé : Plus court chemin_regis65_V2_2.vi

Résultat pour 20 points : 3457,81 calculé en 0 ms

Micael : évaluation de la validité de l’étape ABCD en calculant que 2 distances à chaque itération

Sous_VI testé : Plus court chemin_Micael.vi

Résultat pour 20 points : 2708,95 calculé en 2 ms

Il semble que le plus court chemin soit celui calculé par Micael (dans un temps très court en plus). Le choix du compromis entre tout tester  et évaluer la validité du segment proche est un bon choix.

Donc Micael est déclaré vainqueur !

En tout cas bravo à tous les 3 car les codes fonctionnent dans tous les cas dont celui du cercle qui permet de tester « l’intelligence » du code.

Voici les captures d'écran des tests et les chemins calculés :

Test ligne.jpgtest_cercle.jpg

Cisco.jpg

Régis65.jpg

Micael.jpg

Bon maintenant on va pouvoir partir en vacances en utilisant le plus court chemin pour les visites. Mieux que le GPS ?

Comments
Cisco
Active Participant
Active Participant
on

Ils auraient pu mettre des graphes LabVIEW au lieu de Simulink sur Wikipedia... Bon il va falloir s'y mettre, j'avais déjà bossé sur ce problème pendant mes études, il fallait le faire en C (beurk!) mais il y a du taf!

Francis M
Cisco
Active Participant
Active Participant
on

Bonjour. J'ai commencé à réfléchir là-dessus... 2 petites questions:

"les points du chemin le plus court, la distance la plus petite"

--> ce n'est pas équivalent?

ainsi que le point de départ/arrivée

--> intérêt? quelque soit le point considéré, on aura un résultat équivalent

Pas facile d'être inventif, pour une fois on doit travailler à partir de quelquechose qui marche déjà...

Francis M
emmanuel-fr
Member
Member
on

En effet, les valeurs demandées des phrases, sont celles retournées simplement par le Sous VI du programme fourni. (cluster, variable,..)

La distance la plus petite est la somme de tous les segments de chemins. Et les points du chemin est un tableau de valeur par lesquel le voyageur doit passer (qui sera mis en noir sur le graphe)

C'était juste pour préciser de renvoyer le Sous VI "Plus court chemin_Votre Pseudo.vi" sans modifier les types d'E/S.

Les buts sont un aspect graphique du résultat dans la face avant et également d'obtenir tous les VI identiques afin de comparer les vitesses d'exécution des Sous-VI.

La formatage dans les valeurs demandées (cluster) implique un temps de traitement un peu plus long pour renvoyer les valeurs sur ce format mais le contenu des valeur (le chemin) est essentiel pour le voyageur.

Le point de départ et d'arrivée est arbitraire mais il est nécessaire également pour l'affichage, il peut tout a fait correspondre au premier point généré dans le tableau de points qui sera fourni

Pour l'inventivité, c'est en effet un challenge de reprendre un code et de le refondre afin de l'optimiser et de l'améliorer. C'est un exercice particuler auquel les développeurs sont parfois confrontés suite au départ d'un développeur précédent....

J'ai regardé les différentes méthodes aussi, à priori il serai possible d'aller beaucoup plus vite que le code fourni par notre donateur

emmanuel-fr
Member
Member
on

Merci à Regis65 qui m'a envoyé son code qui fonctionne extrêmement rapidement et passe par tous les points. Je remarque cependant que je ne crois pas que le programme prend tout le temps le chemin le plus court sur la totalité du parcours .

Cisco
Active Participant
Active Participant
on

Regis65 aurait-il utilisé une méthode approchée?

Une méthode exacte (comme celle implémentée dans l'exemple) donnera a coup sûr le trajet le plus court, mais avec un temps de résolu potentiellement long, voire TRES long.

Une méthode approchée donnera quand à elle une bonne solution, pas forcément la meilleure, mais dans un temps raisonnable malgré un nombre important de villes.

Alors que faut-il privilégier: un algo qui marche tout le temps, ou qui donne toujours la meilleure solution? Peut-être qu'en bornant le nombre de villes il serait souhaitable d'exiger LA meilleure solution, mais sachant que le nombre de possibilités est de (n-1)! / 2 (n étant le nombre de villes), il me parait compliqué pour n grand d'affirmer qu'un trajet donné est LE trajet le plus court (310 E+21 trajets à évaluer pour 25 villes).

Francis M
regis65
Member
Member
on

Je m étais rendu compte de la bizarrerie du parcours par rapport à l'exemple mais par contre même si elle ne parait pas logique ma distance totale est plus courte (sauf si j'ai une erreur dans le calcul) que celle calculéé par l'exemple.

Voir avec 8 points: pt1(449;472) pt2(42;497) pt3(521;447) pt4(150;11) pt5(532;49) pt6(619;39) pt7(409;381) pt8(508;130) je trouve une distance totale de 1525.69 pour 1990.63 pour l'exemple.

Edit: il y a bien un problème dans mon VI pour le calcul de la distance totale. Je rectifie et essaye d'améliorer le VI.

emmanuel-fr
Member
Member
on

Hello, en effet j'ai appliqué un petit calcul sur le parcours total sur d'autres points. Et le chemin est plus court que dans l'exemple donné sur les valeurs testées. Pour l'instant c'est un peu de la magie, pourrez vous commenter votre algorithme afin de partager la méthode utilisée ? je ne la dévoilerai pas avant la fin. Pour l'instant je crois que je pars en vacances avec votre méthode... , à vérifier...

Par contre, il y avait bien un problème avec la mesure de distance dans le premier programme.

Par rapport à la demande de Cisco,

J'ai préparé des tableaux de points au hasard de 8, 10, 20, n, à valider. Le but final est de trouver le plus court chemin possible même par approximation et dans le temps d'exécution le plus court.

Un même tableau de points sera utilisé pour toutes les réponses afin de comparer les distances et temps. (Le plus réalisable dans un temps raisonnable par exemple < 5 min)

Le tableau des résulats est donc trié par la colonne chemin le plus court en priorité suivi par le temps de calcul le plus court.

emmanuel-fr
Member
Member
on

Regis65, en regardant de plus près l'algorithme, j'ai remarqué que le nombre de points de sortie n'est pas complet, il n'y a pas le point de départ. Ce qui donne pour 2 points uniquement le chemin du retour. Donc pour 2 points, le tableau de sortie devrait donner 3 valeurs, le point de départ et d'arrivée inclus. Sinon j'ai compris la méthode.

emmanuel-fr
Member
Member
on

Merci à _micael. Je confirme que j'ai bien reçu son code. Il est efficace et astucieux.

Regis_65, idem, le nombre de points de passages est n+1 (par ex 22 pour 20 points), je n'ai regardé pourquoi car la distance est bonne.

Pour info je procède en premier au test du cercle pour vérifier que tous les algorithmes sont corrects et donnent la même distance (nombre de points du cercle de 2 à n)

test du cercle.jpg

emmanuel-fr
Member
Member
on

Résultats publiés

Cisco
Active Participant
Active Participant
on

Félicitations à _micael!!

Francis M
Micael_
Active Participant
Active Participant
on

Merci !

Cordialement,


Micaël DA SILVA
Jean-Louis
Member
Member
on

Il va falloir que National Instruments crée rapidement de nouvelles certifications pour que _Micael puisse utiliser tous ses bons points...

Jean-Louis SCHRICKE
CTA - Certified TestStand Architect (2008 - 2022)
CTD - Certified TestStand Developer (2004 & 2007)
CLD - Certified LabVIEW Developer (2003 & 2005)

emmanuel-fr
Member
Member
on

Oui, il faut qu'on change de méthode , ce mois ci on change.... sinon ca devient la certification de niveau "Univers".

Micael_
Active Participant
Active Participant
on
Cisco
Active Participant
Active Participant
on

On s'inscrit où??

Francis M
Marie_Remondière
NI Employee (retired)
on

Oh mais je pensais pas qu'ils l'avaient vraiment publié, c'est excellent ! C'était le poisson d'avril de cette année m'enfin si vous y tenez moi je peux tenir les inscriptions 😉

Cisco
Active Participant
Active Participant
on

Chiche? Nouvelle mission pour Marie: organiser une Certification LabVIEW Gladiator! Une série de défis divers et variés qui démontrerot la capacité à utiliser LabVIEW pour tout et n'importe quoi, dans les conditions les plus précaires (un vieux PC avec LabVIEW 6 ou 7) pour réussir à survivre, ou du moins à résoudre les plus improbables des problèmes, même avec une seule main ou seulement la moitié des palettes dispo.

Cette innovation française sera historique, les américains vont vouloir nous copier, mais seront moins bons, à part peut-être Mac Gyver. Marie sera surement promue, elle deviendra administrative de cette nouvelle communauté de gladiateurs prêts à tout pour en découdre avec les moyens du bord... Emmanuel quand à lui l'assistera dans sa mission en nourrissant l'appétit de défis des membres grâce à ses défis et challenges sortis d'on ne sait trop où. Il paraitrait même qu'il travaille déjà sur un projet de stages de survie LabVIEW...

Francis M
Marie_Remondière
NI Employee (retired)
on

ne me mettez pas au défi, c'est le seul que je peux techniquement relever ! 😉

MaximeR
Active Participant
Active Participant
on

D'ailleurs, le vrai challenge, serait de le faire sur la version 1 de LabVIEW. Je crois savoir qu'il en existe une version avec l'emulateur MAC de l'époque qui traîne en interne chez NI. Ca se serait un vrai challenge, parce que relever le dernier challenge mathématiques demandant de changer les couleurs sur un écran noir et blanc, c'est pas évident.

Maxime R.  

  CLA - Certified LabVIEW Architect / Architecte LabVIEW Certifié
  CTA - Certified TestStand Architect / Architecte TestStand Certifié

emmanuel-fr
Member
Member
on

Me tentez pas, j'ai des défis pour Gladiators plein le casque à visière et le filet à poisson (d'avril).

Contributors