Python:从MATLAB的quadprog移植到cvxopt二次编程

时间:2013-11-25 03:22:33

标签: python optimization cvxopt

我正在将一个MATLAB脚本移植到使用quadprog函数的Python。最好的等价似乎是qp。我可以用doc和一点时间计算出等效的符号,但是我很懒,只是复制粘贴一些代码而不是考虑它会很好。所以:

  • 两个函数中的哪个参数是等价的?
  • 如何将quadprog的上限和下限合并到cvxopt.solvers.qp中?

我已经读过this related question了,但我比那更懒。

1 个答案:

答案 0 :(得分:4)

这是一个愚蠢的问题,但是由于周围可能会有更多的懒人,请使用这一系列的MATLAB代码(使用带编号的参数来提高可读性):

x = quadprog(C1, C2, C3, C4, C5, C6, C7, C8, ...)

Python中的等价物将是:

import numpy
import cvxopt
n = C1.shape[1]   # This is for readability only    

P = C1
q = C2
G = numpy.vstack([C3, -numpy.eye(n), numpy.eye(n)])
h = numpy.hstack([C4, -C7, C8])
A = C5
b = C6

sol = cvxopt.solvers.qp(cvxopt.matrix(P), cvxopt.matrix(q), cvxopt.matrix(G), cvxopt.matrix(h), cvxopt.matrix(A), cvxopt.matrix(b))
x = sol['x']

假设您一直在使用numpy.arrays。如果您一直在使用矩阵,请检查this doc以找到G和h的配方:

G = numpy.bmat('C3, -numpy.eye(n), numpy.eye(n)')
h = numpy.bmat('C4, -C7, C8')