Lohnt sich eine Stunde mehr Ofenzeit?
Die Sensitivitätsanalyse zeigt, wie sich der beste Plan ändert, wenn sich eine Grenze verschiebt. Der Schattenpreis sagt, wie viel Gewinn eine zusätzliche Einheit eines knappen Vorrats bringt.
Damit entscheidet die Bäckerei, ob ein zusätzlicher Ofenabend oder ein Sack Mehl mehr sein Geld wert ist.
Am Ende dieser Lektion
Notiz
Ich kann sagen, wie sich der beste Gewinn ändert, wenn ich einen Vorrat um eine Einheit erhöhe.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Sensitivitätsanalyse | die Frage, wie empfindlich die Lösung auf Änderungen reagiert |
| Schattenpreis | der Mehrgewinn durch eine zusätzliche Einheit eines Vorrats |
| Bindende Grenze | eine Grenze, die im besten Plan ganz ausgenutzt wird |
| Reserve | der Teil eines Vorrats, der im besten Plan übrig bleibt |
| Gültigkeitsbereich | die Spanne, in der ein Schattenpreis stimmt |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Eine bindende Grenze ist ganz ausgenutzt
Im besten Plan (2, 2) braucht die Bäckerei alle 4 Ofenstunden und alle 6 Kilo Teig. Diese beiden Grenzen sind bindend.
Dazu kommt eine dritte Grenze: Die Theke fasst höchstens 5 Bleche Brötchen. Der Plan nutzt nur 2 davon. Die übrigen 3 sind die Reserve, und die Grenze bindet nicht.
Beispiel: Verbrauch und Reserve im besten Plan
| Grenze | Verbrauch | Vorrat | Reserve | Bindend? |
|---|---|---|---|---|
| Ofen in Stunden | 4 | 4 | 0 | ja |
| Teig in Kilo | 6 | 6 | 0 | ja |
| Theke in Blechen Brötchen | 2 | 5 | 3 | nein |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Der Schattenpreis ist der Gewinn einer weiteren Einheit
Der Schattenpreis einer Grenze sagt, um wie viel der beste Gewinn steigt, wenn ihr Vorrat um eine Einheit wächst. Sie berechnen ihn, indem Sie das Modell einmal mit dem größeren Vorrat lösen.
Bei einer Grenze mit Reserve ist er 0: Mehr davon nützt nichts, weil schon etwas übrig ist.
Der Ofen läuft 5 statt 4 Stunden
docker exec jupyter python3 -c "from scipy.optimize import linprog; r = linprog([-50, -30], A_ub=[[1, 1], [2, 1]], b_ub=[5, 6]); print(-r.fun)"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Der Teig reicht für 7 statt 6 Kilo
docker exec jupyter python3 -c "from scipy.optimize import linprog; r = linprog([-50, -30], A_ub=[[1, 1], [2, 1]], b_ub=[4, 7]); print(-r.fun)"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Aus 160 Euro werden 170 und 180
Der beste Gewinn war 160 Euro. Mit 5 Ofenstunden sind es 170, die Stunde bringt also 10 Euro. Mit 7 Kilo Teig sind es 180, das Kilo bringt 20 Euro.
Ein Kilo Teig ist hier doppelt so viel wert wie eine Ofenstunde. Wer nur eines zukaufen kann, kauft Teig.
Alle drei Schattenpreise auf einmal lesen
docker exec jupyter python3 -c "from scipy.optimize import linprog; r = linprog([-50, -30], A_ub=[[1, 1], [2, 1], [1, 0]], b_ub=[4, 6, 5]); print(-r.ineqlin.marginals)"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein Schattenpreis gilt nur ein Stück weit
Der Schattenpreis stimmt nur, solange die beste Ecke dieselben Grenzen behält. Bei der Bäckerei gilt die 10 Euro je Ofenstunde zwischen 4 und 6 Stunden.
Danach reicht der Teig nicht mehr: Mehr Ofenzeit bringt nichts, denn der Teig ist dann die Bremse. Diese Spanne heißt Gültigkeitsbereich.
Beispiel: bester Gewinn bei wachsender Ofenzeit
| Ofen in Stunden | Bester Gewinn in Euro | Mehrgewinn gegenüber vorher |
|---|---|---|
| 4 | 160 | |
| 5 | 170 | 10 |
| 6 | 180 | 10 |
| 7 | 180 | 0 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein häufiger Fehler
Warnung
Viele denken, der Schattenpreis gelte für beliebig viele Einheiten. Er gilt nur im Gültigkeitsbereich. Wer 10 Stunden Ofenzeit zukauft, rechnet mit 100 Euro Mehrgewinn und bekommt 20.
Den Gewinn bei mehr Ofenzeit ausprobieren
# Probieren statt Ecken: alle Pläne in Halbschritten.
def bester_gewinn(ofen_stunden):
bester = 0
for a in range(0, 25):
for b in range(0, 25):
x = a / 2
y = b / 2
if x + y <= ofen_stunden and 2 * x + y <= 6:
gewinn = 50 * x + 30 * y
if gewinn > bester:
bester = gewinn
return bester
for ofen in [4, 5, 6, 7]:
print("Ofen", ofen, "Stunden: Gewinn", bester_gewinn(ofen))
# Ändern Sie in der Bedingung die 6 des Teigs in 8 und starten Sie erneut.
# Ab welcher Ofenzeit steigt der Gewinn jetzt nicht mehr?