¿Cuáles son los mejores solucionadores de programas cuadráticos?

Permítanme agregar CVXGEN: Generación de código para la optimización convexa a la mezcla. Es un generador de código para resolver QP * específicos *. No es un solucionador de QP genérico, aunque puede resolver cualquier problema que sea representable por QP (siempre que se cumplan algunas restricciones prácticas).

En términos de velocidad, probablemente sea el solucionador de QP más rápido que encontrará para su problema específico, ya que generará un código personalizado para resolver ese QP. (Genera un solucionador personalizado para su problema específico). Puede llevar un tiempo generar el código personalizado, pero una vez que ese código ha sido generado y compilado, el solucionador real se ejecuta bastante rápido.

No es compatible con la computación distribuida.

En cuanto a la facilidad de uso, debe aprender un nuevo idioma (es pequeño) para especificar su QP, pero una vez que lo aprende, es muy fácil especificar QP. El resultado final es una pieza de código ANSI C y un Makefile, que, creo, debería compilarse sin problemas en la mayoría de las máquinas.

Debo señalar que CVXGEN tiene algunos inconvenientes serios: no funciona en problemas de tamaño mediano (una matriz KKT con 5000 o menos nonzeros hará que el codegen falle) y cada vez que cambien las dimensiones del problema, debe codificar nuevamente.

Y en aras de la divulgación completa, he trabajado con el tipo que escribió el código para CVXGEN, así que estoy un poco parcial. :-pags

Esta es una pregunta realmente difícil de responder; Realmente se reduce a su problema individual. En términos generales, la mayoría de las ofertas comerciales de QP (CPLEX, Gurobi, Xpress) son muy buenas.

No estoy seguro de si son compatibles con la computación distribuida para QP (sé que CPLEX y Gurobi lo hacen para MIP). Estoy pensando que los QP pueden no beneficiarse demasiado de múltiples procesadores. Un área en la que un procesador multinúcleo podría ser útil para un QP es la enumeración de restricciones para determinar el conjunto activo. Pero los métodos de barrera (punto interior) evitan esta enumeración por completo.

Todos los solucionadores requieren algunos ajustes, aunque la configuración predeterminada suele ser “lo suficientemente buena” para la mayoría de las personas. CPLEX tiene una herramienta de ajuste automático que intenta descubrir la mejor configuración de solución para su problema particular, y en mi experiencia, esto puede resultar en una mejora del 10-30% en la velocidad de los MIP; pero nunca lo he probado para QP, por lo que su kilometraje puede variar.

He usado CVXOPT para resolver mi problema de QP en la simulación de detección de colisión que hice hace unos meses. El objetivo principal de CVXOPT es hacer que el desarrollo de software para aplicaciones de optimización convexa sea sencillo al construir sobre la extensa biblioteca estándar de Python y sobre las fortalezas de Python como un lenguaje de programación de alto nivel. Es de código abierto, muy fácil de usar y la documentación y los tutoriales son bastante exhaustivos. Lo bueno es que es compatible con NumPy, por lo que puede usar matrices numpy para describir las matrices. Utiliza algoritmos de punto interior para resolver el QP. No he realizado ninguna evaluación comparativa con otros solucionadores, por lo que no tengo mucha idea sobre qué tan bien funciona en comparación con otros solucionadores.

More Interesting

¿Cuáles son las mejores técnicas para crear vectores de oraciones para el procesamiento del lenguaje natural?

Cómo usar KNN para datos mixtos (categóricos y numéricos)

Según Wikipedia, las redes neuronales artificiales actuales tienen la complejidad del cerebro de un gusano. ¿Es eso cierto?

¿Cuáles son las mejores empresas de minería de datos?

¿Por qué usamos convolución en redes neuronales?

¿Cuáles son las diferencias entre los algoritmos CHAID y CART para el crecimiento de los árboles de decisión?

¿Cuáles son las principales razones contra el uso de apilamiento cuando tenemos redes neuronales?

¿Se pueden mapear los datos de entrada circulares (como la fase de una sinusoide) en un espacio de características lineales usando un núcleo lineal usando SVM? Si no, ¿qué núcleo es óptimo para datos de entrada circulares?

¿En qué deberían centrarse los gerentes de productos de software que son nuevos en AI / Machine Learning? Los cursos en línea son extremadamente técnicos. ¿Es eso lo que se necesita?

¿Cómo escriben las personas pruebas automatizadas para sus algoritmos estocásticos?

¿Es un SVM o un clasificador MaxEnt apropiado para este escenario de clasificación de texto y por qué?

¿Por qué es popular el aprendizaje profundo?

¿Es posible comenzar a aprender y trabajar en el aprendizaje por refuerzo y el aprendizaje profundo sin un conocimiento previo sólido de otras clases de ML?

¿Sería posible entrenar una computadora para reconocer con precisión a escritores individuales en Quora analizando muestras escritas?

¿Soy un desarrollador de dinosaurios si no uso Github, no conozco CI / CD y docker y solo conozco el aprendizaje profundo de la palabra de moda?