Lerninhalte finden
Features
Entdecke
© StudySmarter 2024, all rights reserved.
Du arbeitest als Softwareentwickler in einer Firma, die Lösungen für diskrete Optimierungsprobleme anbietet. Ein neuer Kunde hat Dich beauftragt, ein Problem zu lösen, in dem eine optimale Auswahl an Projekten getroffen werden muss. Jedes Projekt besitzt eine bestimmte Kost und einen bestimmten Nutzen für die Firma, und es gibt begrenzte Mittel, die investiert werden können. Jedes Projekt kann entweder vollständig angenommen oder abgelehnt werden (binäre Entscheidung). Die Aufgabe besteht darin, die Gesamtkosten zu minimieren während der Gesamtwert maximiert wird.
a) Formuliere das Problem als ein binäres ganzzahliges Optimierungsproblem. Definiere die Variablen, Zielfunktion und Nebenbedingungen präzise. Nutze dazu die folgende Notation:
Lösung:
Formulierung des binären ganzzahligen Optimierungsproblems: Das gegebene Problem kann als ein binäres ganzzahliges Optimierungsproblem formuliert werden, dessen Ziel es ist, den Nutzen (Wert) der ausgewählten Projekte zu maximieren, ohne das gegebene Budget zu überschreiten. Variablen:
b) Gegeben sei eine Firma mit fünf Projekten. Die Kosten und Nutzenwerte dieser Projekte sind:
Lösung:
Formulierung des konkreten Optimierungsproblems: Mit den gegebenen Daten können wir das Optimierungsproblem für die Firma, die fünf Projekte hat, formalisieren. Gegebene Daten:
c) Löse das Optimierungsproblem mittels einer geeigneten Methode (z.B., Simplex-Methode, Branch-and-Bound) und bestimme die optimale Auswahl der Projekte sowie den resultierenden Gesamtnutzen. Beschreibe jeden Schritt des Lösungsprozesses detailliert. Tipp: Hierbei ist es nützlich, ein Werkzeug wie Python/Java zur Hilfe zu nehmen. Unten ist ein Beispiel, wie Du die Daten in Python mittels eines geeigneten Pakets wie PuLP modellieren kannst:
import pulp as lp# Definiere das Problemprob = lp.LpProblem('Projektselektion', lp.LpMaximize)# Variablenx = lp.LpVariable.dicts('Projekt', range(1,6), cat=lp.LpBinary)# Zielfunktionprob += lp.lpSum([15*x[1], 10*x[2], 25*x[3], 12*x[4], 20*x[5]])# Nebenbedingungprob += lp.lpSum([10*x[1], 12*x[2], 20*x[3], 8*x[4], 15*x[5]]) <= 30# Problem lösenprob.solve()# Ausgabe der Ergebnissefor i in range(1,6): print(f'Projekt {i}: {x[i].varValue}')print(f'Gesamtnutzen: {lp.value(prob.objective)}')
Lösung:
Optimierungsproblem mittels PuLP in Python lösen: In den folgenden Schritten wird das Optimierungsproblem mit Hilfe des PuLP Pakets in Python gelöst. Wir werden die optimale Auswahl der Projekte und den resultierenden Gesamtnutzen ermitteln.Schritte des Lösungsprozesses:
import pulp as lp
# Definiere das Problemprob = lp.LpProblem('Projektselektion', lp.LpMaximize)
# Variablenx = lp.LpVariable.dicts('Projekt', range(1,6), cat=lp.LpBinary)
# Zielfunktiondie_nutzungswerte = [15, 10, 25, 12, 20] # Nutzenwerte der Projekteprob += lp.lpSum([die_nutzungswerte[i-1] * x[i] for i in range(1, 6)])
# Nebenbedingungdie_kosten = [10, 12, 20, 8, 15] # Kosten der Projekteprob += lp.lpSum([die_kosten[i-1] * x[i] for i in range(1, 6)]) <= 30
# Problem lösenprob.solve()
# Ausgabe der Ergebnissefor i in range(1, 6): print(f'Projekt {i}: {x[i].varValue}')print(f'Gesamtnutzen: {lp.value(prob.objective)}')Detaillierte Erklärung jedes Schrittes:
Projekt 1: 1.0Projekt 2: 1.0Projekt 3: 0.0Projekt 4: 1.0Projekt 5: 0.0Gesamtnutzen: 37.0Dies bedeutet, dass die optimale Auswahl der Projekte darin besteht, Projekt 1, Projekt 2 und Projekt 4 auszuwählen, was zu einem Gesamtnutzen von 37 führt. Das Budget von 30 wird dabei nicht überschritten.
Der Simplex-Algorithmus und seine Varianten:Der Simplex-Algorithmus ist ein Verfahren zur Lösung von LP-Problemen (linearen Programmierungen). Varianten des Algorithmus optimieren für spezielle Bedingungen und Effizienz.
Gegeben sei das folgende lineare Programm:
maximiere z = 3x_1 + 2x_2 unter den Nebenbedingungen: 2x_1 + x_2 <= 20 4x_1 + 3x_2 <= 42 x_1 + x_2 <= 12 x_1, x_2 >= 0Führe den Simplex-Algorithmus durch, um die optimale Lösung zu finden. Dokumentiere jeden Schritt und erkläre die Wahl der Pivot-Elementen. Beachte dabei mögliche Degenerationsprobleme und diskutiere, wie Bland's Regel in diesem Kontext angewendet werden könnte.
Lösung:
Das gegebene lineare Programm lautet:
maximiere z = 3x_1 + 2x_2 unter den Nebenbedingungen: 2x_1 + x_2 <= 20 4x_1 + 3x_2 <= 42 x_1 + x_2 <= 12 x_1, x_2 >= 0
Um das Problem in Standardform zu bringen, fügen wir Schlupfvariablen (s_i) hinzu, um die Ungleichungen in Gleichungen zu verwandeln:
maximiere z = 3x_1 + 2x_2 + 0s_1 + 0s_2 + 0s_3unter den Nebenbedingungen: 2x_1 + x_2 + s_1 = 20 4x_1 + 3x_2 + s_2 = 42 x_1 + x_2 + s_3 = 12 x_1, x_2, s_1, s_2, s_3 >= 0
Wir stellen das initiale Simplex-Tableau auf:
Basis | x_1 | x_2 | s_1 | s_2 | s_3 | Rechtswert |
---|---|---|---|---|---|---|
s_1 | 2 | 1 | 1 | 0 | 0 | 20 |
s_2 | 4 | 3 | 0 | 1 | 0 | 42 |
s_3 | 1 | 1 | 0 | 0 | 1 | 12 |
z | -3 | -2 | 0 | 0 | 0 | 0 |
Da die Zielfunktion die Koeffizienten -3 für x_1 und -2 für x_2 hat, wählen wir den negativsten Koeffizienten, also x_1 als Eingangsvariable. Um die Pivot-Zeile zu bestimmen, berechnen wir das Verhältnis der rechten Seite zum positiven Element in der Spalte x_1:
Die Pivot-Zeile ist daher die Zeile 1 mit s_1 als Basis.
Wir skalieren die Pivot-Zeile, sodass der Pivot-Element (2) eins wird. Dann führen wir Zeilenoperationen durch, um den Rest der Spalte x_1 zu nullen:
Basis | x_1 | x_2 | s_1 | s_2 | s_3 | Rechtswert |
---|---|---|---|---|---|---|
x_1 | 1 | 0.5 | 0.5 | 0 | 0 | 10 |
s_2 | 0 | 1 | -2 | 1 | 0 | 2 |
s_3 | 0 | 0.5 | -0.5 | 0 | 1 | 2 |
z | 0 | -0.5 | 1.5 | 0 | 0 | 30 |
Nun wählen wir den negativsten Koeffizienten in der Zielfunktion, also x_2. Um das Pivot-Element zu bestimmen, berechnen wir wieder die Verhältnisse:
Wir skalieren die Pivot-Zeile, sodass der Pivot-Element (1) eins wird. Dann führen wir Zeilenoperationen durch:
Basis | x_1 | x_2 | s_1 | s_2 | s_3 | Rechtswert |
---|---|---|---|---|---|---|
x_1 | 1 | 0 | 1 | -0.5 | 0 | 9 |
x_2 | 0 | 1 | -2 | 1 | 0 | 2 |
s_3 | 0 | 0 | 0.5 | -0.5 | 1 | 1 |
z | 0 | 0 | 2.5 | 0.5 | 0 | 32 |
Da in der Zielfunktion keine negativen Koeffizienten mehr vorhanden sind, haben wir die optimale Lösung erreicht:
Zur Vermeidung von Zyklen hätten wir Bland's Regel anwenden können, was bedeutet, dass wir den kleinsten Index auswählen würden, wenn mehrere Variablen in Frage kommen.
Erkläre den Dual-Simplex-Algorithmus und diskutiere dessen Vorteile im Vergleich zum primären Simplex-Algorithmus. Wie geht der Dual-Simplex-Algorithmus mit unzulässigen Lösungen um? Veranschauliche deine Erklärung mit einem passenden Beispiel.
Lösung:
Der Dual-Simplex-Algorithmus ähnelt dem primären Simplex-Algorithmus, jedoch unterscheidet er sich in mehreren wesentlichen Punkten:
Beim Dual-Simplex-Algorithmus wird eine unzulässige Lösung zu einer zulässigen Lösung gemacht, indem sukzessiv dual-optimale Pivot-Operationen durchgeführt werden. Dabei wird jede Operation so gewählt, dass sie die Unzulässigkeit in einer Nebenbedingung löst, ohne die Optimierung der Zielfunktion zu beeinträchtigen.
Betrachten wir das folgende lineare Programm:
Maximiere z = 2x_1 + 3x_2
Das Problem wird in Standardform umgewandelt durch Einführung von Schlupfvariablen. Die Ungleichungen werden umgekehrt, um in die duale Form zu passen:
Maximiere z = 2x_1 + 3x_2
Das initiale Simplex-Tableau wäre ungefähr so:
Basis | x_1 | x_2 | s_1 | s_2 | Rechtswert |
---|---|---|---|---|---|
s_1 | 4 | 3 | 1 | 0 | 12 |
s_2 | 1 | 1 | 0 | 1 | 4 |
z | -2 | -3 | 0 | 0 | 0 |
Angenommen, das Tableau ist optimal, jedoch unzulässig, weil zum Beispiel s_1 negativ ist. Der Dual-Simplex-Algorithmus würde zuerst die negativsten Rechte-Werte (s_1) adressieren und dual-optimale Pivots durchführen, um den Tableau zu korrigieren, bis es sowohl zulässig als auch optimal ist.
Beim Revised Simplex werden Speicherressourcen besser optimiert. Beschreibe detailliert, wie das Revised Simplex-Verfahren funktioniert. Nutze dafür ein reduziertes Problem aus dem ersten Teil des Hauptübungszusammenhangs. Gehe auf die Speicherersparnis durch reduzierte Tabelle und die Arbeitsweise des Algorithmus ein.
Lösung:
Das Revised Simplex-Verfahren ist eine verbesserte Version des Simplex-Algorithmus, die darauf abzielt, Speicherressourcen besser zu nutzen und Berechnungen effizienter durchzuführen. Im Gegensatz zum Standard-Simplex-Algorithmus, der das gesamte Tableau speichert und aktualisiert, arbeitet das Revised Simplex-Verfahren nur mit den notwendigsten Teilen der Tabelle. Dadurch werden Speicher- und Rechenaufwand erheblich reduziert.
Durch die Beschränkung auf die relevanten Teile der Tabelle (Basisinversen und reduzierte Kosten) reduziert das Revised Simplex-Verfahren die benötigte Menge an Speicher erheblich. Anstelle der Speicherung der gesamten Simplex-Tabelle werden nur wesentliche Elemente (Basisvariablen, Basisinversen und Nichtbasis-Spalten) verwaltet.
Um das Revised Simplex-Verfahren zu veranschaulichen, verwenden wir das lineare Programm aus dem ersten Teil:
maximiere z = 3x_1 + 2x_2 unter den Nebenbedingungen: 2x_1 + x_2 <= 20 4x_1 + 3x_2 <= 42 x_1 + x_2 <= 12 x_1, x_2 >= 0
Wir verwandeln das Problem in Standardform, indem wir Schlupfvariablen (s) hinzufügen:
maximiere z = 3x_1 + 2x_2 + 0s_1 + 0s_2 + 0s_3 unter den Nebenbedingungen: 2x_1 + x_2 + s_1 = 20 4x_1 + 3x_2 + s_2 = 42 x_1 + x_2 + s_3 = 12 x_1, x_2, s_1, s_2, s_3 >= 0
Wir starten mit den Schlupfvariablen als Basisvariablen: s_1, s_2, s_3. Die Basislösung ist daher:
\bar{c}_N = c_N - c_B * B^{-1} * N
Wähle die Variable x_1 als Eingangsvariable, da \bar{c}_1 = 3 den größten negativen Wert hat.
Aktualisiere die Basis: Tausche s_1 mit x_1:
Neue Basis: {x_1, s_2, s_3}
Wiederhole die Schritte 3-5, bis keine negativen reduzierten Kosten mehr vorhanden sind und die optimale Lösung erreicht ist.
Durch die iterative Anwendung dieser Schritte verringert das Revised Simplex-Verfahren die Speicherung und Berechnung auf die wesentlichen Teile und führt uns effizient zur optimalen Lösung.
Betrachte das folgende lineare Optimierungsproblem (Primärproblem): Maximiere:
Bestimme das Dualproblem des gegebenen Primärproblems.
Lösung:
Um das Dualproblem eines gegebenen linearen Optimierungsproblems (Primärproblem) zu bestimmen, müssen wir zunächst das Primärproblem vollständig formulieren. Hier ist ein allgemeines Beispiel für ein Primärproblem, sodass wir das Dualproblem ableiten können:
c_1x_1 + c_2x_2 + ... + c_nx_nUnter den Nebenbedingungen:
a_{11}x_1 + a_{12}x_2 + ... + a_{1n}x_n <= b_1
a_{21}x_1 + a_{22}x_2 + ... + a_{2n}x_n <= b_2
...
a_{m1}x_1 + a_{m2}x_2 + ... + a_{mn}x_n <= b_m
x_1, x_2, ..., x_n >= 0
Dualproblem (Duale):
b_1y_1 + b_2y_2 + ... + b_m y_mUnter den Nebenbedingungen:
a_{11}y_1 + a_{21}y_2 + ... + a_{m1}y_m >= c_1
a_{12}y_1 + a_{22}y_2 + ... + a_{m2}y_m >= c_2
...
a_{1n}y_1 + a_{2n}y_2 + ... + a_{mn}y_m >= c_n
y_1, y_2, ..., y_m >= 0
Dies ist das Dualproblem, das aus dem gegebenen Primärproblem abgeleitet wird. Beachte, dass die Maximierungsfunktion des Primärproblems zur Minimierungsfunktion im Dualproblem wird und umgekehrt. Ebenso ändern sich die Ungleichungen und die Variablenbedingungen entsprechend.
Du arbeitest an einem diskreten Optimierungsproblem und möchtest die Branch-and-Bound-Methode anwenden. Diese Methode wird verwendet, um den Suchraum systematisch zu durchsuchen, indem sie das Problem in Teilprobleme zerlegt und dabei obere und untere Schranken für optimale Werte nutzt.
Zu den wichtigen Merkmalen der Branch-and-Bound-Methode gehören:
Angenommen, Du hast das folgende ganzzahlige Optimierungsproblem:\(\min f(x) = 2x_1 + 3x_2\), wobei \(x_1, x_2\) ganzzahlig und die Nebenbedingungen \(x_1 + 2x_2 \leq 5\) und \(3x_1 + x_2 \geq 3\) gelten.
Lösung:
Um das gegebene ganzzahlige Optimierungsproblem mit der Branch-and-Bound-Methode zu lösen, wollen wir die folgenden Schritte durchführen, um den Suchbaum zu erstellen und Teilprobleme zu definieren:
\[\min f(x) = 2x_1 + 3x_2\]\[\text{Nebenbedingungen: }x_1 + 2x_2 \leq 5, \quad 3x_1 + x_2 \geq 3, \quad x_1, x_2 \in \mathbb{Z}\]
Schritt 1: Erstellen des ersten Knotens im Branch-and-Bound-Baum:
Wir lösen das Problem linear, um eine obere Schranke zu bestimmen (ohne die Ganzzahligkeit zu berücksichtigen):
\[\min f(x) = 2x_1 + 3x_2\]\[\text{Nebenbedingungen: }x_1 + 2x_2 \leq 5, \quad 3x_1 + x_2 \geq 3\]
Wir erhalten eine Lösung für dieses lineare Programm, welche typischerweise keine Ganzzahlen sein muss. Nehmen wir an, die Lösung sei zum Beispiel \((x_1^*, x_2^*)\).
Um nun den Branch-and-Bound-Baum zu erweitern, fügen wir Bedingungen hinzu, die sicherstellen, dass die Variablen ganzzahlig sind. Wir betrachten hier die nächste ganzzahlige Lösung:
Angenommen, \(x_1^*=1.5\) und \(x_2^*=1.5\), dann teilen wir das Problem in zwei Teilprobleme auf:
Bestimmen der Schranken:Für Teilproblem 1:
Für Teilproblem 2:
Eliminierung eines Zweiges: Nachdem beide Teilprobleme gelöst wurden, kann ein Zweig eliminiert werden, wenn:
Beschreibe, wie die Reduktion des Suchraums durch obere und untere Schranken konkret zur Effizienzsteigerung bei diesem Optimierungsproblem beiträgt. Verwende dazu ein Beispiel aus Deinem Branch-and-Bound-Baum, das Du im ersten Teil der Aufgabe erstellt hast.
Lösung:
Die Branch-and-Bound-Methode nutzt obere und untere Schranken, um den Suchraum effizient zu reduzieren und unnötige Berechnungen zu vermeiden. Dies trägt wesentlich zur Effizienzsteigerung bei, indem Teilprobleme, die keine bessere Lösung versprechen als die aktuell beste gefundene Lösung, ausgeschlossen werden.
Um dies zu veranschaulichen, beziehen wir uns auf unser Beispiel aus dem ersten Teil der Aufgabe:
\[\min f(x) = 2x_1 + 3x_2\]\[\text{Nebenbedingungen: } x_1 + 2x_2 \leq 5, \quad 3x_1 + x_2 \geq 3\, \quad x_1, x_2 \in \mathbb{Z}\]
Angenommen, wir haben den Branch-and-Bound-Baum erstellt und die ersten beiden Teilprobleme definiert:
Nun definieren wir obere und untere Schranken:
Angenommen, durch die Lösung der linearen Relaxation (nicht ganzzahlige Werte) für beide Teilprobleme erhalten wir folgende Werte:
Wir haben also:
Betrachten wir die obere Schranke:
In diesem Fall können wir den rechten Zweig (Teilproblem 2) eliminieren, weil:
Zusammenfassung: Durch die Unterteilung des Problems und die Festlegung von oberen und unteren Schranken können wir klare Entscheidungen treffen, welche Zweige des Baums weiter untersucht werden müssen und welche ausgeschlossen werden können. Dies reduziert den Suchraum erheblich und steigert die Effizienz der Lösungsfindung.
Mit unserer kostenlosen Lernplattform erhältst du Zugang zu Millionen von Dokumenten, Karteikarten und Unterlagen.
Kostenloses Konto erstellenDu hast bereits ein Konto? Anmelden