Hay varias bibliotecas que incluyen solucionadores de QP. Hay opciones tanto de código abierto como comerciales. Las respuestas existentes enumeran algunas de ellas. Me gustaría aclarar el problema con la matriz.
Supongo que se está refiriendo a la matriz de objetivos. La matriz de restricciones solo necesita conducir a un conjunto factible no vacío. Usted mencionó que la matriz no es adecuada para la descomposición de Cholesky. Dado que la descomposición de Cholesky se puede formar para cualquier matriz definida positiva, la implicación es que su matriz no es positiva definida.
Si la matriz es positiva semi-definida (es decir, tiene uno o más valores propios cero), entonces el problema es una QP convexa y se puede resolver de manera eficiente. Sin embargo, muchos solucionadores requieren un objetivo definido positivo. Dado que el objetivo de una QP semidefinida positiva tiene un espacio nulo no trivial, puede haber muchas soluciones. De hecho, el conjunto de soluciones puede ser ilimitado. Los algoritmos numéricos solo darán una solución aproximada de todos modos, por lo que rara vez es importante que la matriz tenga valores propios que sean exactamente cero. Puede hacer la matriz positiva definida agregando una matriz diagonal con un pequeño valor positivo en la diagonal. Esto esencialmente seleccionará la solución con la norma de 2 más pequeña. En la práctica, es una buena idea hacer esto incluso cuando la matriz es positiva definida porque las matrices que tienen valores propios cercanos a cero a menudo pueden causar problemas con los solucionadores numéricos. Qué diagonal agregar es una compensación entre estabilidad y precisión.
Si la matriz es indefinida (es decir, tiene incluso un autovalor negativo), el problema es NP-hard. Esto significa que cualquier código basado en los algoritmos actualmente disponibles tendrá tiempos de ejecución irrazonable en el peor de los casos, incluso para problemas de tamaño moderado. Si su problema tiene alguna estructura especial o no requiere una solución globalmente óptima, entonces puede estar bien. Un enfoque típico es buscar una relajación convexa.
Disculpa por decir lo obvio, pero tuve que verificar Wikipedia para saber qué es la programación cuadrática y vi que contiene referencias a algunas implementaciones, ¿las has revisado? O tal vez http://hqp.sourceforge.net/index.html o http://www.gnu.org/s/gsl/ ayudarían? – rve
@rve Reviso el gsl, no tiene una función de solución de programación cuadrática. También verifiqué la wiki, la mayoría de ellos no están escritos en C/C++ o son muy difíciles de instalar. Verificará el hqp para ver si funciona, gracias –
¿Cómo podría una matriz no ser aplicable a la descomposición de Cholesky? Cualquier matriz simétrica positiva-semidefinida es aplicable (y la descomposición toma ~ n^3/3 FLOP). La expresión $ x^TQx $ siempre se puede (re) escribir con $ Q $ siendo simétrica. ¿Quiere decir que no es positivo, semidefinido? – fiktor