Gevoeligheidsanalyse in PuLP

Introductie tot optimalisatie in Python

Jasmin Ludolf

Content Developer

Gevoeligheidsanalyse in lineaire programmering

  • Gevoeligheidsanalyse: één parameter wijzigen om te zien wat er gebeurt
  • Lineaire programmering: hoeveel verandert de doelstelling
  • Drie manieren:
    1. Coëfficiënt in de doelstelling wijzigen
    2. Coëfficiënt in een restrictie wijzigen
    3. Constante term in een restrictie wijzigen
  • Los het oorspronkelijke en aangepaste model op
  • Gebruik PuLP!

Meter met groene linkersector om gevoeligheid weer te geven

Introductie tot optimalisatie in Python

Definities

  • Restrictie:
    • Geldt met gelijkheid: actief, bindend
    • Geldt met strikte ongelijkheid: niet-actief, niet-bindend, slack (bn.)
  • Slack (zn.):
    • Hoeveelheid die links van de restrictie moet worden toegevoegd om bindend te maken
  • Schaduwprijs:
    • Marginale toename van de doelstelling t.o.v. de rechterkant van de restrictie
Introductie tot optimalisatie in Python

Het dieetprobleem in PuLP

Voer Kosten ($/lb) Eiwit (%) Vet (%)
maïs 0.11 10 2.5
sojaboon 0.28 40 1

 

  • Aanbeveling: minstens 17% eiwit, 2% vet, 7 lb voer
  • Doel: $0.11C + 0.28S$
  • Eiwit: $10C+40S \geq 17(C+S)$
  • Vet: $2.5C + S \geq 2(C+S)$
  • Gewicht: $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()
Introductie tot optimalisatie in Python

Slack en schaduwprijs in 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
Introductie tot optimalisatie in Python

Laten we oefenen!

Introductie tot optimalisatie in Python

Preparing Video For Download...