Känslighetsanalys i PuLP

Introduktion till optimering i Python

Jasmin Ludolf

Content Developer

Känslighetsanalys inom linjärprogrammering

  • Känslighetsanalys ändrar en parameter för att se hur resultatet påverkas
  • Linjärprogrammering: hur mycket målfunktionen förändras
  • Tre metoder:
    1. Ändra en koefficient i målfunktionen
    2. Ändra en koefficient i en bivillkor
    3. Ändra konstanttermen i ett bivillkor
  • Lös originalet och den ändrade modellen
  • Använd PuLP!

Mätarindikator med grön sektor till vänster som representerar känslighetsanalys

Introduktion till optimering i Python

Definitioner

  • Bivillkor:
    • Uppfylls med likhet: aktivt, bindande
    • Uppfylls med strikt olikhet: inaktivt, icke-bindande, slack (adj.)
  • Slack (subst.):
    • Det belopp som läggs till vänsterledet för att göra bivillkoret bindande
  • Skuggpris:
    • Marginell ökning av målfunktionen med avseende på högerledet i bivillkoret
Introduktion till optimering i Python

Kostproblemet i PuLP

Livsmedel Kostnad ($/lb) Protein (%) Fett (%)
corn 0.11 10 2.5
soybean 0.28 40 1

 

  • Rekommendation: minst 17 % protein, 2 % fett, 7 lb mat
  • Målfunktion: $0.11C + 0.28S$
  • Protein: $10C+40S \geq 17(C+S)$
  • Fett: $2.5C + S \geq 2(C+S)$
  • Vikt: $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()
Introduktion till optimering i Python

Slack och skuggpris i 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
Introduktion till optimering i Python

Nu kör vi en övning!

Introduktion till optimering i Python

Preparing Video For Download...