Wie starte ich die Simplex-Methode von einem realisierbaren internen Punkt aus?


8

Ich habe einen Algorithmus, der eine praktikable Lösung für ein lineares Programmierproblem generiert. Es ist jedoch sehr wahrscheinlich, dass dies kein Eckpunkt ist. Dies macht es nicht für die direkte Verwendung als anfänglich realisierbare Lösung für einen gebundenen Simplex-Löser geeignet. Wie kann ich mit dieser Lösung effizient einen Eckpunkt finden, den ich verwenden kann?

Kurz gesagt, wie kann ich die Simplex-Methode von einem möglichen internen Punkt aus starten?


Es gibt Algorithmen, die vom Übergang von einem optimalen internen Punkt zu einer optimalen Basislösung reichen (um eine optimale Basislösung zu erhalten, nachdem ein innerer Punktalgorithmus zu einer optimalen nichtbasischen Lösung konvergiert hat). Vielleicht könnten Sie so etwas verwenden, aber warum möchten Sie eine praktikable Anfangslösung für eine LP bereitstellen? Haben Sie eine LP, bei der Machbarkeit ein Engpass ist?
user327301

Der von mir erwähnte Algorithmus, der die realisierbare Lösung erzeugt, erzeugt tatsächlich nur das als Nebenprodukt. Das Hauptergebnis sind die Einschränkungen für die LP. Ich möchte nur das Beste aus dieser praktikablen Lösung machen, anstatt sie zu ignorieren und Phase 1 zu verwenden.
Dylan

Bist du sicher, dass es helfen wird? Haben Sie sich die Protokolle Ihres Lösers angesehen und festgestellt, wie viel Prozent der Zeit für die Suche nach einer realisierbaren Lösung im Vergleich zur Suche nach einer optimalen Lösung aufgewendet wird? Ich bin skeptisch, dass dies helfen wird, es sei denn, Sie bieten sehr gute anfängliche Lösungen für ein sehr großes oder sehr dichtes (dh schwieriges) lineares Programm.
user327301

Unabhängig davon, ob es helfen wird, bin ich gespannt, ob es möglich ist. Es besteht eine gute Chance, dass die anfänglich realisierbare Lösung nahezu optimal ist. Die LP ist sehr dicht - Nullen sind in keinem Teil des Tableaus unwahrscheinlich.
Dylan

