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

Mathématiques Discussion :

Génération de matrice aléatoire avec condition d'équilibre


Sujet :

Mathématiques

  1. #1
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut Génération de matrice aléatoire avec condition d'équilibre
    Bonjour à tous,

    Je vous expose mon problème : je cherche à programmer la génération de plans d'expériences (matrices) dans un cas bien particulier.
    Je vais me baser sur un exemple concret pour vous présenter ma problématique :

    Je dispose de 3 variables (par exemple : X, Y et Z) pouvant prendre respectivement : 3, 4 et 5 modalités.
    Une combinaison des modalités de ces 3 variables est appelée produit, par exemple ( X=1 , Y=4 , Z=1 ), ou encore : ( X=2 , Y=2 , Z=4 ).
    Une planche est un ensemble de k produits. Prenons par exemple : k=3. On aura alors par exemple comme planche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    X  Y  Z
    2  2  5
    1  3  2
    2  2  4
    On a ensuite N individus (prenons par exemple N=10) et à chaque individu est associé un nombre g de planches (par exemple g=4).
    Ainsi, on aura au final comme matrice/plan d'expériences quelque chose de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Individu  Planche  Produit     |     X  Y  Z
    1         1        1           |     2  4  1
    1         1        2           |     3  2  4
    1         1        3           |     1  2  5
    1         2        1           |     2  1  3
    1         2        2           |     1  4  1
    1         2        3           |     1  2  1
    1         3        1           |     3  3  2
    ...
    ...
    ...
    10         3        3          |     1  2  3
    10         4        1          |     3  1  5
    10         4        2          |     2  4  1
    10         4        3          |     1  1  5
    Voilà, j'espère que jusqu'ici je suis assez claire...


    Maintenant, il y a également des conditions à appliquer.
    Tout d'abord, aucune planche ne peut être composée de 2 mêmes produits. Ensuite, aucune planche sur l'ensemble des individus ne peut exister en double.
    Enfin, il faut que chaque individu voit un même nombre de fois (approximativement bien sûr) toutes les paires possibles de modalités de deux variables.

    Et c'est ce dernier point qui me pose le plus de problèmes à programmer. Pour l'instant j'ai commencé par générer tous les produits possibles (stockés dans une matrice P0), et je pioche des produits un par un dans cette matrice P0 en "comptant" les apparitions des couples de modalités pour faire en sorte de maintenir l'équilibre. Sauf qu'il arrive que je tombe sur un cas impossible (!) où quel que soit le produit qu'on ajoutera, cela "cassera" l'équilibre. Dans un tel cas j'avais pensé à "recommencer" toute la sélection de produits pour l'individu concerné, mais alors mon algorithme met énormément de temps (sachant qu'il peut y avoir 1000 individus).

    Donc voilà, si quelqu'un à des pistes intéressantes sur le sujet ou des astuces de programmation pour ce genre de problème, cela m'intéresse grandement
    De plus, si vous souhaitez que je donne plus d'explications, n'hésitez pas à me le faire savoir.

    Merci d'avance


    Cordialement,

    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  2. #2
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    Je reformule pour être sur de bien comprendre la condition en gras.

    1) un produit est un triplet d'entiers positifs (x,y,z) où x<=3,y<=4 et z<=5. On note PR cet ensemble.Pour un tel produit p on note p_1,p_2 et p_3 les valeurs x,y, et z.
    2) un planche est un élément pl=(pl(1),pl(2),pl(3)) de PR^k tel que pl(i)<>pl(j) si i<>j. On note PL cet ensemble.
    3) un individu est un élément ind=(ind(1),...,ind(g)) de PL^g tel que ind(i)<>ind(j) si i<>j. On note IND cet ensemble

    On utilise la notation de composition X_Y

    Pour tout ind de IND et tout x<=3,y<=4 et z<=5, on pose
    IND_XY={(i,j): ind(i)_p(j)_1=x, ind(i)_p(j)_2=y},
    IND_XZ={(i,j): ind(i)_p(j)_1=x, ind(i)_p(j)_3=z},
    IND_YZ={(i,j): ind(i)_p(j)_2=y, ind(i)_p(j)_3=z}.

    Les cardinaux du plus petit et plus grand ensemble ci-dessus sont notés ind_min et ind_max.

    On recherche les ind qui minimisent ind_max-ind_min (en fait un algo qui génère de tels individus).

    J'ai bon??
    Nemerle, mathématicopilier de bars, membre du triumvirat du CSTM, 3/4 centre

  3. #3
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour,

    Tout d'abord, merci beaucoup pour votre réponse !


    Citation Envoyé par Nemerle
    1) un produit est un triplet d'entiers positifs (x,y,z) où x<=3,y<=4 et z<=5. On note PR cet ensemble.Pour un tel produit p on note p_1,p_2 et p_3 les valeurs x,y, et z.
    2) un planche est un élément pl=(pl(1),pl(2),pl(3)) de PR^k tel que pl(i)<>pl(j) si i<>j. On note PL cet ensemble.
    3) un individu est un élément ind=(ind(1),...,ind(g)) de PL^g tel que ind(i)<>ind(j) si i<>j. On note IND cet ensemble
    Ca me paraît ok.
    Perso, j'aurais noté comme suit :

    pl=(pr(1),pr(2),...pr(k)) car pl = planche et une planche = un ensemble de k produits.
    ind=(pl(1),pl(2),...pl(g)) car un individu voit un ensemble de g planches.

    Sinon pour les conditions, c'est ça.

    (Après, les valeurs données aux paramètres (le fait qu'il n'y ait que 3 "variables" x, y et z, les nombres de produits k, de planches g, etc...) ont été fixés pour l'exemple mais sont variables dans la pratique).


    Citation Envoyé par Nemerle
    Pour tout ind de IND et tout x<=3,y<=4 et z<=5, on pose
    IND_XY={(i,j): ind(i)_p(j)_1=x, ind(i)_p(j)_2=y},
    IND_XZ={(i,j): ind(i)_p(j)_1=x, ind(i)_p(j)_3=z},
    IND_YZ={(i,j): ind(i)_p(j)_2=y, ind(i)_p(j)_3=z}.

    Les cardinaux du plus petit et plus grand ensemble ci-dessus sont notés ind_min et ind_max.
    Je ne suis pas sûre de bien comprendre ici la manière dont vous définissez ces ensembles? Par exemple, l'ensemble "IND_XY" va contenir tous les couples de valeurs prises par les variables x et y pour un individu, c'est bien cela?
    Du coup, je ne comprends pas à quoi correspondent les "cardinaux du plus petit et plus grand ensemble"?

    Citation Envoyé par Nemerle
    On recherche les ind qui minimisent ind_max-ind_min (en fait un algo qui génère de tels individus).
    Ca m'intéresserait d'en savoir plus mais comme le point précédent n'est pas très clair pour moi...


    En tout cas merci d'essayer de m'aider et désolée d'avoir un peu de mal quant à la formulation "théorique" de mon problème


    Bien cordialement,

    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  4. #4
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    Ok pour vos remarques, j'ai rédigé trop vite
    En pariculier sur les IND_??, il manque un niveau :

    Pour tout individu IND et tout x<=3,y<=4 et z<=5,en notant Gamma l'ensemble produit [1,g]x[1,k]x[1,3], on pose

    IND_(X=x,Y=y) = {(i,j,l) dans Gamma: IND(i)_pl(j)_pr(l)_1=x, IND(i)_p(j)_pr(l)_2=y},
    IND_(X=x,Z=z) = {(i,j,l) dans Gamma : IND(i)_pl(j)_pr(l)_1=x, IND(i)_p(j)_pr(l)_3=z},
    IND_(Y=y,Z=z) = {(i,j,l) dans Gamma : IND(i)_pl(j)_pr()_2=y, IND(i)_p(j)_pr(l)_3=z}.

    Le cardinal de IND_(X=2,Y=4) par exemple donne le nombre de paires (X=2,Y=4) présentes dans tous les produits des planches associées à IND.

    Donc avoir le même nombre de fois "approximativement" revient à minimiser la valeur IND_max - IND_min, soit la différence des cardinaux du plus grand et du plus petit ensembles IND_??.

    C'est plus clair?
    Nemerle, mathématicopilier de bars, membre du triumvirat du CSTM, 3/4 centre

  5. #5
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Re-bonjour,

    Citation Envoyé par Nemerle
    Ok pour vos remarques, j'ai rédigé trop vite
    Pas de soucis, au contraire, je vous remercie d'essayer de m'aider


    Citation Envoyé par Nemerle
    Le cardinal de IND_(X=2,Y=4) par exemple donne le nombre de paires (X=2,Y=4) présentes dans tous les produits des planches associées à IND.

    Donc avoir le même nombre de fois "approximativement" revient à minimiser la valeur IND_max - IND_min, soit la différence des cardinaux du plus grand et du plus petit ensembles IND_??
    Je n'arrive pas bien à comprendre le "revient à minimiser la valeur de IND_max - IND_min"...
    Si ce que vous voulez calculer ici est le nombre minimal de fois où chaque combinaison/couple de 2 variables doit apparaître, alors il peut se calculer (il me semble) comme etant le reste entier de la division euclidienne du nombre de produits vu en tout par un individu (soit g*k) par [ le nombre de niveaux de la variable i fois le nombre de niveaux de la variable j ].

    Dans mon exemple : g = 9, k = 3, [ nombre de niveaux de X ] = 3, [ nombre de niveaux de Z ] = 5. Alors, chaque couple de deux niveaux/modalités de X et de Z doit apparaîte au moins : (3*9) // (3*5) = 1 fois.

    Je ne sais pas si c'est très clair...


    Encore merci d'essayer de m'aider


    Bien cordialement,

    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  6. #6
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    si, c'est clair, et je suis ok avec votre rq

    Quand vous dites "chaque individu voit un même nombre de fois (approximativement bien sûr) toutes les paires possibles de modalités de deux variables.",

    moi je le traduis par "IND_max -IND_min doit être minimal. IND_max représente le nombre d'occurence du couple de produits étant le plus vu par les individus, et IND_min l'inverse.

    Donc minimiser la différence, c'est "votre" phrase! Si cette différence vaut zéro, tous les couple de produits ont le même nombre d'occurences chez tous les individus. Si elle vaut 2, le nombre d'occurences d'un couple est le même à 2 près...

    Donc on se comprend, je vais réfléchir à la suite.
    Nemerle, mathématicopilier de bars, membre du triumvirat du CSTM, 3/4 centre

  7. #7
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Ok, j'ai compris aussi votre manière de poser le problème.

    Merci pour votre attention concernant mon "problème".
    Si vous avez d'eventuelles idées pour poursuivre, je suis toute ouïe


    Bien cordialement,

    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  8. #8
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    Je pense qu'il faut maintenant préciser "chaque individu voit un même nombre de fois (approximativement bien sûr) toutes les paires possibles de modalités de deux variables."

    Il me semble que l'égalité est impossible. En prenant le cas simplifié où X, Y et Z parcourent respectivement les ensembles {1}, {1,2} et {1,2,3}, alors les paires (XY),(XZ) et (YZ) sont données par

    (XY): (11),(12)
    (XZ); (11),(12),(13)
    (YZ); (11),(12),(13),(21),(22),(23)

    Définissons une planche comme triplet de 3-produits, et disons qu'un individu en possède 2. Alors par exemple les 2 planches suivantes

    Pl1: (111)(112)(121)
    Pl2: (123)(113)(122)

    permettent à un individu d'avoir toutes les paires de produits listées plus haut, mais en occurence les (XY)-paires (11), (12) et la XZ-paire (13) apparaissent 3 fois, alors que toutes les autres paires une fois.

    Quid??
    Nemerle, mathématicopilier de bars, membre du triumvirat du CSTM, 3/4 centre

  9. #9
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour,

    Tout d'abord veuillez m'excuser d'avoir autant tardé à vous répondre mais j'ai été prise par d'autres choses à programmer et je risque de ne pas pouvoir me replonger dans ce problème avant quelques semaines...


    Cela dit, pour répondre à votre question, c'est là qu'est toute la problématique : le but étant de minimiser les différences entre nombres d'apparitions des paires de modalités de deux variables.
    Pour cela, j'avais initialement procédé comme suit :

    1/ Soient ni et nj les nombres de niveaux de deux variables Vi et Vj.

    2/ Ainsi, pour chaque paire de deux variables Vi et Vj, on aura le nombre de couples possibles de deux modalités qui vaudra : Vi * Vj .

    3/ Soient g le nombre de planches vues par un individu et k le nombre de produits contenus dans une planche.
    Alors dans l'idéal, un individu pourra voir au moins R fois chacune des paires de modalités des deux variables Vi et Vj avec : R = quotient de la division euclidienne de g * k par ni * nj .

    J'avais donc commencé à programmer la création de mon plan d'expériences en le replissant en tirant aléatoirement des produits parmis la liste des produits possibles (avec quelques conditions pour empêcher notamment qu'une même planche contienne plusieurs fois le même produit) et à compléter au fur et à mesure des tableaux à double entrée contenant le nombre de fois que chaque couple de modalités de deux variables apparaît. Une fois chaque case de ces tableaux remplie à R (bien sûr, il peut y avoir une valeur de R différentes pour les différents couples de deux variables), je complètais certaines d'entre elles à R+1 jusqu'à ce que mon plan soit complet (je résonne au niveau individu ici).
    Sauf que le problème est que dans certains cas mon algorithme "coinçait" car on tombait sur des cas "impossibles", ie. impossible d'ajouter un nouveau produit satisfaisant les conditions sur les nombres de modalités.


    Voilà, j'espère que cette description est compréhensible
    En tout cas je vous remercie pour votre attention et votre aide.


    Cordialement,

    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  10. #10
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    bonjour, je suis débordé en ce moment mais j'essaie de vous répondre entre les fêtes...
    bàv
    Nemerle, mathématicopilier de bars, membre du triumvirat du CSTM, 3/4 centre

  11. #11
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour,

    Encore merci pour l'intérêt que vous portez à mon problème. Pour le moment je n'ai guère avancé car je suis prise par d'autres obligations professionnelles mais je reviendrais poster ici dès que je m'y serais remise.

    Bonnes fêtes de fin d'année à vous !


    Cordialement,

    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/03/2014, 15h27
  2. Tirage aléatoire avec condition
    Par maxbfox dans le forum Excel
    Réponses: 6
    Dernier message: 08/09/2013, 17h00
  3. [XL-2010] Génération de série aléatoire avec Rnd et Randomize
    Par alejandro27 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/02/2012, 12h31
  4. Réponses: 0
    Dernier message: 07/09/2011, 17h08

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