Optimisation linéaire

, par MiKaël Navarro

Mon problème est le suivant :

  • J’ai 190.00€ de chèque culture par le CE
  • Je souhaiterais acheter la suite de la collection Elfes, Nains, Orcs, Mages en BD
  • Or ils ne sont pas tous au même prix : y-en a à 19.95€, à 15.50€ et à 14.95€
  • En faisant le listing des ouvrages qu’il me manque j’obtient :
    • 11 BDs à 19.95€, 4 à 15.50€ et 3 à 14.95€
  • Quelle est donc la meilleur combinaison de BDs à 19.95€, 15.50€ et 14.95€ pour atteindre au plus proche mes 190.00€ de chèques ?

Ceci est un problème d’optimisation linéaire (https://fr.wikipedia.org/wiki/Optimisation_lin%C3%A9aire) :

avec x, y, z des entiers positifs
on souhaite minimiser la fonction affine 15.95x + 15.50y + 14.95z
avec les contraintes x <= 11, y <= 4, z <= 3
et de sorte que 15.95x + 15.50y + 14.95z >= 190.00

Ci-joint le programme Python utilisant la lib Pulp donnant la solution optimale :
python3 ./linear_prog.py 15.95 15.5 14.95 190.00 11 4 3 -m

(x= 9.0, y= 3.0, z= 0.0)
e= 190.04999999999998

P.-S.

Avec CVXOPT 1.2.7 et SciPy 1.8.0 (cf. code source) on ne peut obtenir de solutions avec des nombres entiers :(
À partir de SciPy 1.9.0 cependant la possibilité a été rajoutée.