Il miglior libro sull'implementazione del metodo Simplex?


14

Sono interessato all'implementazione dell'attività SM per LP, tuttavia ho sentito parlare di possibili insidie: il libro di Cormen afferma che è possibile avere dati di input che renderanno l'implementazione ingenua per comportarsi in tempo esponenziale. Ho anche sentito che un'implementazione ingenua può eseguire il loop per alcuni tipi di dati.

Esiste un libro / documento / fonte che spiega le sfumature dell'attuazione pratica della SM?

Grazie in anticipo.


Risposte:


13

Consiglio vivamente l'articolo di Bixby, il "padre" di CPLEX, che indaga non solo sull'implementazione degli aspetti dell'algoritmo simplex (rivisto): Robert E. Bixby , Risolvere i programmi lineari del mondo reale: un decennio e più progressi , Operazioni Ricerca (50) 2002, 3-15 .


12

L'algoritmo simplex non è in P. CLRS quindi afferma che, anche se in pratica funziona "bene", ci sono alcuni input che fanno funzionare l'algoritmo in tempo esponenziale. Ciò è strettamente correlato all'algoritmo, non alla sua implementazione: dovrai affrontarlo indipendentemente da come esattamente implementi l'algoritmo. Tuttavia, LP è in P. Questo è stato dimostrato da Khachian nel 1979, tuttavia il suo algoritmo ellissoide non è pratico. Oggi, i metodi dei punti interni sono ampiamente utilizzati. Il primo fu scoperto da Karmarkar nel 1984.

Se sei interessato ad implementazioni pratiche, dai un'occhiata a:

GUROBI, gratuito per uso accademico, è attualmente il miglior ottimizzatore disponibile (sia versioni parallele sequenziali che a memoria condivisa):

http://www.gurobi.com

la biblioteca GLPK:

http://www.gnu.org/software/glpk/

questo è un progetto open source, che fornisce implementazioni per:

  • metodi primari e dual simplex
  • metodo del punto interno primal-dual
  • metodo di taglio e taglio
  • traduttore per GNU MathProg
  • interfaccia del programma applicativo (API)
  • risolutore LP / MIP autonomo

12
Infatti. Consiglio vivamente di NON provare a implementare il simplex da solo, a meno che non sia questo il punto centrale dell'esercizio. Se vuoi solo usarlo, i metodi disponibili sono molto meglio. Inoltre, CPLEX è gratuito per uso accademico se è appropriato per te.
Suresh Venkat,

1
Esistono implementazioni distribuite (come MPI) open source di LP?
Tomek Tarczynski,

3
@Tomek LP è P-completo ed è improbabile che abbia una parallelizzazione efficiente.
Marcus Ritt,

@Tomek: Simphony fornisce una versione distribuita attualmente in esecuzione in qualsiasi ambiente supportato dal protocollo di passaggio messaggi PVM (MPI non è ancora supportato). Lo stesso codice sorgente può anche essere compilato per architetture a memoria condivisa utilizzando qualsiasi compilatore conforme a OpenMP. Vedere branchandcut.org e il sito web COIN-OR fortemente correlato: coin-or.org
Massimo Cafaro

9
CPLEX è probabilmente la migliore implementazione di LP attualmente disponibile (ecco perché le persone pagano così tanto per questo), ma praticamente tutte le implementazioni ampiamente utilizzate faranno sostanzialmente meglio di qualsiasi cosa tu programmi. Ciò include i pacchetti Mathematical, Maple e MATLAB. Ci sono molte implementazioni in giro, comprese alcune abbastanza buone gratuite (QSopt, per esempio, che è gratuito se non hai intenzione di usarlo per scopi commerciali), quindi programmarlo da solo vale solo per l'esperienza di apprendimento.
Peter Shor,

9

Il libro di Programmazione lineare di Vanderbei passa attraverso molti dei dettagli di basso livello ... Ma come suggeriscono le altre risposte / commenti, implementare il solutore LP è un compito difficile e ingrato. Il risolutore di scaffali è probabilmente la strada da percorrere ... (Ci sono anche alcuni solutori di LP open source ...)


6

Non sono solo implementazioni ingenue che a volte si comportano in tempo esponenziale. In effetti, penso che tutte le regole deterministiche e randomizzate conosciute abbiano input di casi peggiori super-polinomiali. La maggior parte degli input noti che producono questo comportamento nel caso peggiore sono altamente strutturati, una domanda correlata:

La struttura delle istanze patologiche per gli algoritmi simplex

Tuttavia, in pratica SM funziona bene. Ciò è stato formalizzato dall'introduzione dell'analisi smussata che è sostanzialmente l'analisi del caso peggiore con input leggermente perturbati. In base a questa analisi, SM è il tempo polifunzionale, in altre parole, per ogni input (anche quelli patologici) c'è una leggera perturbazione che consente all'algoritmo di funzionare bene. Questa intuizione è stata trasformata in un algoritmo randomizzato che si esibisce in polytime. Tuttavia, per quanto ho capito, c'è ancora qualche dibattito sul fatto che questo algoritmo si qualifichi come un algoritmo simplex "vero". Inoltre, non so se i pacchetti standard implementano qualcosa di simile a questo, ma dovresti essere in grado di trovare qualche implementazione se cerchi in giro, a causa del risultato che ha più di 5 anni.


1

È possibile controllare Luenberger, Ye, Linear and Nonlinear Programming, 3rd ed. Sembra abbastanza completo, ma non ho ancora fatto abbastanza per dire se risponde completamente alla tua domanda.

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.