IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

problème de voyageur de commerce


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2014
    Messages : 72
    Par défaut problème de voyageur de commerce
    bonjour,

    je suis entrain de développer un programme qui résout le problème de voyageur de commerce, en c++ et en utilisant l'algorithme du recuit simulé.

    j'utilise graphe<S,T> pour représenter le graphe, PElement<T> (une arête ou un sommet), Sommet<T>, Arête<S,T>.


    ma question est quelle est la meilleur structure de donnée à utiliser pour représenter l'espace d'exploration S qui est l'ensemble des cycles eulériens du graphe, sachant qu'à la fin de l'algo je dois sélectionner une solution dans S la moins coûteuse, ce qui fait que soit les solutions doivent être déjà dans un certain ordre, soit je dois les trier pour sélectionner le min ?


    aussi, comment utiliser l'algorithme du recuit simulé pour rechercher un plus court chemin d'un sommet origine à un sommet arrivée dans le graphe ?


    merci d'avance pour vos réponses.

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    une classe bien choisie, permettant de calculer son cout.
    Ca peut très bien être un vector<arete> dont tu calcule la somme des couts.

  3. #3
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 103
    Par défaut
    Bonjour !

    Citation Envoyé par lenas_tshaleb Voir le message
    aussi, comment utiliser l'algorithme du recuit simulé pour rechercher un plus court chemin d'un sommet origine à un sommet arrivée dans le graphe ?
    Dans un premier temps, je te conseille d'utiliser le mouvement du 2-opt comme mouvement de transformation. Il est facile à implémenter, et tu as beaucoup de documentation sur le net à ce sujet. Bien entendu, tu auras les paramètres habituels, avec E la performance de ta solution et T le temps de calcul, par exemple.

    Après, quand tu auras programmé le mouvement du 2-opt avec succès, tu pourras essayer de programmer l'algorithme de Lin-Kernighan, qui trouve d'excellentes solutions en un temps très restreint.

    Citation Envoyé par lenas_tshaleb Voir le message
    ma question est quelle est la meilleur structure de donnée à utiliser pour représenter l'espace d'exploration S qui est l'ensemble des cycles eulériens du graphe, sachant qu'à la fin de l'algo je dois sélectionner une solution dans S la moins coûteuse, ce qui fait que soit les solutions doivent être déjà dans un certain ordre, soit je dois les trier pour sélectionner le min ?
    En ce qui concerne la structure de données à utiliser : comme l'a précisé leternel, un std::vector est une solution simple pour un premier développement. Après, comme tu te poses la question du meilleur conteneur et comme il s'agit de prendre la meilleure solution trouvée à chaque itération, je te conseillerais une structure de priority_queue fondée sur un tas binaire pour optimiser les performances de calcul, et elle est très efficace si tu as besoin d'accéder fréquemment à la meilleure valeur.

    En gros, cette structure ne stocke pas les valeurs (ici les solutions trouvées) dans une simple chaîne classée par ordre croissant ou décroissant. Il s'agit d'un arbre binaire trié par nature, où la meilleure solution est placée au sommet, où chaque nœud père est une meilleure solution que le nœud fils et où chaque père possède au maximum deux fils. Il y a d'autres règles que tu pourras facilement trouver sur le net.

    Si tu prends la priority_queue de la STL, tu peux obtenir de bons résultats, mais en implémentant une priority_queue fondée sur un tas binaire, tu as :

    - un temps d'accès à la meilleure solution immédiat (O(1) contre O(n) pour un std::vector)
    - un temps d'insertion et de suppression en O(log(n)) (contre O(n) pour un std::vector).

    Bon courage !

Discussions similaires

  1. Problème du voyageur de commerce
    Par bleach1234 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 04/05/2009, 14h57
  2. Problème du voyageur de commerce parallélisé
    Par Cyberstein dans le forum Mathématiques
    Réponses: 2
    Dernier message: 06/04/2009, 17h49
  3. Réponses: 2
    Dernier message: 03/02/2009, 20h21
  4. Problème du voyageur du commerce avec plusieurs voyageurs
    Par Treuze dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 21/12/2007, 11h46
  5. Réponses: 3
    Dernier message: 12/04/2007, 09h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo