Übung 11: Algebraische Modellierung I

Grundlagen Operations Research

Video zur Übung

Aufgabe 1

Gegeben sei folgender Graph:

Ungerichteter Graph mit 7 Knoten und 11 bewerteten Kanten: 1–2 (42), 1–3 (20), 1–4 (55), 2–3 (41), 2–5 (34), 3–4 (40), 3–5 (30), 3–6 (55), 4–6 (62), 5–7 (46), 6–7 (65).

Die Kanten sind mit Kosten (cijc_{ij}) bewertet; z. B. die Kante [1,2][1, 2] mit c1,2=42c_{1,2} = 42. Eine Kante [i,j][i, j] korrespondiert zu den Pfeilen (i,j)(i, j) und (j,i)(j, i) mit identischen Bewertungen.

Formulieren Sie ein ganzzahliges Optimierungsproblem zur Bestimmung des kürzesten Wegs von dem Startknoten q=2q = 2 (Quelle) zu dem Zielknoten s=7s = 7 (Senke). Überprüfen Sie Ihren Ansatz mit Julia.

Ihre Lösung in Julia

Beachten Sie: Jede Kante liefert zwei Pfeile. Nennen Sie Ihr Modell modell:

using JuMP, HiGHS

kanten = [(1,2,42), (1,3,20), (1,4,55), (2,3,41), (2,5,34), (3,4,40),
          (3,5,30), (3,6,55), (4,6,62), (5,7,46), (6,7,65)]
pfeile = vcat([(i,j,c) for (i,j,c) in kanten], [(j,i,c) for (i,j,c) in kanten])

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

# IHR CODE HIER

optimize!(modell)
# Ergebnisse ausgeben, z. B. @show value(X1) oder @show value.(X)
# Führen Sie diese Zelle nach Ihrer Lösung aus:
@assert isapprox(objective_value(modell), 80.0; atol = 1e-4) "Noch nicht korrekt, Quelle ist Knoten 2, Senke Knoten 7."
println("Kürzester Weg von 2 nach 7 korrekt: F* = ", objective_value(modell))

Aufgabe 2

Gegeben sei folgender Graph:

Derselbe Graph, nun gerichtet; Pfeile mit Kosten und Zeit: 1→2 (42, 8), 1→3 (20, 9), 1→4 (55, 7), 2→3 (41, 9), 2→5 (34, 7), 3→4 (40, 9), 3→5 (30, 8), 3→6 (55, 7), 4→6 (62, 6), 5→7 (46, 8), 6→7 (65, 4).

Die Pfeile sind mit Kosten (cijc_{ij}) und Zeiten (tijt_{ij}) bewertet; z. B. der Pfeil (1,2)(1, 2) mit c1,2=42c_{1,2} = 42 und t1,2=8t_{1,2} = 8.

Formulieren Sie ein Modell zur Bestimmung des Weges von Knoten q=1q = 1 zum Knoten s=7s = 7 mit minimalen Kosten, wobei der zeitliche Aufwand nicht mehr als 22 ZE betragen darf. Implementieren und lösen Sie Ihr Modell in Julia.

Ihre Lösung in Julia

pfeile = [(1,2,42,8), (1,3,20,9), (1,4,55,7), (2,3,41,9), (2,5,34,7),
          (3,4,40,9), (3,5,30,8), (3,6,55,7), (4,6,62,6), (5,7,46,8),
          (6,7,65,4)]

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

# IHR CODE HIER

optimize!(modell)
# Ergebnisse ausgeben, z. B. @show value(X1) oder @show value.(X)
@assert isapprox(objective_value(modell), 140.0; atol = 1e-4) "Noch nicht korrekt, fehlt die Zeiteinhaltungsbedingung (≤ 22 ZE)?"
println("Zeitbeschränkter kürzester Weg korrekt: F* = ", objective_value(modell))