Quadratische Optimierung mit cvxopt in Python

In anderen Beiträgen habe ich bspw. lineare Optimierung mit lpSolve in R und SciPy.optimize in Python, quadratische Programmierung mit quadprog in R und nicht-lineare Optimierung mit nloptr in R demonstriert. In diesem Beitrag möchte ich auf die quadratische Optimierung mit dem cvxopt-Modul in Python eingehen.

Mit dem cvxopt-Modul möchte ich in Python nachstehendes Problem lösen:

Dieses Problem hat eine quadratische Zielfunktion – und kann mit dem cvxopt-Modul (ein Modul für strikt konvexe Optimierung in Python) gelöst werden. Hierfür muss ich das Problem in Vektor-Matrix Notationsform beschreiben. Insbesondere muss ich hierfür nachstehende Vorlage verwenden:

Im nachstehenden Programmierbeispiel löse ich obiges Problem mit cvxopt in Python. Dabei beginne ich mit der Modellierung des Problems in Vektor-Matrix Notationsform – und löse es mit der solvers.qp-Funktion:

# matrix-Paket aus cvxopt importieren
from cvxopt import matrix

# matrizen und vektoren mit cxopt.matrix beschreiben
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])

# paket mit lösungsalgorithmen (solvers) aus cvxopt importieren
from cvxopt import solvers

# qp-solver zur lösung des problems anwenden
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
Optimal solution found.
# optimalwert x1
solution["x"][0]
4.6666665332235375
# optimalwert x2
solution["x"][1]
2.6666665168063117
# optimaler zielfunktionswert
solution["primal objective"] + 5
122.33332669148787

Leave a Reply

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Close

Meta