Finden exakter Ecklösungen für die lineare Programmierung mithilfe von Innenpunktmethoden


11

Der Simplex-Algorithmus läuft gierig an den Ecken eines Polytops entlang, um die optimale Lösung für das lineare Programmierproblem zu finden. Infolgedessen ist die Antwort immer eine Ecke des Polytops. Innenpunktmethoden laufen durch das Innere des Polytops. Wenn eine ganze Ebene des Polytops optimal ist (wenn die Zielfunktion genau parallel zur Ebene ist), können wir eine Lösung in der Mitte dieser Ebene erhalten.

Angenommen, wir möchten stattdessen eine Ecke des Polytops finden. Wenn wir beispielsweise eine maximale Übereinstimmung erzielen möchten, indem wir sie auf lineare Programmierung reduzieren, möchten wir keine Antwort erhalten, die aus "Die Übereinstimmung enthält 0,34% der Kante XY und 0,89% der Kante AB und ..." besteht. Wir möchten eine Antwort mit Nullen und Einsen erhalten (was uns Simplex geben würde, da alle Ecken aus Nullen und Einsen bestehen). Gibt es eine Möglichkeit, dies mit einer Innenpunktmethode zu tun, die garantiert, dass in der Polynomzeit exakte Ecklösungen gefunden werden? (Zum Beispiel können wir vielleicht die Zielfunktion ändern, um Ecken zu bevorzugen)


1
@JD: Warum machst du das nicht zu einer Antwort?
Raphael

Antworten:


6

Vielleicht möchten Sie die Zeitung lesen:

Sanjay Mehrotra, Über das Finden einer Scheitelpunktlösung unter Verwendung von Innenpunktmethoden, Lineare Algebra und ihre Anwendungen, Band 152, 1. Juli 1991, Seiten 233-253, ISSN 0024-3795, 10.1016 / 0024-3795 (91) 90277-4. sciencedirect Artikel Link


4

Obwohl die Frage im Allgemeinen sinnvoll ist, ist es seltsam, dass Sie als Beispiel die maximale Übereinstimmung auswählen, da es viele Algorithmen gibt (maximale Flüsse für die zweiteilige Übereinstimmung mit maximaler Kardinalität, der Edmonds-Algorithmus für die nicht zweigliedrige Übereinstimmung und der ungarische Algorithmus für die zweiteilige Übereinstimmung mit maximalem Gewicht). Das alles gibt ganzzahlige Vertex-Lösungen für das Problem.


Es war eher ein theoretisches als ein praktisches Interesse. Trotzdem sind innere Punktmethoden oft schneller als Simplex, so dass es Probleme geben kann, wenn dies ein praktisches Problem ist;)
Jules

3

Aus Mangel an Details ist dies lediglich ein längerer Kommentar:

Karmarkars Polynomzeitalgorithmus bewegt sich nur in der Nähe der Kante. Am Ende findet es eine geeignete Grundlösung (zB Ecke), die unter Verwendung eines Reinigungsschemas ¹ optimal ist . Sie können diese oder eine ähnliche Technik verwenden, um von einer Ebene zu einer Ecke zu gelangen.


¹ Ich kann es in Karmarkars Originalpapier nicht erkennen . Meine Referenz ist "Lineare Funktionen und Netzwerkoptimierung" von Hamacher und Klamroth, die deutschen und englischen Text nebeneinander haben.


1

Ja, es gibt eine einfache Methode, und ich habe sie in C ++ implementiert, um die Geschwindigkeit von Innenpunktmethoden mit der Genauigkeit von Simplex-Methoden zu kombinieren (durch iterative Verfeinerung der Umkehrung der Basismatrix kann ich Genauigkeiten von 1 Teil in 10 ^ 15 erreichen und besser bei dichten Constraint-Matrizen mit mehr als 1000 Variablen und Constraints).

Der Schlüssel liegt in der von Ihnen verwendeten Simplex-Methode. Angenommen, die Simplex-Methode verfügt über einen Mechanismus zum Refactoring einer Basis (z. B. nachdem kumulative Rundungsfehler dies erforderlich machen), und diese Refactorization-Methode erstellt einfach eine inverse Basismatrix für eine Basis, die alle gewünschten Listen von Basisvariablen enthält. Angenommen, selbst wenn die gewünschte Basis nicht vollständig wiederhergestellt werden kann und der Simplex-Algorithmus von einer Basis aus fortfahren kann, die 95% der Zielbasis enthält, ist die Antwort sehr einfach.

Alles, was Sie tun müssen, ist, die Lösung aus Ihrer Innenpunktmethode zu übernehmen, die Variable zu eliminieren, deren primäre Lösungswerte durch komplementäre Schlaffheit als Null impliziert werden, und bei gegebener Basisgröße im Simplex-Problem von b die b-Variablen im Innenraum zu nehmen Punktlösung mit den größten Werten (oder so viele, wie es Werte ungleich Null gibt, wenn dieser kleiner als b ist), und überarbeiten Sie die Simplex-Basis so, dass sie diese b-Variablen enthält. Setzen Sie dann die Simplex-Methode fort, bis sie gelöst ist. Da Sie das Simplex-Problem kurz vor dem Ziel starten, ist dies normalerweise sehr schnell.

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.