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

Algorithmes et structures de données Discussion :

Voyageur de Commerce


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte logiciel

    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Par défaut Voyageur de Commerce
    Salut à tous

    Je m'intéresse actuellement au problème du voyageur de commerce et j'ai vraiment besoin d'aide sur cet algorithme.

    Le but étant de passer par un max de points en un temps limité ce qui correspond au but de cet algo mais je n'en connais pas le déroulement .

    Pourrais-je avoir s'il vous plaît un pseudo-code ou code (java ou c#) pour résoudre cet algo? J'ai bien sûr déja était sur Wiki ou autre donc ces liens ne me seront pas utiles


    Je précise que je recherche un algo assez rapide (< 5 secondes) en gros pour 50 points maximum !

    Merci d'avance pour toutes vos réponses

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    mmmm, je ne suis pas sûr que tu trouves du code tout fait sur le sujet.
    En général, cela se passe de la façon suivante :
    - tu disposes d'un graphe représentant les différents lieux, les accés entre ces lieux et les temps pour s'y rendre.
    Mais en pratique cela est variable en fonction de ton problème (type de déplacement).
    - tu donnes un point de départ et une date.
    - tu appliques l'algorithme de Dijkstra (suis pas sûr de l'orthographe :s) à partir de chaque nouveau point où tu te trouves.
    - ce n'est pas un problèmes facile au niveau complexité, donc tu peux ajouter des heuristiques.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  3. #3
    Membre expérimenté Avatar de lun4t1k
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    276
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 276
    Par défaut
    Un code tout fait c'est tendu, mais tu trouveras juste des heuristiques en cherchant bien.
    Et puis vu que c'est un probleme np-complet, si tu trouves la meilleure solution de tous les heuristiques existants, tu m'appelles !
    (récompense à la clé :p )

  4. #4
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Citation Envoyé par lun4t1k
    ...
    (récompense à la clé :p )
    de l'ordre du million de dollars me semble t-il ... :p
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  5. #5
    Membre confirmé
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte logiciel

    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Par défaut
    - tu disposes d'un graphe représentant les différents lieux, les accés entre ces lieux et les temps pour s'y rendre.
    - tu donnes un point de départ et une date.
    - tu appliques l'algorithme de Dijkstra (suis pas sûr de l'orthographe :s) à partir de chaque nouveau point où tu te trouves.
    - ce n'est pas un problèmes facile au niveau complexité, donc tu peux ajouter des heuristiques.


    Ok pour calculer les distances j'ai Astar (pas Dijkstra mais c'est le même principe sauf qu'il est plus rapide normalement).

    Je n'ai pas de graphe mais des points sur une carte avec des coordonnées x et y

    des heuristiques stp c'est ?

    parce que avec ca:

    Une heuristique (du grec heuriskêin, trouver) est l'utilisation de règles empiriques :

    * pratiques, simples et rapides,
    * facilitant la recherche des faits et l'analyse de situations,
    * dans un objectif de résolution de problèmes et de prise de décision,
    * dans un domaine particulier.
    Cela ne m'aide pas trop

    Source: Wiki

    Sinon si ya pas de code je veux bien du pseudo code cela ne me dérange pas car là je vois pas mieux pr l'instant !

    Vu que j'ai une carte de 200*200 si je dois tester chaque position avec les distances etc ca fait bcp^^

  6. #6
    Membre confirmé
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte logiciel

    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Par défaut
    voilà je me suis renseigné et je vais utiliser plutôt l'insertion plus proche, si quelqu'un a un pseudo code merki

  7. #7
    Membre expérimenté Avatar de lun4t1k
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    276
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 276
    Par défaut
    Citation Envoyé par ToTo13
    de l'ordre du million de dollars me semble t-il ... :p
    tout a fait !

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 301
    Par défaut
    Bonjour

    Une des meilleures heuristiques qui existe est basée sur une première phase de résolution du problème d'affectation correspondant. La solution du problème d'affectation te donne entre 1 et n cycles (si n est le nombre de villes à visiter), si tu tombes sur 1 alors stop, tu as ta solution au problème de voyageur de commerce (PVC) sinon il faut que tu fusionnes les cycles obtenus. Il existe plusieurs règles de fusion mais une qui n'est pas trop difficile à implémenter et qui marche pas trop mal est de trier les cycles obtenus par taille décroissante, ensuite pour les deux premiers cycles, tu retires les arcs de sorte à ce que ton cout initial moins les deux arcs retirés (un dans chaque cycle) plus les arcs ajoutés pour fusionner soit minimum. Ensuite tu itères jusqu'a n'obtenir plus qu'un seul cycle.
    Il existe également des méthodes assez efficaces pour obtenir l'optimum: tu fais une procédure par séparation évaluation ou à chaque noeud tu prends une décision sur les arcs: l'arc (i,j) appartient ou non à la solution.

    Bon courage

    PS: la récompense d'un million de $ correspond à la preuve de "P=NP" et n'a rien à voir avec "la meilleure solution de tous les heuristiques existants" si je trouve une nouvelle heuristique plus efficace, je n'aurais pas pour autant prouvé "P=NP" pour cela il faut trouver une méthode exacte (méthode exacte != heuristique) qui donne la solution en temps polynomial.

  9. #9
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par hugobosscool26
    Je précise que je recherche un algo assez rapide (< 5 secondes) en gros pour 50 points maximum ! (...) J'ai bien sûr déja était sur Wiki ou autre donc ces liens ne me seront pas utiles
    C'est louche. Le 1er lien que me donne Google c'est du code java qui résout 48 points en moins de 1 seconde. C'est un algo 2-opt avec 2 transformations: décroisement + inversion.

    la demo ici
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  10. #10
    Membre confirmé
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte logiciel

    Informations forums :
    Inscription : Novembre 2006
    Messages : 93
    Par défaut
    ah oui super et tu sais comment le coder?

    perso moi non

  11. #11
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par hugobosscool26
    ah oui super et tu sais comment le coder?

    perso moi non
    Ca a pas l'air bien dur... Et puis, les sources sont fournies en Java et Delphi
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

Discussions similaires

  1. Probleme Voyageur de Commerce - Recuit Simulé
    Par dinver dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 21/06/2009, 22h26
  2. Voyageur de commerce avec Lisp
    Par abdo dans le forum Lisp
    Réponses: 2
    Dernier message: 11/03/2007, 02h42
  3. voyageur de commerce par recuit simulé
    Par siviuze dans le forum C
    Réponses: 6
    Dernier message: 11/01/2007, 16h14
  4. Voyageur de commerce, mais en plus compliqué
    Par Krispy dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 16/02/2004, 08h44
  5. Voyageur de commerce
    Par senke dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 27/09/2002, 12h51

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