繁体   English   中英

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

[英]Python: porting to cvxopt quadratic programming from MATLAB's quadprog

我正在将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')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM