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 :

[Affectation] Méthode des Hongrois avec une matrice non carrée


Sujet :

Algorithmes et structures de données

  1. #1
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2006
    Messages : 96
    Points : 49
    Points
    49
    Par défaut [Affectation] Méthode des Hongrois avec une matrice non carrée
    Bonjour,

    Je viens de coder l'algo des Hongrois (affectation du chemin le moins couteux)

    Cet algo marche uniquement avec des matrices symétrique ...
    il me semble qu'il y a une modification a faire pour le faire fonctionner avec desd matrice quelquonque, si quelqu'un à une idée ...


    merci a vous !!!

  2. #2
    Membre confirmé
    Profil pro
    Directeur Scientifique
    Inscrit en
    Avril 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur Scientifique

    Informations forums :
    Inscription : Avril 2005
    Messages : 419
    Points : 554
    Points
    554
    Par défaut
    Pourrais-tu préciser? L'algorithme hongrois résoud le problème d'affectation. Il n'est pas question de chemin dans le problème d'affectation.

    De plus, les coûts d'affectation correspondent à l'affectation de i à j. La matrice n'est pas supposée symétrique et cela n'a d'ailleurs pas de sens de la considérer symétrique: pourquoi affecter le travail 3 à la personne 2 aurait-il le même coût qu'affecter le travail 2 à la personne 3?

  3. #3
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2006
    Messages : 96
    Points : 49
    Points
    49
    Par défaut
    oups je me suis mal exprimé dsl !

    Je voulais dire que les matrices devait être carré

    lien wiki

  4. #4
    Membre confirmé
    Profil pro
    Directeur Scientifique
    Inscrit en
    Avril 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur Scientifique

    Informations forums :
    Inscription : Avril 2005
    Messages : 419
    Points : 554
    Points
    554
    Par défaut
    Dans ce cas, tu peux la rendre carré et tu complètes en mettant des coûts de non affectation (nuls si tu maximises et élevés si tu minimises).

  5. #5
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2006
    Messages : 96
    Points : 49
    Points
    49
    Par défaut
    j'y ai pensé mais ca ne fonctionne pas !
    car à la premiere etape on soustrait la plus petite valeur sur les lignes
    et ensuite la plus petite sur les colonnes

    donc les grandes valeurs seront annulé

    je viens de faire l'essai sur la matrice suivante

    1 ; 4 ; 3 ; 2
    4 ; 3 ; 6 ; 7
    9 ; 1 ; 3 ; 4
    99;99;99;99

    je passe les calcules intermédiaire ...

    et au final ca me donne

    0 ; 4 ; 1 ; 0
    0 ; 0 ; 1 ; 2
    7 ; 0 ; 0 ; 1
    1 ; 2 ; 0 ; 0

    soit le "chemin" de cout mini représenté par les 'x'

    x ; 4 ; 1 ; 0
    0 ; x ; 1 ; 2
    7 ; 0 ; x ; 1
    1 ; 2 ; 0 ; x

    ou

    0 ; 4 ; 1 ; x
    x ; 0 ; 1 ; 2
    7 ; x ; 0 ; 1
    1 ; 2 ; x ; 0

    avec un cout mini dans les deux cas de 106

    donc la derniere ligne n'est pas ignoré non ?
    j'ai un peu du mal (bon faut dire, c'est vendredi soir )

    merci de l'aide

    A+++

  6. #6
    Membre confirmé
    Profil pro
    Directeur Scientifique
    Inscrit en
    Avril 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur Scientifique

    Informations forums :
    Inscription : Avril 2005
    Messages : 419
    Points : 554
    Points
    554
    Par défaut
    Tout marche bien

    Dans le problème, il y a trois affectations faites (coût 3+3+1=7) et une non-affectation (nécessaire) de coût 99.

    Le coût total est 7+99=106.

  7. #7
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2006
    Messages : 96
    Points : 49
    Points
    49
    Par défaut
    bonjour,

    j'ai codé ca comme ca et ca marche


    merci beaucoup !!!

  8. #8
    Membre confirmé
    Profil pro
    Directeur Scientifique
    Inscrit en
    Avril 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur Scientifique

    Informations forums :
    Inscription : Avril 2005
    Messages : 419
    Points : 554
    Points
    554
    Par défaut
    Il faut déjà bien poser le problème avant de savoir quel algorithme utiliser. L'algorithme hongrois répond à l'affectation 1-1 (1 personne à un poste mais chaque poste ne peut recevoir qu'une personne) avec un coût d'affectation à minimiser (ou un gain à maximiser).

    J'imagine que le nombre maximal de place dans chaque filière est connu. Une filière peut recevoir a priori plusieurs étudiants. Si on veut utiliser l'algorithme hongrois, il faut donc considérer individuellement les x_i places disponibles dans la filière i et faire une affectation entre les étudiants et les places disponibles.

    Une meilleure approche est de travailler sur les flots dans les graphes (il y a des algorithmes très efficaces qui généralisent l'algorithme hongrois).

    Mais, dans tous les cas, il faut définir une fonction à minimiser (pour évaluer ce qu'est une bonne affectation). Par exemple, on peut fixer une pénalité 0 si l'étudiant est affecté à sa filière préférée, la pénalité 1 s'il est affecté à son second choix, 4 si c'est son troisième, 16 si c'est son quatrième...

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

Discussions similaires

  1. Une méthode @WS REST avec un PUT non fonctionnel
    Par geforce dans le forum REST
    Réponses: 0
    Dernier message: 27/10/2014, 15h08
  2. Concaténer des cellules de strings avec une matrice de valeurs
    Par procrastination dans le forum MATLAB
    Réponses: 3
    Dernier message: 16/10/2014, 13h25
  3. Des "null" avec une source xml non vide
    Par anayathefirst dans le forum Jasper
    Réponses: 4
    Dernier message: 24/08/2011, 23h56
  4. Passage en parametre d'une matrice NON carrés
    Par Steffane dans le forum C
    Réponses: 11
    Dernier message: 02/08/2006, 14h10

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