Optimización cuadrática con cvxopt en Python

He demostrado cómo resolver problemas lineales usando SciPy en Python, y cómo resolver problemas de optimización no lineal en R (por ejemplo, con nloptr para la optimización de descenso de gradiente). En esta publicación quiero mostrar cómo resolver tareas de optimización cuadrática en Python, usando el módulo cvxopt.

Usando el módulo cvxopt en Python modelaré y resolveré el siguiente problema:

Para resolver este problema usando el módulo cvxopt en Python, uno debe replantear el problema en forma de notación de matrices y vectores:

En el siguiente ejemplo de codificación, resuelvo el problema anterior, estableciéndolo de acuerdo con la plantilla dada en forma de notación de matrices y vectores:

#  preparar las entradas de modelado, usando cvxopt 
from cvxopt import matrix

#  establecer matrices y vectores 
P = matrix([[2.0,0.0],[0.0,4.0]])
q = matrix([6.0,20.0])
G = matrix([[-1.0,-1.0],[-2.0,-3.0]])
h = matrix([-10.0,0.0])

# importar el solucionador desde el módulo cvxopt  
from cvxopt import solvers

# usando el solucionador 
solution = solvers.qp(P=P,
                     q=q,
                     G=G,
                     h=h)
     pcost       dcost       gap    pres   dres
 0:  3.1195e+00  1.0142e+02  2e+01  1e+00  3e-01
 1:  1.1086e+02  1.1722e+02  4e+00  9e-02  2e-02
 2:  1.1727e+02  1.1733e+02  4e-02  9e-04  2e-04
 3:  1.1733e+02  1.1733e+02  4e-04  9e-06  2e-06
 4:  1.1733e+02  1.1733e+02  4e-06  9e-08  2e-08
 Solución óptima encontrada. 
# óptimo x1
solution["x"][0]
4.6666665332235375
# óptimo x2
solution["x"][1]
2.6666665168063117
# valor óptimo de la función objetivo 
solution["primal objective"] + 5
122.33332669148787

Leave a Reply

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Close

Meta