Partage
  • Partager sur Facebook
  • Partager sur Twitter

Allocation avec contraintes et exclusions

    11 décembre 2018 à 22:36:54

    Bonjour,

    Voici mon problème ( voir la fin du post pour avoir un exemple concret qui aidera a comprendre bien mieux mon problème).

    Pour x dimensions j'ai y valeurs. J'assigne a ces valeurs un pourcentage du budget total et je les combine avec toutes les autres valeurs de toutes les dimensions auquel cette valeur n'appartient pas. Je souhaite obtenir le budget pour chaque combinaison . Il m'est possible d'éliminer certaines combinaisons.

    Voici mon problème :

    J'ai découvert qu'il y avait plusieurs solutions pour mon problème donc potentiellement une infinité. De plus je souhaiterais le modéliser (équation ? ) mais n'y arrive pas.

    Pourriez vous m'aider ? Ne serait-ce qu'en caractérisant ce type de problème mathématiques ou en m'aiguillant sur des pistes.

     Voici l'exemple.

    J'ai deux dimensions : dimensions "LETTRE" et dimensions "CHIFFRE".

    La dimensions LETTRE contient les attributs suivants : A, B, C, D

    La dimensions CHIFFRE contient les attributs suivants : _1, _2, _3, _4

    Voici les assignations budgétaires :

    BUDGET TOTAL : 400

    A : 15%

    B : 10%

    C : 50%

    D : 25%

    _1 : 20%

    _2 : 40%

    _3 : 10% 

    _4 : 30%

    Par default en les combiants tous on obtient (4x4) 16 combinaisons (A et _1, A et _2 etc etc ).

    Pour trouver le budget de chaque combinaison il suffit de faire:

    BUDGET_TOTAL * LETTRE_POURCENTAGE * CHIFFRE_POURCENTAGE

    Seulement si je décide de supprimer les combinaisons : 

    C et _2

    A et _4

    cela se complique, ma formule ne fonctionne plus.

    Car la somme du budget des attributs doit respecter les pourcentage initialement définis.

    J'ai réussi à la main a trouver une solution pour cette exemple mais je souhaiterais la mettre en formule . Je suis bien conscient qu'a un certains moment il n'y a plus de solution possible.

    Voici un lien vers une feuille excel qui reprends le problème et y montre la solution que j'ai trouvée. J'ai d'abord retiré la combinaison A et _4 puis la combinaison C et _2.

    https://docs.google.com/spreadsheets/d/1qeOOsLOeE9QMHZUOG1uH5cjPbiDpxKKOFb8tBdPOP6w/edit?usp=sharing

    Par avance, merci de votre aide.

    • Partager sur Facebook
    • Partager sur Twitter
      12 décembre 2018 à 0:11:22

      Au départ , tu as un système d'équations linéaires avec 16 inconnues, et 8 équations. Je ets l'expression 'barbare' Système d'équations linéaires, parce que en recherchant cette expression, tu peux trouver plein de choses. 

      Les 16 inconnues, ce sont a1, a2, a3 ... d3, d4

      Et les 8 équations, ce sont a1+a2+a3+a4=0.15  etc etc  etc  a4+b4+c4+d4=0.30 

      Avec les 2 contraintes supplémentaire, on passe à un système à 16 inconnues, et 10 équations ; les 2 équations supplémentaires, ce sont a4=0 et c2=0. On peut aussi dire qu'on passe à un sustème avec toujours 8 équations, mais 14 inconnues.

      Dans ces types de systèmes d'équation, quand il y a plus d'inconnues que d'équations, il y a effectivement une infinité de solutions (sauf cas particulier... )

      Ici, par rapport au cas général, tu as une contrainte supplémentaire. Tes 16 inconnues doivent être entre 0 et 1.

      Voici une démarche vaguement 'méthodique'.

      Tu as la solution initiale (multiplication des pourcentages, comme tu l'as fait).

      On veut avoir 0 dans la cas a4. Admettons qu'on avait 13 dans cette cellule. On va choisir 4 cases qui forment un rectangle à partir de cette case a4. Par exemple (a4 d4 a3 d3) Puisqu'on enlève 13 dans la case a4, on va ajouter 13 dans les 2 cases a3 et d4, et on va enlever 13 à la cellule d3. En procédant comme ça, on est sûr que les sommes des 4 lignes de la matrice ou des 4 colonnes de la matrice sont inchangées.

      Si en cellule d3, on avait un nombre plus petit que 13, 11 par exemple, on va enlever /ajouter 11 seulement à nos 4 cases. Et on va recommencer l'opération avec un autre rectangle.

      Et tu recommences l'opération avec la cellule c2...  tu choisis un rectangle qui commence par c2... mais attention, interdit de toucher à la case a4. 

      Il doit y avoir des méthodes qui permettent de respecter au mieux les proportions initiales... mais c'est plus compliqué.

      • Partager sur Facebook
      • Partager sur Twitter
        21 décembre 2018 à 10:54:26

        Oksuper ! J'ai fais des tests ta méthode est parfaite. Elle fonctionne toujours.

        Dans le cas ou j'aurais 3 dimensions : (a;b;c;d) (1;2;3;4) (zz1;zz2;zz3) par exemple.

        Dois je continuer a faire des "rectangles" avec 4 cases ou le nombre de cases augmente ? 

        J'ai essayé en faisant un rectangle sur 3 dimensions ça fonctionne mais je me demande si en faisant un "rectangle" sur 6 ou 8 cases, cela ne serait pas mieux ? 

         Merci encore pour ton aide précieuse

        • Partager sur Facebook
        • Partager sur Twitter
          21 décembre 2018 à 15:04:15

          Si tu as 3 dimensions, on ne parle plus de carrés ni de rectangle, mais de Cube (ou de parallélépipède rectangle pour être plus précis). Ca doit être ça, ce que tu appelles un rectangle sur 3 dimensions.

          En 3 dimensions, il faut définir quelles sont tes contraintes. 

          La contrainte, c'est : (A) pour une valeur de zz1, la somme des 16 cases correspondant à ce zz1 est fixée.

          Ou bien : (B) pour une valeur de zz1 et une valeur de a, la somme des 4 cases correpondant à ce zz1 et ce a est fixée.

          Et idem sur les autres dimensions.

          Selon qu'on est dans le scénario (A) ou (B) , les méthodes ne seront probablement pas les mêmes. 

          Encore que... si on trouve une solution au problème (B), cette solution marche aussi pour le problème (A).

          • Partager sur Facebook
          • Partager sur Twitter

          Allocation avec contraintes et exclusions

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown