Es gibt tatsächlich viele verschiedene Ansätze für Phase I in der Simplex-Methode. Insbesondere gibt es Phase-I-Algorithmen, die ursprüngliche Simplex-Simplex-Iterationen verwenden, und andere Phase-I-Algorithmen, die duale Simplex-Iterationen verwenden. Hier ist ein sehr allgemeiner Ansatz, der leicht angepasst werden kann, um eine bekannte realisierbare Lösung zu verwenden. Diese Version verwendet die Dual-Simplex-Methode in Phase I und die Primal-Simplex-Methode in Phase II, aber es gibt eine Variante, die Primal-Simplex-Iterationen in Phase I und Dual-Simplex-Iterationen in Phase II verwendet, die ich am Ende erwähnen werde. Der Ansatz, den ich hier beschreiben werde, wird in vielen Lehrbüchern zur linearen Programmierung diskutiert. Siehe zum Beispiel den Text von Robert Vanderbei .
Angenommen, wir lösen
maxcx
vorbehaltlich
Ax=b
l≤x≤u
wobei der Größe von . Nehmen Sie der Einfachheit halber an, dass die Zeilen von linear unabhängig sind (dies kann durch eine rangaufdeckende Faktorisierung erreicht werden).m n A.AmnA
- Wählen Sie eine erste Basis. Dies ist eine Sammlung von Variablen, so dass die entsprechenden Spalten von eine nicht singuläre Matrix . Die verbleibenden nichtbasischen Variablen können entweder auf ihre oberen oder unteren Grenzen gesetzt werden (oder auf Null, wenn eine Variable überhaupt keine Grenzen hat). A B.mAB
Eine einfache Möglichkeit, dies aus Ihrer ursprünglichen Lösung heraus zu tun, besteht darin, als Basisvariablen diejenigen Variablen auszuwählen, die in der bekannten realisierbaren Lösung am weitesten von ihren Grenzen entfernt sind, und dann zu überprüfen, ob nicht singulär ist. Möglicherweise müssen Sie die Basis ändern, um nicht singulär zu machen . Der Punkt hier ist, dass es viele mögliche Grundlagen gibt, aber diese hat als grundlegende Variablen diejenigen Variablen, die aus Ihrer realisierbaren Lösung richtig zu sein scheinen. B.BB
Lösen Sie die Gleichungen , um die Werte der Grundvariablen zu erhalten. Ax=b
- Die grundlegende Lösung, die Sie erhalten, ist wahrscheinlich in dem Sinne nicht realisierbar, dass einige der ursprünglichen Variablen außerhalb ihrer Grenzen liegen. Es ist wahrscheinlich auch doppelt unmöglich in dem Sinne, dass einige der reduzierten Kosten der nicht-grundlegenden Variablen die falschen Vorzeichen haben (z. B. nicht-basische Variablen an unteren Grenzen mit positiv reduzierten Kosten oder nicht-basische Variablen an oberen Grenzen mit negativen reduzierten Kosten).
Wir werden dieses Problem lösen, indem wir die Zielfunktion in eine doppelt realisierbare ändern. Subtrahieren Sie für jede nichtbasische Variable an ihrer Untergrenze eine große positive Größe vom Zielfunktionskoeffizienten. Addieren Sie für jede nichtbasische Variable an ihrer Obergrenze eine große positive Größe zum Koeffizienten. Dies stellt sicher, dass das Wörterbuch doppelt machbar ist. M.MM
Der Sinn dieser Modifikation der Zielfunktion besteht darin, auf die ursprüngliche Machbarkeit hinzuarbeiten, aber auch auf die Optimalität in Bezug auf die ursprüngliche Zielfunktion hinzuarbeiten. Sie möchten, dass groß genug ist, um eine doppelte Machbarkeit zu erreichen, aber Sie möchten so viel Einfluss wie möglich auf die ursprüngliche Zielfunktion haben. M
Führen Sie Dual-Simplex-Methoden durch, um eine Basislösung zu erhalten, die sowohl primär realisierbar (alle grundlegenden Variablen innerhalb von Boudns) als auch dual realisierbar (alle reduzierten Kosten haben das gewünschte Vorzeichen). Diese Lösung ist optimal für das Phase-I-Problem.
Ersetzen Sie die modifizierte Phase-I-Zielfunktion durch die ursprüngliche Zielfunktion. Jetzt haben Sie eine grundlegende Lösung, die ursprünglich machbar ist (eine Änderung der Zielfunktion wirkt sich nicht darauf aus), aber doppelt unmöglich ist. Führen Sie ursprüngliche Simplex-Iterationen durch, um zur Optimalität zurückzukehren.
Eine naheliegende Alternative zu diesem Ansatz wäre, die rechte Seite b zu Beginn der Phase I zu modifizieren, in Phase I ursprüngliche Simplex-Iterationen zu verwenden, um zur Optimalität zu gelangen, dann die ursprüngliche rechte Seite für Phase II zurückzusetzen und duale Simplex-Iterationen zu verwenden in Phase II.