Analiza wrażliwości w PuLP

Wprowadzenie do optymalizacji w Pythonie

Jasmin Ludolf

Content Developer

Analiza wrażliwości w programowaniu liniowym

  • Analiza wrażliwości zmienia jeden parametr, aby obserwować zmiany w wyniku
  • Programowanie liniowe: jak bardzo zmienia się cel
  • Trzy podejścia:
    1. Zmiana współczynnika w funkcji celu
    2. Zmiana współczynnika w ograniczeniu
    3. Zmiana wyrazu wolnego w ograniczeniu
  • Rozwiązanie modelu oryginalnego i zmienionego
  • Użyj PuLP!

Ikona wskaźnika z zielonym sektorem po lewej stronie reprezentująca analizę wrażliwości

Wprowadzenie do optymalizacji w Pythonie

Definicje

  • Ograniczenie:
    • Spełnione z równością: aktywne, wiążące
    • Spełnione z ostrą nierównością: nieaktywne, niewiążące, z luzem
  • Luz (rzeczownik):
    • Wartość dodana do lewej strony ograniczenia, aby uczynić je wiążącym
  • Cena dualna:
    • Krańcowy wzrost celu względem prawej strony ograniczenia
Wprowadzenie do optymalizacji w Pythonie

Problem diety w PuLP

Żywność Koszt ($/lb) Białko (%) Tłuszcz (%)
kukurydza 0.11 10 2.5
soja 0.28 40 1

 

  • Zalecenie: min. 17% białka, 2% tłuszczu, 7 lb jedzenia
  • Cel: $0.11C + 0.28S$
  • Białko: $10C+40S \geq 17(C+S)$
  • Tłuszcz: $2.5C + S \geq 2(C+S)$
  • Waga: $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()
Wprowadzenie do optymalizacji w Pythonie

Luz i cena dualna w 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
Wprowadzenie do optymalizacji w Pythonie

Czas na ćwiczenia!

Wprowadzenie do optymalizacji w Pythonie

Preparing Video For Download...