Modellierungskurs
Abschlussbedingungen
Implementierungstips WLP-Verständnis
Hier finden Sie, wie Sie Möglichkeiten, wie Sie die Verständnisfragen mit Implementierungen in Python hätten lösen können. Nehmen Sie sich etwas Zeit und lesen und verstehen Sie die Vorschläge. Danach gehen Sie bitte weiter zur Case Study
Verdoppeln von Nachfrage
(Was passiert, wenn Sie die Nachfrage verdoppeln?)
Entweder Sie ersetzen alle Werte für b per Hand in der Parameterdeklaration b = [10, 6, 14]. Sie können aber auch eine Python Funktion nehmen:
```lang:python;;# Nachfrage der Kunden j
b = [5, 3, 7]
# Verdoppelt die Nachfrage und überschreibt den initialen Wert
b = [value * 2 for value in b]```
b = [5, 3, 7]
# Verdoppelt die Nachfrage und überschreibt den initialen Wert
b = [value * 2 for value in b]```
Nach dem Einsetzen sollte Sie die folgenden Ausgaben in Ihrer Konsole lesen:
```Solution count 0
Model is infeasible[...]
AttributeError: Unable to retrieve attribute 'objVal'```
Der Fehler beim Ausführen kann behoben werden, wenn der Status des Modells abgefragt wird:
```lang:python;;if model_general.Status == GRB.Status.INFEASIBLE:
print('Das Modell can nicht gelöst werden')
else:
"""
Ausgabe Lösung
"""```
print('Das Modell can nicht gelöst werden')
else:
"""
Ausgabe Lösung
"""```
Transportkosten Anteil Berechnen
(Wie viel Prozent machen die Transportkosten von den Gesamtkosten aus?)
Die Kosten können mit ähnlich wie in der Gurobi Zielfunktion aufsummiert werden. Statt Gurobi's quicksum benutzen wir Pythons sum mit dem y[i].x Wert. Danach berechnen wir den Anteil an den Gesamtkosten, gegeben durch model_general.objVal.
```lang:python;;fixed_cost = sum(y[i].x * f[i] for i in M)
percentage_fixed = fixed_cost / model_general.objVal * 100
transport_cost = sum(c[i][j] * x[i, j].x for i in M for j in N)
percentage_transport = transport_cost / model_general.objVal * 100
# %.2f formatiert eine Zahl auf zwei Nachkommastellen. %% gibt einfach nur % aus
print("Transportkosten: %.2f (%.2f %%) und Fixkosten: %.2f (%.2f %%)" %
(transport_cost, percentage_transport, fixed_cost, percentage_fixed))```
percentage_fixed = fixed_cost / model_general.objVal * 100
transport_cost = sum(c[i][j] * x[i, j].x for i in M for j in N)
percentage_transport = transport_cost / model_general.objVal * 100
# %.2f formatiert eine Zahl auf zwei Nachkommastellen. %% gibt einfach nur % aus
print("Transportkosten: %.2f (%.2f %%) und Fixkosten: %.2f (%.2f %%)" %
(transport_cost, percentage_transport, fixed_cost, percentage_fixed))```
Hinzufügen von Extra Kunden
(Sie fügen einen neuen Kunden hinzu. Welche Aussagen sind wahr?)
Die Erweiterung ist einfach. Nachfrage b und Transportmatrix c muss wie folgt ergänzt werden.
```lang:python;;# Nachfrage der Kunden
b = [5, 3, 7, b4]
# Kosten für die Lieferung einer Einheit von Standort i zu Kunde j
c = [[9, 6, 7,c14],
[7, 3, 6,c24]]
"""
Definition Modell
"""
model_general = Model("WLP Vorlesung allgemein")
m = 2 # Mögliche Standorte i
n = 4 # Kunden j```
b = [5, 3, 7, b4]
# Kosten für die Lieferung einer Einheit von Standort i zu Kunde j
c = [[9, 6, 7,c14],
[7, 3, 6,c24]]
"""
Definition Modell
"""
model_general = Model("WLP Vorlesung allgemein")
m = 2 # Mögliche Standorte i
n = 4 # Kunden j```
Ändern der Zielfunktion
(Jedes Lager hat fixe administrative Kosten von 3 GE. Diese fallen nur an, wenn das Lager geöffnet wird. Ändern Sie die Zielfunktion entsprechend. Wie hoch ist nun der Zielfunktionswert?)
Sie können einfach den Term quicksum(y[i] * 3 for i in M) zur Zielfunktion hinzufügen.
```lang:python;;## Zielfunktion ##############################################################
model_general.setObjective(quicksum(c[i][j] * x[i, j] for i in M for j in N)
+ quicksum(y[i] * f[i] for i in M)
+ quicksum(y[i] * 3 for i in M), GRB.MINIMIZE)```
model_general.setObjective(quicksum(c[i][j] * x[i, j] for i in M for j in N)
+ quicksum(y[i] * f[i] for i in M)
+ quicksum(y[i] * 3 for i in M), GRB.MINIMIZE)```