Trovare soluzioni angolari esatte per la programmazione lineare usando i metodi dei punti interni


11

L'algoritmo simplex cammina avidamente agli angoli di un politopo per trovare la soluzione ottimale al problema di programmazione lineare. Di conseguenza, la risposta è sempre un angolo del politopo. I metodi dei punti interni percorrono l'interno del politopo. Di conseguenza, quando un intero piano del politopo è ottimale (se la funzione obiettivo è esattamente parallela al piano), possiamo ottenere una soluzione nel mezzo di questo piano.

Supponiamo di voler invece trovare un angolo del politopo. Ad esempio, se vogliamo ottenere la massima corrispondenza riducendola alla programmazione lineare, non vogliamo ottenere una risposta consistente in "la corrispondenza contiene lo 0,34% del bordo XY e lo 0,89% del bordo AB e ...". Vogliamo ottenere una risposta con 0 e 1 (che simplex ci darebbe poiché tutti gli angoli sono costituiti da 0 e 1). C'è un modo per farlo con un metodo punto interno che garantisce di trovare soluzioni angolari esatte in tempi polinomiali? (ad esempio forse possiamo modificare la funzione obiettivo per favorire gli angoli)


1
@JD: Perché non fai di questo una risposta?
Raffaello

Risposte:


6

Potresti voler leggere il documento:

Sanjay Mehrotra, Alla ricerca di una soluzione di vertice usando metodi di punti interni, Algebra lineare e sue applicazioni, Volume 152, 1 luglio 1991, Pagine 233-253, ISSN 0024-3795, 10.1016 / 0024-3795 (91) 90277-4. link all'articolo sciencedirect


4

Mentre la domanda in generale ha senso, è strano che tu scelga la corrispondenza massima come esempio, perché ci sono molti algoritmi (flussi massimi per la corrispondenza bipartita massima cardinalità, algoritmo di Edmonds per la corrispondenza non bipartita e algoritmo ungherese per corrispondenza bipartita peso massimo) che forniranno tutte soluzioni di vertici interi al problema.


Era più di un interesse teorico che pratico. Tuttavia, molte volte i metodi dei punti interni sono più veloci del simplex, quindi potrebbero esserci problemi in cui questo è un problema pratico;)
Jules

3

Per la mancanza di dettagli, questo è solo un commento più lungo:

L'algoritmo del tempo polinomiale di Karmarkar si sposta solo vicino al bordo. Alla fine, trova una soluzione di base adatta (ad es. Angolo) che è ottimale usando uno schema di purificazione ¹. Puoi usare questa o una tecnica simile per spostarti in un angolo da un piano.


¹ Non riesco a capire nel documento originale di Karmarkar . La mia referenza è "Lineare Optimierung und Netzwerkoptimierung" (inglese: ottimizzazione lineare e di rete) di Hamacher e Klamroth con testo tedesco e inglese fianco a fianco.


1

Sì, esiste un metodo semplice e l'ho implementato in C ++ per combinare la velocità dei metodi dei punti interni con l'accuratezza dei metodi simplex (utilizzando il perfezionamento iterativo dell'inverso della matrice di base posso ottenere una precisione di 1 parte in 10 ^ 15 e meglio su matrici di vincoli densi con oltre 1000 variabili e vincoli).

La chiave sta nel metodo simplex che usi. Supponiamo che il metodo simplex abbia un meccanismo per il refactoring di una base (ad es. Dopo che gli errori di arrotondamento cumulativo lo rendono necessario) e che questo metodo di rifattorizzazione ricrea semplicemente una matrice inversa di base per una base che contiene tutto l'elenco desiderato di variabili di base. Supponi inoltre che anche se la base desiderata non può essere ricreata completamente, che l'algoritmo simplex è in grado di continuare da una base che contiene il 95% della base target, la risposta è molto semplice.

Tutto quello che devi fare è prendere la soluzione dal tuo metodo del punto interno, eliminare la variabile i cui valori della soluzione primaria sono impliciti come zero per allentamento complementare e, data una dimensione di base nel problema simplex di b, prendere le variabili b all'interno punta la soluzione con i valori più grandi (o quanti sono i valori diversi da zero se questo è inferiore a b) e rifattorizza la base simplex per contenere quelle variabili b. Quindi continuare il metodo simplex fino a quando non viene risolto. Dato che stai iniziando il problema simplex vicino al traguardo, questo di solito è molto veloce.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.