Übung 12: Algebraische Modellierung II

Grundlagen Operations Research

Video zur Übung

Aufgabe 1

Die dynamische Losgrößenplanung (aus Vorlesung 11) soll um die Berücksichtigung der nachfolgenden brauereispezifischen Restriktionen erweitert werden:

  1. Berücksichtigung eines Mehrproduktportfolios
  2. Berücksichtigung eines mehrstufigen Produktionsprozesses
  3. Berücksichtigung von Produktions- und Lagerkapazitäten
  4. Berücksichtigung von Kapazitätserweiterungen
  5. Berücksichtigung von Vorlaufzeiten
  6. Berücksichtigung von diskreten Losgrößen
  7. Berücksichtigung von Mindestlosgrößen, Sicherheitsbeständen und Haltbarkeiten
  8. Berücksichtigung von Tankressourcen
HinweisProduktionsprozess einer Brauerei

Drei Produktionsstufen (Basisbiere, Sortenbiere, Fertigbiere), drei Produktionsressourcen (Brauhaus, Filtration, Abfüllung) und drei Lagerressourcen (Lagertanks, Puffertanks, Warenlager), vgl. das Brauerei-Fallbeispiel in Vorlesung 12.

Als Ausgangspunkt dient das Grundmodell der dynamischen Losgrößenplanung:

Mengen: TT: Planungsperioden (Index t=1,,|T|t = 1, \dots, |T|). Parameter: dtd_t: Nachfrage in Periode tt; ff: fixe Rüstkosten; hh: Lagerhaltungskostensatz; uu: hinreichend große Obergrenze der Losgröße (Big M, z. B. u=tdtu = \sum_t d_t; Vorlesung 11 nennt sie bb). Variablen: Xt=1X_t = 1, wenn in Periode tt gerüstet wird (0, sonst); ItI_t: Lagerbestand am Ende der Periode tt (Anfangsbestand I0=0I_0 = 0); QtQ_t: Produktionsmenge in Periode tt.

minimiere F=tfXt+hItu.d.N.It1+QtIt=dttQtuXttQt,It0tXt{0,1}t \begin{aligned} \text{minimiere } \; & F = \sum_t f \cdot X_t + h \cdot I_t \\ \text{u.d.N.} \quad & I_{t-1} + Q_t - I_t = d_t && \forall t \\ & Q_t \le u \cdot X_t && \forall t \\ & Q_t, I_t \ge 0 && \forall t \\ & X_t \in \{0, 1\} && \forall t \end{aligned}

Formulieren Sie für jede der acht Erweiterungen die notwendige Notation und die zusätzlichen bzw. angepassten Nebenbedingungen.

Ihre Lösung in Julia: Grundmodell

Implementieren Sie zunächst das Grundmodell mit den Daten aus Vorlesung 11 und nennen Sie Ihr Modell modell:

using JuMP, HiGHS

d = [140, 110, 190, 120, 200, 110, 250, 100, 220, 100, 180, 130]
f, h = 500, 1

modell = Model(HiGHS.Optimizer)
set_silent(modell)

# IHR CODE HIER

optimize!(modell)
# Führen Sie diese Zelle nach Ihrer Lösung aus:
@assert isapprox(objective_value(modell), 3670.0; atol = 1e-3) "Noch nicht korrekt, Lagerbilanz: I[t-1] + Q[t] - I[t] = d[t] mit I0 = 0."
println("Grundmodell korrekt: F* = ", objective_value(modell))

Ihre Lösung in Julia: Mehrprodukt und Kapazität

Erweitern Sie Ihr Modell nun um die Erweiterungen 1 und 3: zwei Produkte auf einer gemeinsamen Ressource mit Produktionskapazität 120 je Periode (Daten aus Vorlesung 12):

d = [40 50 60 40 50 60;
     20 30 20 30 20 30]
f, h, kap = 100, 1, 120

modell = Model(HiGHS.Optimizer)
set_silent(modell)

# IHR CODE HIER

optimize!(modell)
@assert isapprox(objective_value(modell), 850.0; atol = 1e-3) "Noch nicht korrekt, gilt die Kapazität je Periode über BEIDE Produkte?"
println("Kapazitiertes Mehrproduktmodell korrekt: F* = ", objective_value(modell))