Analiza de sensibilitate în PuLP

Introducere în optimizare în Python

Jasmin Ludolf

Content Developer

Analiza de sensibilitate în programarea liniară

  • Analiza de sensibilitate modifică un parametru pentru a observa schimbările în rezultat
  • Programare liniară: cât se modifică obiectivul
  • Trei abordări:
    1. Modificarea unui coeficient din obiectiv
    2. Modificarea unui coeficient dintr-o restricție
    3. Modificarea termenului constant dintr-o restricție
  • Rezolvați modelul original și cel modificat
  • Utilizați PuLP!

Indicator de tip manometru cu sector verde la stânga, reprezentând sensibilitatea

Introducere în optimizare în Python

Definiții

  • Restricție:
    • Satisfăcută cu egalitate: activă, obligatorie
    • Satisfăcută cu inegalitate strictă: inactivă, neobligatorie, cu rezervă (adj.)
  • Rezervă (subst.):
    • Valoarea care trebuie adăugată în stânga restricției pentru a o face obligatorie
  • Prețul umbră:
    • Creșterea marginală a obiectivului față de partea dreaptă a restricției
Introducere în optimizare în Python

Problema dietei în PuLP

Aliment Cost ($/lb) Proteine (%) Grăsimi (%)
porumb 0.11 10 2.5
soia 0.28 40 1

 

  • Recomandare: minim 17% proteine, 2% grăsimi, 7 lb aliment
  • Obiectiv: $0.11C + 0.28S$
  • Proteine: $10C+40S \geq 17(C+S)$
  • Grăsimi: $2.5C + S \geq 2(C+S)$
  • Greutate: $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()
Introducere în optimizare în Python

Rezervă și preț umbră în 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
Introducere în optimizare în Python

Să exersăm!

Introducere în optimizare în Python

Preparing Video For Download...