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 :

Plus court chemin dans un graphe avec contraintes


Sujet :

Algorithmes et structures de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 45
    Points : 17
    Points
    17
    Par défaut Plus court chemin dans un graphe avec contraintes
    Bonjour,

    Dans le cadre d'un projet, je dois coder (en java) une heuristique permettant de trouver le plus court chemin dans un graphe d'un point s à un point t sous deux contraintes:

    1ere : Le chemin doit passer par k sommets minimum. (Nombre k imposé par le graphe)

    2eme : Certains sommets du graphe font parti de sous-ensembles, passer par un des sommets appartenant à un sous-ensemble m'oblige à passer par tous les sommets du sous-ensemble.

    J'hésite entre une modification de l'algorithme de Dijkstra ou une modification de l'algorithme de recherche en profondeur...

    Qu'en pensez vous?

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 45
    Points : 17
    Points
    17
    Par défaut
    S'il vous plaît, si quelqu'un a ne serait-ce qu'une vague idée de comment procéder je suis preneur, je bloque sur ces deux contraintes depuis un petit moment maintenant et je suis à court d'idées neuves...

    Merci.

  3. #3
    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 : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Tout dépend des données d'entrée : la taille du graphe, la densité de la matrice d'adjacence, le nombre de "sous-ensemble", ...

    Les directions peuvent aller de l'exploration totale jusqu'aux algos génétiques...
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 45
    Points : 17
    Points
    17
    Par défaut
    En fait, j'ai un "jeu" de 20 graphes. Tous ont 100 sommets et entre 3000 et 6000 arcs. Le nombre k est aux alentours de 50 (sachant qu'un simple Djkstra trouve la solution en 4 sommets) . Il y a souvent 3 sous-ensembles de 3 sommets chacun.

    Avec une modification de l'algo de recherche en profondeur, je trouve des solutions respectant ma première contrainte pour seulement 9 des 20 graphes donnés.

    Pour les 11 autres, une exception de type "StackOverflowError". J'utilise la récursivité mais ma condition d'arrêt doit être bonne puisqu'elle marche pour certains graphes...

  5. #5
    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 : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par tomjr Voir le message
    En fait, j'ai un "jeu" de 20 graphes. Tous ont 100 sommets et entre 3000 et 6000 arcs. Le nombre k est aux alentours de 50 (sachant qu'un simple Djkstra trouve la solution en 4 sommets) . Il y a souvent 3 sous-ensembles de 3 sommets chacun.
    Donc en gros 10% de chance de choisir un des sommets qui est dans un sous-ensemble. Ce n'est pas une probabilité très forte, on peut imaginer ne pas prendre en compte cette contrainte pour l'heuristique principale, mais seulement vérifier à la fin que la contrainte est respectée pour une solution.

    Ce qui nous laisse trouver une heuristique pour la contrainte de passer par au moins "k" sommets, tout en minimisant la distance totale. Ce qui ressemble fort aux problèmes "CSP k-stops" que l'on rencontre dans les problèmes de routage sur les reseaux.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 45
    Points : 17
    Points
    17
    Par défaut
    10% de chances, pour le premier sommet choisi dans le chemin. Lorsqu'on arrive au 50eme sommet à choisir, on est à 25% non?

    D'autant que j'ai l'impression que certains sommets de ces sous-ensembles ont été placés à des endroits "stratégiques" du graphe, avec donc une casi-obligation de les choisir...

    J'essaye de repérer et de supprimer les sous-ensembles inutiles et de garder les sous-ensembles obligatoires car une suppression de tous les sous-ensemble me génère encore une "StackOverflowError"...

  7. #7
    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 : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par tomjr Voir le message
    10% de chances, pour le premier sommet choisi dans le chemin. Lorsqu'on arrive au 50eme sommet à choisir, on est à 25% non?
    oui, c'est sur que la probabilité augmente. Mais je trouve que cette contrainte reste assez faible comparée à la problématique du chemin le plus court à travers k sommets. Si on peut énumérer les chemins à k sommets, en commençant par les plus courts, le test de la 1ere contrainte est assez trivial.

    As-tu regardé les algorithmes du CSP k-stops ?
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 45
    Points : 17
    Points
    17
    Par défaut
    Je me suis largement inspiré d'un algorithme du CSP k-stops, celui-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Algorithm k-LDM(s, d)
    // s and d are the source and destination, and path is the path constructed so far
    1. Initialize path to s → d
    2. For i = 1 to k
    3. Find the point p in DB with the min distance from any line segment in path
    4. Add p to path
    5. Return path
    Je créé le chemin de départ avec Dijkstra et j'ajoute à chaque tour le sommet de moindre coût.

    Là, mon algorithme s'arrête dès que j'ai mes "k" sommets. Selon toi, je devrais continuer à ajouter des sommets au chemin jusqu'à ce qu'il n'y ai plus de sommets "hors chemin". Je sauvegarde tous mes chemins dont la longueur est supérieure à "k" dans une arrayList. Pour ma solution, je retourne le chemin qui respecte mes deux contraintes...

    Je t'ai bien suivi?

    En tous cas merci beaucoup pour ton aide, j'avance enfin...

  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 : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par tomjr Voir le message
    Là, mon algorithme s'arrête dès que j'ai mes "k" sommets. Selon toi, je devrais continuer à ajouter des sommets au chemin jusqu'à ce qu'il n'y ai plus de sommets "hors chemin".
    Il faut surtout regarder les chemins alternatifs de longueur "k". Par exemple on peut, pour chaque sommet du chemin actuel, prendre le "deuxième" sommet le plus proche (dans l'etape 3). Puis le "troisième", ....

    Idem avec les chemins alternatifs de longueur k+1, k+2, ...

    Au final, on se retrouve avec une liste de chemins, qu'on trie par longueur et dont on teste la contrainte #1.

    Il reste à trouver un critère pour arreter de calculer et ajouter des nouveaux chemins dans la liste.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 45
    Points : 17
    Points
    17
    Par défaut
    Je suis resté sur l'idée de stocker un seul chemin par itération "k" et mon algorithme me donne enfin des chemins qui respectent les contraintes. Je suis loin du chemin optimal mais le temps me manque pour enchaîner sur ton idée de stockage des chemins alternatifs...

    Encore merci pour ton aide!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Plus court chemin dans un graphe
    Par kader58 dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 26/04/2015, 10h19
  2. Algorithme des K plus courts chemins dans un graphe dirigé
    Par geforce dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 23/01/2015, 15h07
  3. Calcul de plus court chemin dans un graphe
    Par Elmilouse dans le forum Prolog
    Réponses: 6
    Dernier message: 21/03/2010, 20h26
  4. trouver le plus court chemin dans un graphe
    Par buggen25 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 15/08/2008, 17h34
  5. N plus courts chemin dans un graphe
    Par MLK jr dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 13/03/2006, 00h32

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