using JuMP, HiGHS
modell = Model(HiGHS.Optimizer)
set_silent(modell)
# IHR CODE HIER
optimize!(modell)Übung 03: Dualer Simplex
Grundlagen Operations Research
Video zur Übung
Aufgabe 1
Gegeben sei folgende Problemstellung:
- Lösen Sie das Problem mit einem geeigneten Simplexverfahren.
- Geben Sie die Simplex-Multiplikatoren der einzelnen Iterationen an.
- Welche separaten Zielfunktionsänderungen sind zu erwarten, wenn Sie die rechte Seite um jeweils eine Einheit erhöhen?
- Bestimmen Sie iterativ eine ganzzahlige Lösung. In jeder Iteration ist eine obere Schranke für eine Variable festzulegen und das resultierende Problem durch Reoptimierung zu lösen.
- Wie hoch ist die sogenannte prozentuale Lücke (Solution Gap) zwischen der LP-Lösung und Ihrer ganzzahligen Lösung?
- Überprüfen Sie Ihre Lösungen mit Julia.
Ihre Lösung in Julia
Achten Sie auf die Richtungen der Nebenbedingungen ( und gemischt). Nennen Sie Ihr Modell modell:
# Führen Sie diese Zelle nach Ihrer Lösung aus:
@assert isapprox(objective_value(modell), 1250 / 3; atol = 1e-3) "Noch nicht korrekt. Prüfen Sie die Richtungen der Nebenbedingungen."
println("LP-Lösung korrekt: F* = ", objective_value(modell))Iterative Beschränkung
Beschränken Sie zunächst nach oben auf 8 (set_upper_bound(modell[:X][1], 8)), lösen Sie erneut, und prüfen Sie das Ergebnis. Heben Sie die Schranke danach wieder auf (delete_upper_bound(modell[:X][1])) und fordern Sie stattdessen (set_lower_bound(modell[:X][1], 9)). Ist eine der beiden Lösungen ganzzahlig?
# Nach dem Teilproblem mit X1 >= 9:
@assert isapprox(objective_value(modell), 405.0; atol = 1e-3) "Noch nicht korrekt. Ist die obere Schranke wieder aufgehoben?"
println("Teilproblem korrekt: F = ", objective_value(modell))Ganzzahlige Lösung
Ist Ihre Lösung nach der iterativen Beschränkung noch nicht ganzzahlig, müssten Sie von Hand weiter verzweigen. Lassen Sie stattdessen den Solver die beste ganzzahlige Lösung bestimmen: Deklarieren Sie die Variablen ganzzahlig (@variable(modell, X[1:3] >= 0, Int)) und lösen Sie erneut. Berechnen Sie anschließend die prozentuale Lücke zur LP-Lösung: .
@assert isapprox(objective_value(modell), 410.0; atol = 1e-3) "Noch nicht korrekt. Sind alle drei Variablen ganzzahlig deklariert?"
println("Ganzzahlige Lösung korrekt: F* = ", objective_value(modell))
println("Gap = ", round(1 - objective_value(modell) / (1250 / 3); digits = 3))