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 :

Créer des groupes de contacts hétérogènes ?


Sujet :

Algorithmes et structures de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 194
    Points : 93
    Points
    93
    Par défaut Créer des groupes de contacts hétérogènes ?
    Bonjour à tous,

    Je cherche à faire un algo. pour répartir une liste de contacts dans des groupes hétérogènes.
    En gros, il doit y avoir des femmes et des hommes dans chaque groupe.
    Des français, des allemands, ...
    Des fonction1, des fonction2, ...

    Voici un exemple des informations sur les contacts :

    >> Paul DUPOND (M, Français, BU1, Fonction1, France, 37)
    >> Marta CLAUDIA (F, Espagnol, BU2, Fonction3, Espagne, 27)
    >> Laura MARTIN (F, Français, BU3, Fonction2, Russie, 27)
    >> Bruno BALAR (M, Italien, BU1, Fonction2, Italie, 24)
    >> Marie JEANNE (F, Français, BU1, Fonction1, France, 44)
    >> Pierre DURAND (M, Allemand, BU2, Fonction2, Allemagne, 34)
    >> Carl MARAM (M, Anglais, BU3, Fonction3, Espagne, 32)
    >> Yves JEAN (M, Espagnol, BU1, Fonction2, Espagne, 42)
    >> Isabelle YEUXBLEU (F, Français, BU1, Fonction1, France, 21)
    >> Marc ROSSET (M, Allemand, BU2, Fonction2, France, 26)
    >> Yuri JORK (M, Allemand, BU2, Fonction2, Allemagne, 23)
    >> Claude BERTRAN (M, Anglais, BU1, Fonction1, France, 25)

    A partir de cette liste je voudrai créer 3 groupes de 4 contacts.

    Comment est-ce que vous vous y prendriez :

  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
    Il s'agit d'un problème de partitionnement d'ensemble (c'est un problème en général difficile à résoudre, NP-complet en fait).

    On peut d'abord définir une fonction pour évaluer la qualité d'une partition en groupe. Je définirai cet évaluateur ainsi
    Pour chaque critère, soit N(critère) le nombre de valeurs qui peuvent être prises. Par exemple N(sexe)=2 car il y a deux sexes, N(function)=3, N(BU)=3....
    Ensuite pour chaque groupe g d'une partition possible, on peut calculer N(g,critère) qui est le nombre de critères différents réunis dans le groupe g. La qualité de la partition est la somme sur tous les groupes et tous les critères des ratios N(g,critère)/N(critère) (ou mieux des ratios (N(g,critère)-1)/(N(critère)-1) ). Le but est alors d'obtenir une partition avec la meilleure évaluation possible.

    Pour cela, on part d'une partition arbitraire des contacts et on calcule sont évaluation. Ensuite, on essaie d'échanger deux contacts qui se trouvent dans deux groupes différents. Si l'évaluation est meilleure on garde la nouvelle solution sinon, on continue en essayant d'échanger deux autres contact. L'algo s'arrête quand tout échange n'améliore pas la solution courante. La solution trouvée n'est pas forcément la meilleure possible mais au moins, elle ne peut pas être "trivialement" améliorée par un simple échange.

    Il est aussi possible de trouver la meilleure partition possible (vis-à-vis du critère choisi pour l'évaluation des partitions) en énumérant toutes les partitions possibles mais cela prend en général énormément de temps de calcul (plusieurs années ou siècles dès qu'il y a plusieurs centaines de contacts).

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 194
    Points : 93
    Points
    93
    Par défaut
    Ok, je comprends un peu la logique et je trouve çà génial !!

    Mais je ne comprends pas tout...
    on peut calculer N(g,critère) qui est le nombre de critères différents réunis dans le groupe g
    Que veux-tu dire par ceci ?
    Car j'ai toujours 6 critères quelquesoit les groupes :
    Genre, Nationalité, BU, Fonction, Pays et Age

    Le but est alors d'obtenir une partition avec la meilleure évaluation possible.
    Comment sait on ensuite quelle est la meilleure évaluation ?
    Le résultat est le plus proche de zéro ?

    Merci pour ton aide qui m'est très précieux.

  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
    on peut calculer N(g,critère) qui est le nombre de critères différents réunis dans le groupe g
    Que veux-tu dire par ceci ?
    Effectivement N(g,critère) n'est pas le nombre de critères. C'est le nombre de valeurs différentes pour le critère donné.
    Par exemple, si g contient au moins un homme et une femme, on aura
    N(g, sexe)=2 (2 sexes différents)
    S'il n'y a que des hommes, on a N(g,sexe) = 1.
    S'il contient 2 anglais, un français et un allemand, on pose
    N(g, nationalité)= 3 (nbre de nationalités différentes).

    Ainsi, pour l'évaluation, s'il y a au moins une homme et une femme, on a
    N(g,sexe)-1/N(sexe) = (2-1)/(2-1) = 1 (très bien)
    S'il n'y a que des hommes
    N(g,sexe)-1/N(sexe) = (1-1)/(2-1) = 0 (très mal)
    Pour l'exemple des nationalités, cela donne
    N(g, nationalité)-1 / (N(nationalité)-1) = (3-1)/N(nationalité)-1)
    Remarque qu'un groupe de 4 contacts contient au plus 4 nationalités différentes même si ton panel contient plus de 4 nationalités. On peut donc fixeer N(Nationalité)=4, ce qui donne 2/3=0.67 pour le groupe g.
    Donc pour chaque critère, on a une valeur entre 0 et 1.

    Comme tu as si critère, ton évaluation vaudra au plus 6 (ce qui correspond au meilleur panel possible). Tu peux aussi pondérer tes critères si certains sont plus importants que d'autre.

    Pour l'âge, il faut sans doute faire des classes d'âges (<20ans, 20/30 ans, ...) ou alors utiliser des statistiques (variance des âges, moyenne des écarts entre chaque paire d'âges).

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 194
    Points : 93
    Points
    93
    Par défaut
    tout est plus clair maintenant.

    A+

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

Discussions similaires

  1. créer des groupes de boutons d'options indépendants
    Par potters dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/01/2016, 16h44
  2. Créer des groupes de 4 à partir d'une liste
    Par Coussati dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 07/12/2011, 21h39
  3. créer des groupes de lignes pour chaque onglet de façon automatique
    Par cindy1808 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/07/2009, 19h50
  4. [Administration] Créer des groupe d'utilisateur
    Par damien77 dans le forum Subversion
    Réponses: 0
    Dernier message: 10/02/2009, 15h33
  5. Impossible de créer un groupe de contact
    Par ramagufa dans le forum Windows Vista
    Réponses: 0
    Dernier message: 17/01/2009, 09h57

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