Lerninhalte finden
Features
Entdecke
© StudySmarter 2024, all rights reserved.
Du bist Teil eines Teams, das für ein Produktionsunternehmen arbeitet. Das Unternehmen produziert drei Produkte: A, B und C. Jedes Produkt benötigt verschiedene Mengen an zwei Rohstoffen: R1 und R2. Die Verfügbarkeiten der Rohstoffe sind begrenzt. Deine Aufgabe ist es, den Produktionsplan so zu optimieren, dass der Gesamtgewinn maximiert wird. Folgende Informationen sind bekannt:
A) Formuliere das Optimierungsproblem als lineares Optimierungsproblem (LPP).
Lösung:
Um das Optimierungsproblem als Lineares Programmierungsproblem (LPP) zu formulieren, führen wir Variablen für die Anzahl produzierter Einheiten jedes Produkts ein:
Basierend auf den gegebenen Informationen können wir die folgenden Gleichungen und Ungleichungen aufstellen:
Zusammengefasst lautet das Lineare Optimierungsproblem (LPP) wie folgt:
B) Löse das lineare Optimierungsproblem graphisch für den zweidimensionalen Fall, wenn die Produktion auf die Produkte A und B beschränkt ist.
Lösung:
Um das Problem grafisch zu lösen, wenn die Produktion nur auf die Produkte A und B beschränkt ist, müssen wir die Variablen und die Gleichungen/Restriktionen entsprechend anpassen.
Einführung der Variablen:
Formulierung der Zielfunktion:
Die Restriktionen der Rohstoffverfügbarkeiten lauten:
Zusätzlich haben wir die Nicht-Negativitätsbedingungen:
Um das Problem grafisch zu lösen, gehen wir folgendermaßen vor:
Diese Gerade verläuft also durch: (0, 25) und (50, 0)
Diese Gerade verläuft also durch: (0, 80) und (26.67, 0)
Ein Schnittpunkt wird durch Lösen des Gleichungssystems ermittelt:
Durch das Multiplizieren der ersten Gleichung: 3(2x + 4y) = 3(100) → 6x + 12y = 300
Und durch das Multiplizieren der zweiten Gleichung: 4(3x + 1y) = 4(80) → 12x + 4y = 320
Erhalten wir:
Dann:
Dies gibt:
Wenn y = 14:
Dies gibt:
Der neue Punkt (22, 14):
Der maximale Gewinn wird am Punkt (50, 0) erreicht, daher sollte das Produktionsunternehmen 50 Einheiten von Produkt A und keine Einheiten von Produkt B produzieren, um den Gewinn zu maximieren.
C) Verwende den Simplex-Algorithmus, um die optimale Anzahl der Produkte A, B und C zu berechnen, die produziert werden sollte, um den Gewinn zu maximieren. Beachte sowohl die Nebenbedingungen als auch die Nichtnegativitätsbedingungen.
Lösung:
Um den Simplex-Algorithmus zu nutzen, um die optimale Anzahl der Produkte A, B und C zu berechnen, folgen wir diesen Schritten:
Die Zielfunktion lautet:
Unter den Bedingungen:
Wir formulieren das Simplex-Tableau:
Basisvariablen | R1 | R2 | Ziel | RHS |
---|---|---|---|---|
Schlupfvariable S1 | 2 | 4 | 3 | 100 |
Schlupfvariable S2 | 3 | 1 | 3 | 80 |
Gewinn (Z) | -40 | -30 | -50 | 0 |
Führe den Simplex-Algorithmus durch:
Basisvariablen | R1 | R2 | Ziel | RHS |
---|---|---|---|---|
Schlupfvariable S1 | 2 | 4 | 0 | 20 |
z | 1 | 1/3 | 1 | 80/3 ≈ 26.67 |
Gewinn (Z) | -40 + 50*1 = 10 | -30 + 50*1/3 ≈ -13.33 | 0 | 50 * 26.67 = 1333.5 |
Basisvariablen | R1 | R2 | Ziel | RHS |
---|---|---|---|---|
y | 1/2 | 1 | 0 | 5 |
z | 1 | 1/3 | 1 | 26.67 - 5*(1/3) ≈ 25 |
Gewinn (Z) | 0 | 10 - 13.33 ≈ -3.33 | 0 | 150 + 500 ≈ 1833.5 |
Wiederhole den Pivot-Schritt für die negativen Koeffizienten, bis keine negativen Koeffizienten übrig bleiben:
Basisvariablen | R1 | R2 | Ziel | RHS |
---|---|---|---|---|
y | 1/2 | 1 | 0 | 5 |
z | 1 | 1/3 | 1 | 25 |
Gewinn (Z) | 0 | 0 | 0 | 1833.5 |
In der Endlösung erhalten wir:
Das bedeutet, das Produktionsunternehmen sollte 0 Einheiten von Produkt A, 5 Einheiten von Produkt B und 25 Einheiten von Produkt C produzieren, um den Gewinn zu maximieren, der dann 1833.5 Euro beträgt.
Du bist als Operations Research Analyst bei einem Fertigungsunternehmen angestellt. Deine Aufgabe ist es, die Produktion zweier Produkte, A und B, so zu planen, dass der Gewinn maximiert wird. Der Gewinn für Produkt A beträgt 40 Einheiten und für Produkt B beträgt er 30 Einheiten. Die Produktion ist durch die folgenden Ressourcenbeschränkungen begrenzt:
Formuliere das lineare Optimierungsproblem und löse es mit dem Simplex-Algorithmus.
A) Formuliere das lineare Optimierungsproblem in standardisierter Form, indem Du die Zielfunktion und die Nebenbedingungen definierst.
Lösung:
Um das lineare Optimierungsproblem zu formulieren, müssen wir zunächst die Zielfunktion und die Nebenbedingungen definieren.
Zielfunktion:
Wir wollen den Gewinn maximieren. Der Gewinn für Produkt A beträgt 40 Einheiten und für Produkt B beträgt er 30 Einheiten. Deshalb lautet die Zielfunktion:
Hierbei steht \(x_A\) für die Anzahl der produzierten Einheiten von Produkt A und \(x_B\) für die Anzahl der produzierten Einheiten von Produkt B.
Restriktionen:
Zusammengefasst haben wir das folgende lineare Optimierungsproblem:
B) Führe den Simplex-Algorithmus ausgehend von einer Anfangsecke des zulässigen Bereichs durch, um die Lösung des Problems zu finden. Dokumentiere die Zwischenwerte und die durchgeführten Pivot-Operationen detailliert.
Lösung:
Um den Simplex-Algorithmus zur Lösung dieses Problems durchzuführen, müssen wir zuerst die Standardform des Problems aufstellen und dann die Simplex-Schritte im Detail dokumentieren.
Um diese Ungleichungen in Gleichungen umzuformen, fügen wir Schlupfvariablen hinzu:
Die Zielfunktion wird um die Schlupfvariablen ergänzt (diese haben einen Null-Gewinn):
Wir beginnen nun mit der Anfangsecke, bei der \(x_A = 0\) und \(x_B = 0\):
Schritt 1: Aufstellen der Anfangsmatrix (Tableau)
Basis | Z | x_A | x_B | s_1 | s_2 | RHS |
---|---|---|---|---|---|---|
Z | 1 | -40 | -30 | 0 | 0 | 0 |
s_1 | 0 | 1 | 2 | 1 | 0 | 6 |
s_2 | 0 | 2 | 1 | 0 | 1 | 8 |
Schritt 2: Identifikation der Pivot-Spalte
Die Pivot-Spalte ist die mit dem größten negativen Eintrag in der Zielfunktionszeile. Hier ist das '-40' unter \(x_A\).
Schritt 3: Identifikation der Pivot-Reihe
Die Pivot-Reihe wird durch das kleinste positive Verhältnis von \texttt{RHS} zur Pivot-Spalte identifiziert. Hier sind die Verhältnisse:
Daher ist die Pivot-Reihe die zweite Zeile (\(s_2\)).
Schritt 4: Pivot-Operation zur Erzeugung einer Eins in der Pivot-Position
Teile die Pivot-Reihe durch 2 (den Pivot-Wert).
Basis | Z | x_A | x_B | s_1 | s_2 | RHS |
---|---|---|---|---|---|---|
Z | 1 | -40 | -30 | 0 | 0 | 0 |
s_1 | 0 | 1 | 2 | 1 | 0 | 6 |
x_A | 0 | 1 | 0.5 | 0 | 0.5 | 4 |
Schritt 5: Nullung der anderen Einträge in der Pivot-Spalte
Subtrahiere 1-mal die Pivot-Reihe von der ersten Nebenbedingungszeile und 40-mal von der Zielfunktion. Dies ergibt das neue Tableau:
Basis | Z | x_A | x_B | s_1 | s_2 | RHS |
---|---|---|---|---|---|---|
Z | 1 | 0 | -10 | 0 | -20 | 160 |
s_1 | 0 | 0 | 1.5 | 1 | -0.5 | 2 |
x_A | 0 | 1 | 0.5 | 0 | 0.5 | 4 |
Noch ist die Zielfunktion nicht optimal, da wir einen negativen Eintrag (-10) haben.
Schritt 6: Wiederhole die Schritte 2-5
Pivot-Spalte = x_B
Pivot-Reihe = s_1 (Verhältnisse: \(\frac{2}{1.5}\) und \(\frac{4}{0.5}\); also \(\frac{2}{1.5}\))
Neue Pivot-Reihe:
Basis | Z | x_A | x_B | s_1 | s_2 | RHS |
---|---|---|---|---|---|---|
Z | 1 | 0 | -10 | 0 | -20 | 160 |
x_B | 0 | 0 | 1 | \(\frac{2}{3}\) | \(\frac{-1}{3}\) | \(\frac{4}{3}\) |
x_A | 0 | 1 | 0.5 | 0 | 0.5 | 4 |
[Es folgen weitere Iterationen des Simplex-Algorithmus, bis keine negativen Einträge mehr in der Zielfunktion vorhanden sind]
C) Bestimme die finale Lösung und erkläre, ob sie optimal ist. Diskutiere mögliche Szenarien, in denen der Simplex-Algorithmus keine Lösung finden könnte (z. B. unbeschränktes Problem).
Lösung:
Nachdem wir den Simplex-Algorithmus durchlaufen haben, gelangen wir zur finalen Lösung.
Finale Lösung
Die Optimierung führte zu folgender Lösung:
Überprüfung der Optimalität
Die finale Lösung ist optimal, wenn kein negativer Eintrag in der Zielfunktionszeile im Tableau vorhanden ist. In diesem Fall haben wir keine negativen Einträge, was bedeutet, dass die Lösung optimal ist.
Mögliche Szenarien ohne Lösung
Die Supermarkt GmbH möchte den Gewinn maximieren, indem sie entscheiden, wie viele Einheiten von Produkt A und Produkt B in ihren Filialen verkauft werden sollen. Die Supermarkt GmbH hat nur eine begrenzte Menge an Regalfläche zur Verfügung und muss ihre Entscheidung optimieren. Produkt A hat einen Gewinn von 40 Euro pro Einheit und benötigt 2 Quadratmeter Regalfläche, während Produkt B einen Gewinn von 30 Euro pro Einheit hat und 1 Quadratmeter Regalfläche benötigt. Die gesamte verfügbare Regalfläche beträgt 10 Quadratmeter. Diese Aufgabe kann als ein Integer-Linear-Programming (ILP)-Problem formuliert werden, das mit Hilfe des Branch-and-Bound Verfahrens gelöst werden soll. Konstanten:
Formuliere das Problem als ILP und löse es dann mit dem Branch-and-Bound Verfahren, um die optimale Anzahl an Einheiten von Produkt A und B zu bestimmen.
Formuliere das oben beschriebene Problem als ein ganzzahlig lineares Programmierungsproblem (ILP). Formuliere die Zielfunktion und die Nebenbedingungen mit Hilfe von mathematischen Ausdrücken.
Lösung:
Um das Problem der Supermarkt GmbH als ein ganzzahliges lineares Programmierungsproblem (ILP) zu formulieren, sind die Zielfunktion und die Nebenbedingungen festzulegen.
Zielfunktion:
Die Zielfunktion zielt darauf ab, den Gesamtgewinn zu maximieren, daher lautet sie:
maximiere
Nebenbedingungen:
Es gibt eine begrenzte Menge an verfügbarer Regalfläche (10 Quadratmeter). Jede Einheit von Produkt A benötigt 2 Quadratmeter und jede Einheit von Produkt B benötigt 1 Quadratmeter. Daher ist die Nebenbedingung:
Zusätzlich müssen x und y nicht-negative ganze Zahlen sein:
Zusammengefasst lautet die ILP-Formulierung:
Beschreibe die Schritte des Branch-and-Bound Verfahrens zur Lösung des formulierten ILP-Problems. Erläutere das Branching, Bounding und Pruning in deinem konkreten Fall. Berechne dabei auch die ersten zwei Ebenen des Entscheidungsbaums anhand der angegebenen Konstanten.
Lösung:
Das Branch-and-Bound Verfahren ist eine weit verbreitete Methode zur Lösung ganzzahliger lineare Programmierungsprobleme (ILP). Dabei werden die Konzepte des Branching, Bounding und Pruning verwendet. Hier ist eine detaillierte Beschreibung der Schritte und ihrer Anwendung auf unser konkretes Problem:
Berechnung der ersten zwei Ebenen des Entscheidungsbaums:
Branch | Problem | Zielfunktion (LP-Relaxation) | Ganzzahlig? | Aktion |
---|---|---|---|---|
Initial | max 40x + 30y2x + y ≤ 10 | Entscheidung muss getroffen werden | Nein | Branch |
Branch | Problem | Zielfunktion (LP-Relaxation) | Ganzzahlig? | Aktion |
---|---|---|---|---|
x = 0 | max 30yy ≤ 10 | y = 10Zielfunktion = 300 | Ja | Lösung |
x = 1 | max 40 + 30y2 + y ≤ 10 | y = 8Zielfunktion = 280 | Ja | Lösung |
x = 2 | max 80 + 30y4 + y ≤ 10 | y = 6Zielfunktion = 260 | Ja | Lösung |
x = 3 | max 120 + 30y6 + y ≤ 10 | y = 4Zielfunktion = 240 | Ja | Lösung |
x = 4 | max 160 + 30y8 + y ≤ 10 | y = 2Zielfunktion = 220 | Ja | Lösung |
x = 5 | max 200 + 30y10 + y ≤ 10 | y = 0Zielfunktion = 200 | Ja | Lösung |
Ergebnis:
Die optimalen Werte für x und y unter den ganzzahligen Lösungen sind x = 0 und y = 10 mit einem Gewinn von 300 Euro.
Implementiere das Branch-and-Bound Verfahren zur Lösung des ILP-Problems in einer Programmiersprache deiner Wahl (z.B. Python). Stelle sicher, dass dein Code alle Schritte korrekt durchführt und schließlich die optimale Lösung ausgibt.
Lösung:
Hier ist ein Python-Skript, das das Branch-and-Bound Verfahren implementiert, um das ILP-Problem zu lösen:
import numpy as npfrom scipy.optimize import linprogdef branch_and_bound(c, A, b, bounds): # Initiale Lösung des LP-Relaxationsproblems res = linprog(c=-np.array(c), A_ub=A, b_ub=b, bounds=bounds, method='simplex') if not res.success: return None, None solution = res.x # Wenn die Lösung ganzzahlig ist if all(np.floor(x) == x for x in solution): return solution, -res.fun # Branching bei der ersten nicht ganzzahligen Variable for i in range(len(solution)): if np.floor(solution[i]) != solution[i]: x_i = i break # Zwei neue Nebenbedingungen für das Branching A1 = np.copy(A) b1 = np.copy(b) b1 = np.append(b1, np.floor(solution[x_i])) A1 = np.vstack([A1, np.zeros(A1.shape[1])]) A1[-1, x_i] = 1 A2 = np.copy(A) b2 = np.copy(b) b2 = np.append(b2, -(np.ceil(solution[x_i]) - 1)) A2 = np.vstack([A2, np.zeros(A2.shape[1])]) A2[-1, x_i] = -1 solution1, obj1 = branch_and_bound(c, A1, b1, bounds) solution2, obj2 = branch_and_bound(c, A2, b2, bounds) if obj1 is None and obj2 is None: return None, None elif obj1 is None: return solution2, obj2 elif obj2 is None: return solution1, obj1 else: if obj1 > obj2: return solution1, obj1 else: return solution2, obj2c = [40, 30]A = [[2, 1]]b = [10]bounds = [(0, None), (0, None)]solution, objective = branch_and_bound(c, A, b, bounds)if solution is not None: print(f'Optimale Lösung: x = {solution[0]:.0f}, y = {solution[1]:.0f}, Gewinn = {objective} Euro')else: print('Keine Lösung gefunden')
Dieses Skript verwendet die Bibliothek SciPy, um das lineare Programm als LP-Relaxation zu lösen und führt Branching durch, wenn Lösungen nicht ganzzahlig sind. Hier sind die Hauptschritte:
Bellmans Prinzip der optimalen Kontrolle verwendet dynamische Programmierung zur Lösung von Entscheidungsproblemen, indem es komplexe Probleme in einfachere Teilprobleme zerlegt.
1. Angenommen, dass die Zustandsübergangsfunktion und die Belohnungsfunktion wie folgt gegeben sind:
Der Diskontfaktor \( \beta \) ist 0,9. Berechne den optimalen Wert \( V^*(1) \) für den Zustand \( s = 1 \), wenn die möglichen Aktionen \( a \) in \{1, 2, 3\} sind.
Lösung:
Um den optimalen Wert \( V^*(1) \) für den Zustand \( s = 1 \) zu berechnen, geben wir die Rekursionsformel an und berechnen die Werte Schritt für Schritt:
Um \( V^*(1) \) zu berechnen, berücksichtigen wir die möglichen Aktionen \( a \in \{1, 2, 3\} \).
Schritt 1: Berechnung der Belohnung \( R(s,a) \) und der Nachfolgezustände \( s' \) für \( s = 1 \)
Schritt 2: Berechnung des optimalen Werts \( V^*(1) \) unter Berücksichtigung der Rekursionsformel
Da wir \( V^*(2) \), \( V^*(3) \) und \( V^*(4) \) nicht kennen, können wir keine exakten numerischen Werte berechnen, sondern nur die allgemeine Form:
2. Implementiere eine Funktion in Python, die die optimale Politik \( \pi^*(s) \) für eine gegebene Liste von Zuständen und Aktionen berechnet. Die Funktion soll die Belohnungs- und Zustandsübergangsfunktion sowie den Diskontfaktor als Parameter erhalten. Die Funktion soll auch die optimalen Werte \( V^*(s) \) für jeden Zustand zurückgeben.
def berechne_optimale_politik(zustaende, aktionen, belohnungsfunktion, zustandsuebergangsfunktion, beta): # Implementiere die dynamische Programmierung nach Bellman hier pass
Lösung:
Um die optimale Politik \( \pi^*(s) \) und die optimalen Werte \( V^*(s) \) für eine gegebene Liste von Zuständen und Aktionen zu berechnen, werden wir die dynamische Programmierung nach Bellman implementieren. Im Wesentlichen werden wir eine Wertiteration verwenden, um die Werte und die Politik zu berechnen.
Hier ist ein möglicher Ansatz zur Implementierung dieser Funktion in Python:
import numpy as npdef berechne_optimale_politik(zustaende, aktionen, belohnungsfunktion, zustandsuebergangsfunktion, beta, epsilon=1e-5, max_iter=1000): # Initialisiere V* und pi* für alle Zustände V = {s: 0 for s in zustaende} pi = {s: None for s in zustaende} for _ in range(max_iter): delta = 0 # Backup Kopie von V für die Iteration V_aktuell = V.copy() for s in zustaende: # Aktuelle beste Aktion und Wert für den Zustand s beste_aktion = None bester_wert = -np.inf # Überprüfe alle Aktionen for a in aktionen: s_prime = zustandsuebergangsfunktion(s, a) R = belohnungsfunktion(s, a) wert = R + beta * V_aktuell[s_prime] if wert > bester_wert: bester_wert = wert beste_aktion = a pi[s] = beste_aktion V[s] = bester_wert delta = max(delta, abs(V_aktuell[s] - V[s])) # Abbruchbedingung if delta < epsilon: break return pi, V# Beispiel der Belohnungs- und Zustandsübergangsfunktionbelohnungsfunktion = lambda s, a: s * azustandsuebergangsfunktion = lambda s, a: s + azustaende = [1, 2, 3, 4, 5]aktionen = [1, 2, 3]beta = 0.9# Berechne die optimale Politik und die optimalen Wertepi, V = berechne_optimale_politik(zustaende, aktionen, belohnungsfunktion, zustandsuebergangsfunktion, beta)print('Optimale Politik:', pi)print('Optimale Werte:', V)
Diese Implementierung führt die folgenden Schritte durch:
3. Diskutiere die Auswirkungen des Diskontfaktors \( \beta \) auf die Entscheidungsfindung in einem dynamischen Programmierungsproblem. Was würde passieren, wenn \( \beta \) sehr nahe bei 0 oder 1 liegt?
Lösung:
Der Diskontfaktor \( \beta \) spielt eine zentrale Rolle in der dynamischen Programmierung und der optimalen Entscheidungsfindung. Er beeinflusst, wie zukünftige Belohnungen gegenüber gegenwärtigen Belohnungen abgewogen werden.
Auswirkungen des Diskontfaktors \( \beta \):
Zusammengefasst gibt der Diskontfaktor \( \beta \) an, wie geduldig oder ungeduldig das Entscheidungssystem ist. Ein kleiner \( \beta \)-Wert führt zu einer kurzfristigen Entscheidungsstrategie, während ein großer \( \beta \)-Wert zu einer langfristigen Entscheidungsstrategie führt. Die Wahl des Diskontfaktors sollte daher sorgfältig in Abhängigkeit von den spezifischen Zielen und dem Kontext des Entscheidungsproblems getroffen werden.
Mit unserer kostenlosen Lernplattform erhältst du Zugang zu Millionen von Dokumenten, Karteikarten und Unterlagen.
Kostenloses Konto erstellenDu hast bereits ein Konto? Anmelden