Kvadratisk optimering i Python med cvxopt-modulet

Jeg har tidligere skrevet om lineær optimering i Python og R (med lpSolve i R og med SciPy i Python). I dette indlæg vil jeg udføre kvadratisk optimering med cvxopt i Python.

cvxopt er et modul til konveks optimering i Python. Jeg ønsker at optimere følgende problem:

Målfunktionen er kvadratisk og problemet skal løses med kvadratisk programmering. Hertil kan jeg benytte mig af løsningsalgoritmer fra cvxopt-modulet. Dertil skal problemet beskrives i vektor-matriks-form. Faktisk skal problemet beskrives nøjagtigt som i nedenstående skabelon:

I den følgende Python-kode definerer jeg problemet med cvxopt.matrix og løser problemet med cvxopt.solvers:

# importer matrix fra cvxopt
from cvxopt import matrix

# definer hver relevant matriks og vektor
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])

# importer løsningsalgoritmer fra cvxopt 
from cvxopt import solvers

# løs problemet med qp-solveren
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.
# optimalværdi for x1
solution["x"][0]
4.6666665332235375
# optimalværdi for x2
solution["x"][1]
2.6666665168063117
# optimalværdi for målfunktionen
solution["primal objective"] + 5
122.33332669148787

Leave a Reply

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *

Close

Meta