我正在将一个 MATLAB 脚本移植到使用quadprog函数的 Python。最好的等价物似乎是qp。我可以用文档和一些时间计算出等效的符号,但我很懒,只复制粘贴一些代码而不是考虑它会很好。所以:
- 这两个函数中的哪个参数是等价的?
- 如何将 quadprog 的上限和下限合并到 cvxopt.solvers.qp 中?
我已经阅读了这个相关的问题,但我什至比这更懒惰。
这是一个愚蠢的问题,但由于周围可能有更多懒惰的人,请使用这行 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。如果您一直在使用矩阵,请查看此文档以找到 G 和 h 的公式:
G = numpy.bmat('C3, -numpy.eye(n), numpy.eye(n)')
h = numpy.bmat('C4, -C7, C8')