Analyse de sensibilité avec PuLP

Introduction à l'optimisation en Python

Jasmin Ludolf

Content Developer

Analyse de sensibilité en programmation linéaire

  • L'analyse de sensibilité fait varier un paramètre pour voir l'effet sur le résultat
  • Programmation linéaire : de combien l'objectif change
  • Trois approches :
    1. Modifier un coefficient de l'objectif
    2. Modifier un coefficient d'une contrainte
    3. Modifier la constante d'une contrainte
  • Résoudre le modèle initial et le modèle modifié
  • Utiliser PuLP !

Icône de jauge avec secteur vert à gauche représentant la sensibilité

Introduction à l'optimisation en Python

Définitions

  • Contrainte :
    • Égalité satisfaite : active, contraignante
    • Inégalité stricte satisfaite : inactive, non contraignante, « slack » (adj.)
  • Slack (nom) :
    • Quantité à ajouter au membre de gauche pour rendre la contrainte contraignante
  • Prix d'ombre :
    • Hausse marginale de l'objectif par rapport au membre de droite de la contrainte
Introduction à l'optimisation en Python

Le problème du régime avec PuLP

Aliment Coût ($/lb) Protéines (%) Lipides (%)
maïs 0.11 10 2.5
soja 0.28 40 1

 

  • Recommandation : au moins 17 % de protéines, 2 % de lipides, 7 lb de nourriture
  • Objectif : $0.11C + 0.28S$
  • Protéines : $10C+40S \geq 17(C+S)$
  • Lipides : $2.5C + S \geq 2(C+S)$
  • Poids : $C + S \geq 7$
from pulp import *

model = LpProblem('diet', LpMinimize)

C = LpVariable('C', lowBound=0)
S = LpVariable('S', lowBound=0)

model += 0.11*C + 0.28*S

model += 10*C + 40*S >= 17 * (C+S), 'Protein' 
model += 2.5*C + S >= 2 * (C+S), 'Fat'
model += C + S >= 7, 'Weight' 

model.solve()
Introduction à l'optimisation en Python

Slack et prix d'ombre dans PuLP

print(f"Status: {LpStatus[model.status]}\n")
for name, c in model.constraints.items():
    print(f"{name}: slack = {c.slack:.2f}, shadow price = {c.pi:.2f}")
Status: Optimal
Protein: slack = -0.00, shadow price = 0.01

Fat: slack = -1.05, shadow price = 0.00
Weight: slack = -0.00, shadow price = 0.15
Introduction à l'optimisation en Python

Passons à la pratique !

Introduction à l'optimisation en Python

Preparing Video For Download...