1
Wenn CPLEX interne Punktalgorithmen verwendet, führt es das aus, was in der Dokumentation als Crossover bezeichnet wird, um zu einer Basislösung zu gelangen. Ich weiß nichts über Crossover, aber das könnte ein Ausgangspunkt für Sie sein, um etwas zu finden. (Jetzt bringst du mich dazu, mein LP-Wissen neu zu
schärfen

Antworten:


6

Jedes Buch über lineare Optimierung erklärt die Simplex-Methode als zweistufigen Algorithmus: den ersten zum Finden einer realisierbaren Ecke als Ausgangspunkt und den zweiten zum Finden des Optimums. Der erste verwendet ein doppeltes Problem. Schauen Sie sich zum Beispiel D. Bertsimas und JN Tsitsiklis an: "Einführung in die lineare Optimierung" .

Der Grund, warum man den Zwei-Phasen-Ansatz benötigt, ist, dass es normalerweise schwierig ist, einen realisierbaren Punkt zu finden - in hochdimensionalen Räumen ist die realisierbare Menge im Vergleich zum Beispiel der Einheitsbox sehr klein. Aus Ihrer Frage geht hervor, dass Sie einen anderen Weg haben, um mindestens einen realisierbaren Punkt zu finden. In diesem Fall ist es möglicherweise möglich, aus diesem Punkt einen Scheitelpunkt des realisierbaren Polyeders zu generieren. Eine Idee wäre, den folgenden Ansatz zu verwenden: Jede Ungleichheitsbedingung repräsentiert einen halben Raum, der durch eine Hyperebene getrennt ist. Finden Sie bei einem möglichen Punkt die n + 1 Hyperebenen, die x ∗ am nächsten liegenxn+1xund nehmen ihre Kreuzung. Intuitiv sollte dieser Scheitelpunkt machbar sein, obwohl ich zugeben werde, dass man etwas mehr darüber nachdenken müsste.


1
Leider beschreiben alle zweistufigen Algorithmen für die von mir gefundene Simplex-Methode "Phase 1", in der künstliche Variablen verwendet werden, um eine realisierbare Grundlösung aus einer nicht realisierbaren Grundlösung zu finden. Was ich jedoch möchte, ist, eine grundlegende realisierbare Lösung aus einer nichtbasisch realisierbaren Lösung zu finden. Vermisse ich etwas an "Phase 1", das auf nicht-grundlegende Lösungen angewendet werden kann?
Dylan

Ich verstehe nicht, warum du das brauchst. Alles, was Sie für Phase 2 benötigen, ist ein beliebiger Scheitelpunkt (eine grundlegende mögliche Lösung). Warum sollte es Sie interessieren, wo Phase 1 beginnt, solange Sie wissen, wo sie endet?
Wolfgang Bangerth

Phase 1 erfordert jedoch eine grundlegende (nicht realisierbare) Lösung. Wenn ich Phase 2 irgendwie mit einer nicht grundlegenden realisierbaren Lösung starten kann, sollte sie viel schneller gelöst werden als Phase 1 vom Ursprung aus zu starten.
Dylan

Aber Phase 2 - die eigentliche Simplex-Methode - geht von Scheitelpunkt zu Scheitelpunkt des Polyeders, das die realisierbare Menge ist. Es muss mit einem Scheitelpunkt beginnen, dh einem grundlegenden realisierbaren Punkt. Daran führt kein Weg vorbei. Phase 1 soll Ihnen genau einen solchen Ausgangspunkt bieten. Ich stelle mir vor, dass Sie den Algorithmus tatsächlich beschleunigen könnten, wenn Sie einen Scheitelpunkt der realisierbaren Menge von einem anderen realisierbaren Punkt aus generieren könnten, und ich stelle mir vor, dass dies nicht einmal sehr schwierig wäre (projizieren Sie einfach auf die nächsten Einschränkungen ). Das Problem im Allgemeinen besteht darin, überhaupt einen realisierbaren Punkt zu finden . n+1
Wolfgang Bangerth

Wenn es nicht sehr schwierig ist, können Sie es bitte detaillieren? Soweit ich sehen kann, können Sie, wenn Sie nacheinander auf jede Einschränkung projizieren, frühere Einschränkungen nicht erfüllen. Wie projizieren Sie auf alle Einschränkungen gleichzeitig? Dies ist das Problem, das ich lösen möchte. Nicht der allgemeine Fall, einen machbaren Punkt zu finden.
Dylan

4

Leider funktioniert die Lösung von Wolfgang Bangerth nicht garantiert:

Geben Sie hier die Bildbeschreibung ein

ii(ni)n


3

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

lxu

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

  1. 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

  1. 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

  1. 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.

  2. 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.


-3

Ich habe nach der Lösung für eine ähnliche Frage gesucht: Für ein sehr großes, spärliches lineares Programm funktioniert nur die mit der Simplex-Methode getestete Arbeit, aber nur, wenn die Standardlösung 0 machbar ist. Der Phase-1-Algorithmus (wie in Linprog von Matlab) scheint schlecht zu sein. Und der Quellcode der ersten Phase ist so komplex, dass er durch einen anderen Algorithmus wie den genetischen Algorithmus ersetzt werden kann. Eine Umgehungsmethode besteht darin, das ursprüngliche Problem linear zu transformieren, sodass in den neuen Variablen die bereitgestellte anfängliche realisierbare Lösung 0 ist, und dies 0 wird von Phase eins verwendet, ohne eine eigene Methode zu verwenden, um einen anderen Ausgangspunkt zu finden.

Beim Testen dieser Methode wird schrittweise durch linprog.m, simplex.m, simplexpresolve.m und simplexphaseone.m in Fällen, in denen nur Ungleichheitsbeschränkungen verwendet werden, bestätigt, dass die Standard 0 für die ursprünglichen Variablen verwendet wird, wobei Die Slack-Variablen nehmen die Unterschiede auf. So kann die lineare Transformation x0 in Simplex schleichen, was absichtlich verhindert, dass der Benutzer x0 bereitstellt. Sie können dann die Meldung "Der Standardstartpunkt ist machbar, Phase 1 überspringen" sehen. Auf der anderen Seite kann GA normalerweise eine Lösung in der Nähe des linearen Programms bis zu 0,01 Prozent finden, indem es das Doppelte oder Dreifache verwendet. Daher ist es möglicherweise nicht sinnvoll, diese Einschränkungen, Ziele und Grenzen linear zu transformieren, insbesondere wenn die Einschränkungen künstlich erstellt werden .


Hallo Frank und herzlich willkommen bei Scicomp! Die Frage, die Sie stellen, ist vollkommen gültig, aber da sie die Frage des ursprünglichen OP nicht wirklich anspricht, gehört sie wirklich nicht als "Antwort". Sie sollten es wirklich löschen und als separate Frage detaillierter erneut veröffentlichen.
Paul

Egal: Mit dieser Methode kann Simplex nach der Übersetzung von x0 in 0 ein angegebenes Anfangs-x0 verwenden. Die Simplex-Methode ignoriert ursprünglich alle bereitgestellten x0.
Frank
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.