Monsieur Excel
Pour tout savoir faire sur Excel !

01 décembre 2010

Optimisation avec le solveur

Après notre première incursion auprès du solveur il y a quatre jours, nous allons découvrir aujourd’hui sa capacité à dénicher la solution d’un problème d’optimisation.

Nous avons trois usines et quatre entrepôts (A, B, C et D). Le tableau en B2:E14 représente les coûts unitaires de transport de chaque usine vers chaque entrepôt. La ligne 5 représente les besoins de chaque entrepôt et la colonne G ce qui est disponible dans chaque usine.

Le problème à résoudre est de trouver les quantités à transporter (bloc B9:F11) qui vont, en respectant les contraintes de besoin et de disponibilité, minimiser le coût total en G14, évalué par la formule =sommeprod(B2:F4;B9:F11). En B12:F12 et G9:G11 enfin, nous avons les sommes verticales et horizontales.

Le problème est résolu aisément à l’aide du solveur comme nous le voyons ci-dessous avec le résultat, puis avec le réglage du solveur qui a permis de l’obtenir :

Remarque – Il ne faut pas vous contenter des réglages ci-dessus ! Vous devez aussi, avant de cliquer dans le bouton « Résoudre », passer par le bouton
« Options » et cocher les options « Modèle supposé linéaire » et « Supposé non-négatif ».

Si vous oubliez la dernière option, le solveur d’Excel ne parvient pas à converger ! En effet, il essaye en vain de transporter des quantités négatives pour réduire le coût total.

Si vous oubliez de spécifier que le modèle est linéaire, il y aura de petites erreurs d’arrondis et, en outre, vous ne bénéficierez pas – après la résolution – de toutes les informations utiles (en particulier, des valeurs marginales).

6 Commentaire(s):

  • J'ai modifié les coûts unitaires en mettant des valeurs décimales (générées par ALEA()) et une chose me parait étonnante, on obtient toujours des résultats en nombres entiers alors que cette contrainte n'est pas mentionnée dans le solveur.
    C'est le cas si on livre des palettes, mais c'est l'inverse si on livre de la farine en vrac.

    Y a-t-il une explication théorique à ce résultat ? Le résultat du solveur est-il vraiment l'optimum ?

    By Anonymous cduigou, sur 9:26 AM  

  • Eh oui ! C'est une propriété mathématique du "problème de transport", et même de tout programme linéaire où tous les coefficients des variables, dans toutes les contraintes, sont des 0 et des 1, et où les côtés droits de toutes les contraintes sont des nombres entiers.

    On prouve que, dans une telle situation, la solution optimale est naturellement entière.

    Dans un article proche, je vous dirai quelles sont les limites de fiabilité du solveur d'Excel.

    By Blogger Hervé Thiriez, sur 7:54 AM  

  • Bonjour,
    Merci pour cette belle illustration mais je n'arrive pas à avoir le même résultat que vous.
    Pouvez vous m'envoyer le fichier source ou me donne plus de précision?

    Merci

    By Blogger Geo, sur 5:38 PM  

  • Dans les options du solveur, avez-vous pensé à cocher que le modèle était linéaire et non négatif ?

    C'est probablement cela qui manque...

    By Blogger Hervé Thiriez, sur 8:03 PM  

  • Oui j'ai bien coché les options.
    J'ai recommencé maintes fois mais j'ai toujours 0 comme résultat

    By Blogger Geo, sur 5:58 PM  

  • Bonjour,
    Réponse à un vieil article. Si ça peut aider d'autres lecteurs actuels qui auraient le même problème que la personne du dernier commentaire. J'ai pu retrouver la même erreur si on oublie de mettre les sommes dans la ligne 12 (SOMME(B9:B11) en cellule B12, etc).

    By Anonymous Antoine, sur 2:13 PM  

Enregistrer un commentaire

<< Accueil