Quali sono le differenze tra i vari solutori di programmazione quadratica R?


9

Sto cercando un pacchetto per aiutarmi a risolvere alcuni problemi di ottimizzazione quadratica e vedo che ci sono almeno una mezza dozzina di pacchetti diversi. Secondo questa pagina:

QP (Programmazione quadratica, 90C20): cplexAPI , kernlab , limSolve , LowRankQP , quadprog , Rcplex , Rmosek

Alcuni di questi (Rmosek e cplexAPI) dipendono da altri pacchetti proprietari, quindi non sono interessato a quelli.

Quali sono le differenze notevoli tra gli altri pacchetti QP?


Hai guardato i documenti di riferimento forniti? La stessa procedura / algoritmo può avere implementazioni diverse. Se possibile, si potrebbe risolvere un problema di QP usando i metodi di punto interno , area di fiducia o set attivo .
usεr11852,

1
C'è anche il pacchetto osqp - per i sistemi sparsi è di gran lunga l'implementazione più veloce disponibile in R ora ...
Tom Wenseleers

Risposte:


11
  • Cplex (cplexAPI, Rcplex): non è open source (ma esiste una licenza accademica gratuita rinnovabile annuale). Supporta matrici sparse. Era il mio wrapper di gotto per QP mentre lo stavo usando. Beaware che la licenza accademica non consente di utilizzarlo su molti core (dire attraverso mclapply()).
  • ipop (quello in kernlab) è implementato in puro R. Ciò lo rende inutilmente lento nelle grandi applicazioni. Non supporta matrici sparse.
  • limSolve non risolve QP a tutti gli effetti, solo quelli in cui i vincoli sono di uguaglianza di tipo. Non tutti i problemi di QP possono essere inquadrati in questo modo, ma quando possono, hanno una soluzione esplicita. Non supporta matrici sparse.
  • LowRankQP: questo nella mia esperienza è buono (veloce rispetto agli altri open source). Non supporta matrici sparse.
  • quadprog: implementazione di base del solutore Goldfarb & Idnani Dual e Primal-Dual. Non supporta matrici sparse ma silenziose per problemi di dimensioni moderate.
  • Rmosek: mai provato.

Modificare.

Da quando ho scritto questa risposta, un nuovo pacchetto, ipoptr è ora disponibile su R-forge. Questo post di R-blogger confronta le sue prestazioni su QP puro con quadprog. In breve, ipoptr supporta terzine di matrice sparsa e tende ad essere molto più veloce di quadprod quando le matrici di progettazione sono sparse. Tuttavia, quando le matrici di progettazione sono dense, quadprog sembra essere significativamente più veloce.


2
La mia esperienza è che quadprog è ancora più veloce per problemi medio-piccoli e ipoptr è più veloce solo quando il problema è abbastanza grande.
Neal Fultz,

2
C'è una serie recente di post di blog su questi argomenti. Vedi, ad esempio, blog.ryanwalker.us/2015/02/…
chandler il


1
Si noti inoltre che quadprog richiede matrici definite positive in forma quadratica.
ae0709,

C'è anche il pacchetto osqp - per i sistemi sparsi è di gran lunga l'implementazione più veloce disponibile in R ora ...
Tom Wenseleers
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.