¿Cuáles son las diferencias entre varios solucionadores de programación cuadrática R?

9

Estoy buscando un paquete que me ayude a resolver algunos problemas de optimización cuadrática y veo que hay al menos media docena de paquetes diferentes. De acuerdo con esta página:

QP (programación cuadrática, 90C20): cplexAPI , kernlab , limSolve , LowRankQP , quadprog , Rcplex , Rmosek

Algunos de estos (Rmosek y cplexAPI) dependen de otros paquetes propietarios, por lo que no estoy interesado en ellos.

¿Cuáles son las diferencias notables entre los otros paquetes QP?

Henry Henrinson
fuente
¿Has mirado los documentos de referencia dados? El mismo procedimiento / algoritmo puede tener implementaciones diferentes. En todo caso, uno podría resolver un problema de QP utilizando métodos de punto interior , región de confianza o conjunto activo .
usεr11852
1
También está el paquete osqp: para sistemas dispersos es, con mucho, la implementación más rápida disponible en R ahora ...
Tom Wenseleers

Respuestas:

11
  • Cplex (cplexAPI, Rcplex): no es de código abierto (pero hay una licencia académica gratuita anual renovable). Es compatible con matrices dispersas. Fue mi contenedor para QP mientras lo estaba usando. Tenga en cuenta que la licencia académica no permite usarla en muchos núcleos (digamos mclapply()).
  • ipop (el que está en kernlab) está implementado en R puro. Eso lo hace innecesariamente lento en aplicaciones grandes. No admite matrices dispersas.
  • limSolve no resuelve QP completos, solo aquellos donde las restricciones son de igualdad de tipos. No todos los problemas de QP pueden enmarcarse de esta manera, pero cuando pueden, tienen una solución explícita. No admite matrices dispersas.
  • LowRankQP: este en mi experiencia es bueno (rápido en comparación con los otros de código abierto). No admite matrices dispersas.
  • quadprog: implementación de línea base del solucionador Goldfarb & Idnani Dual y Primal-Dual. No admite matrices dispersas pero silenciosamente rápido para problemas de tamaño moderado.
  • Rmosek: nunca lo intenté.

Editar.

Desde que escribí esta respuesta, un nuevo paquete, ipoptr ahora está disponible en R-forge. Esta publicación de R-blogger compara su rendimiento en QP puro con quadprog. En resumen, ipoptr admite tripletes de matriz dispersos y tiende a ser mucho más rápido que quadprod cuando las matrices de diseño son dispersas. Sin embargo, cuando las matrices de diseño son densas, quadprog todavía parece ser significativamente más rápido.

usuario603
fuente
2
Mi experiencia es que quadprog es aún más rápido para problemas pequeños a medianos, y ipoptr es más rápido solo cuando el problema es bastante grande.
Neal Fultz
2
Hay un conjunto reciente de publicaciones de blog sobre estos temas. Ver, por ejemplo, blog.ryanwalker.us/2015/02/…
chandler
1
También tenga en cuenta que quadprog requiere matrices definidas positivas en la forma cuadrática.
ae0709
También está el paquete osqp: para sistemas dispersos es, con mucho, la implementación más rápida disponible en R ahora ...
Tom Wenseleers