Excel - Algo/prog pour résoudre une équation

Excel - Algo/prog pour résoudre une équation - Algo - Programmation

Marsh Posté le 08-02-2012 à 11:57:50    

Bonjour à tous,
 
Dans le cadre de mon boulot, je suis amené à devoir résoudre un problème et je dois dire que je ne sais pas par quel bout m’y prendre. En deux mots, voilà la situation :
 
L’objectif est de fixer des objectifs à des commerciaux. Ces objectifs sont répartis entre plusieurs catégories. Sont connus : Le total a atteindre par objectifs et le total a atteindre par commercial.
 
J’ai donc un tableau comme ceci (en réalité, il y a 10 objectifs et 10 commerciaux) :
 

                  Com.1         Com.2       Com.3
Objectif 1         x1.1          y1.2       y1.3      
Objectif 2         x2.1          y2.2       z.2.3
Objectif 3                         etc


 
Je dois donc remplir mon tableau pour faire en sorte que mes agrégats collent entre eux.  
 
Comment procéderiez-vous pour développer une logique de la sorte ?  (je ne cherche pas une formule ou une macro magique, juste déjà un angle sous lequel aborder le problème).
 
Merci d’avance pour l’aide que vous voudriez bien m’apporter et n’hésitez pas à bouger ce fil si il n’est pas à sa place.  


---------------
« Lorsque le bûcheron pénétra dans la forêt avec sa hache, les arbres se dirent : ne nous inquiétons pas, le manche est des nôtres. » | Gérez votre collection de BD en ligne !
Reply

Marsh Posté le 08-02-2012 à 11:57:50   

Reply

Marsh Posté le 23-03-2012 à 19:43:22    

Salut,
 
Si l'OP est encore interesse..
C'est un problème classique de recherche opérationnelle.
http://en.wikipedia.org/wiki/Assignment_problem
(la version en francais est un stub)
C'est soluble facilement avec glpsol de GLPK: il y a plein d'exemples sur:
http://www.ibm.com/developerworks/ [...] y/l-glpk1/
 
J'avais dans ma base de code un modèle semblable:
 

Code :
  1. set EMPLOYES;
  2. set RAYONS;
  3. /* parameters */
  4. param Pref {i in EMPLOYES, j in RAYONS};
  5. param Contrat {i in EMPLOYES};
  6. param BesoinRayon {j in RAYONS};
  7. #horaires = temps sur chaque poste dans chaque
  8. var Horaires {i in EMPLOYES, j in RAYONS} >= 0;
  9. # maximize HoraireOptimal: sum{i in EMPLOYES, j in RAYONS} Horaires[i,j];
  10. #### le minimum pour que ca marche
  11. maximize ConfortHoraireOptimal: sum{i in EMPLOYES, j in RAYONS} Horaires[i,j] *  Pref[i,j];
  12. #### prend en compte les preferences des employes pour chaque poste
  13. # minimize  ConfortHoraireOptimal: sum{i in EMPLOYES, j in RAYONS} Horaires[i,j] *  Pref[i,j];
  14. #### favorise la decouverte de nouveaux horizons pour les employes! (emmerdement maximum...)
  15. #### noter le maximize --> minimize
  16. s.t. constrRayon  {r in RAYONS}   : sum{e in EMPLOYES}  Horaires[e,r] >= BesoinRayon[r];
  17. s.t. constrEmploye{e in EMPLOYES} : sum{r in RAYONS}    Horaires[e,r] <= Contrat[e];
  18. solve;
  19. display{i in EMPLOYES, j in RAYONS}: Horaires[i,j];
  20. data;
  21. set EMPLOYES := Kevin Sophie Fernand;
  22. set RAYONS   := Telephone Maison Livres;
  23. #heures travaillees:
  24. param Contrat:=
  25.   Kevin 35
  26.   Sophie 15
  27.   Fernand 35;
  28. # Heures necessaires:
  29. param BesoinRayon:=
  30.   Telephone 35
  31.   Maison 25
  32.   Livres 25;
  33. param Pref (tr):
  34.             Kevin Sophie Fernand :=
  35. Telephone     3      1     2     
  36. Maison        2      2     1
  37. Livres       1      3      3;
  38. end;


 
Résolution: (besoin du programme glpsol fourni avec GLPK, The GNU Linear Programming Kit.)

Code :
  1. $ glpsol --math assignementProblem.mod
  2. GLPSOL: GLPK LP/MIP Solver, v4.43
  3. Parameter(s) specified in the command line:
  4. --math assignementProblem.mod
  5. Reading model section from assignementProblem.mod...
  6. Reading data section from assignementProblem.mod...
  7. 54 lines were read
  8. Generating ConfortHoraireOptimal...
  9. Generating constrRayon...
  10. Generating constrEmploye...
  11. Model has been successfully generated
  12. GLPK Simplex Optimizer, v4.43
  13. 7 rows, 9 columns, 27 non-zeros
  14. Preprocessing...
  15. 6 rows, 9 columns, 18 non-zeros
  16. Scaling...
  17. A: min|aij| =  1.000e+00  max|aij| =  1.000e+00  ratio =  1.000e+00
  18. Problem data seem to be well scaled
  19. Constructing initial basis...
  20. Size of triangular part = 6
  21.       0: obj =   0.000000000e+00  infeas =  8.500e+01 (0)
  22. *     5: obj =   2.200000000e+02  infeas =  0.000e+00 (0)
  23. *     6: obj =   2.200000000e+02  infeas =  0.000e+00 (0)
  24. OPTIMAL SOLUTION FOUND
  25. Time used:   0.0 secs
  26. Memory used: 0.1 Mb (134225 bytes)
  27. Display statement at line 29
  28. Horaires[Kevin,Telephone] = 35
  29. Horaires[Kevin,Maison] = 0
  30. Horaires[Kevin,Livres] = 0
  31. Horaires[Sophie,Telephone] = 0
  32. Horaires[Sophie,Maison] = 15
  33. Horaires[Sophie,Livres] = 0
  34. Horaires[Fernand,Telephone] = 0
  35. Horaires[Fernand,Maison] = 10
  36. Horaires[Fernand,Livres] = 25
  37. Model has been successfully processed


 
Et en  variant la fonction objectif:

Code :
  1. Horaires[Kevin,Telephone] = 10
  2. Horaires[Kevin,Maison] = 0
  3. Horaires[Kevin,Livres] = 25
  4. Horaires[Sophie,Telephone] = 15
  5. Horaires[Sophie,Maison] = 0
  6. Horaires[Sophie,Livres] = 0
  7. Horaires[Fernand,Telephone] = 10
  8. Horaires[Fernand,Maison] = 25
  9. Horaires[Fernand,Livres] = 0


 
Excel possède sûrement un solver LP. Il te suffit de regarder comment créer des contraintes et fixer la fonction objectif et d'adapter ma méthode, mais ce n'est pas forcement trivial.
--  
al

Reply

Marsh Posté le 26-03-2012 à 09:57:49    

L'algo s'appelle le Simplexe : http://fr.wikipedia.org/wiki/Algorithme_du_simplexe


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 26-03-2012 à 13:53:47    

Merci beaucoup pour vos réponses. je vais essayer de mettre ça en pratique !
 
Je me disais bien que quelque chose comme ça devait exister !


---------------
« Lorsque le bûcheron pénétra dans la forêt avec sa hache, les arbres se dirent : ne nous inquiétons pas, le manche est des nôtres. » | Gérez votre collection de BD en ligne !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed