我正在将一些MatLab代码翻译成Python。有一句话给我带来了一点麻烦:
[q,f_dummy,exitflag, output] = quadprog(H,f,-A,zeros(p*N,1),E,qm,[],[],q0,options);
我在MatLab中查阅了相关文档,发现了用于优化(特别是最小化)的函数为Quadprog。
我试图在Python中找到类似的函数(使用NumPy),但似乎没有。
有没有更好的方法将这行代码转换成Python?或者有其他可以使用的包吗?我需要创建一个完成相同任务的新函数吗?
感谢您的时间和帮助!
4条答案
按热度按时间yh2wf1be1#
有一个名为CVXOPT的库,里面有二次规划。
0s0u357o2#
我首先要指出的是,“二次规划”问题是“凸优化”问题的子集,而“凸优化”问题是“优化”问题的子集。
有多个解决二次编程问题的Python包,值得注意的是
1.cvxopt--解决各种“凸优化”问题(包括二次规划问题)。这是上一个cvx MATLAB package的python版本。
1.quadprog--这是专门针对二次编程问题的,但似乎没有太多的文档。
1.scipy.optimize.minimize--这是一个非常通用的最小化程序,可以解决二次规划问题,以及其他优化问题(凸和非凸)。
您还可以查看this stackoverflow post的答案,其中包含更多详细信息和参考资料。
注意:用户1911226的答案中的代码片段似乎来自这篇博客文章:https://scaron.info/blog/quadratic-programming-in-python.html,它比较了一些二次编程包。我不能评论他们的回答,但他们声称提到的是cvxopt解决方案,但代码实际上是为Quadprog解决方案编写的。
cngwdvgl3#
OSQP是一个基于ADMM的专用免费QP求解器。我已经针对您的问题修改了qpsolvers repository中的OSQP documentation demo和OSQP调用。
请注意,假设矩阵
H
和G
在CSC format中是稀疏的。这是剧本smtd7mpg4#
您可以使用qpsolvers中的
solve_qp
函数。它可以通过pip install qpsolvers[open_source_solvers]
与开放源码解算器的入门工具包一起安装。然后,您可以将您的代码行替换为:在Python中有许多解算器可用,每个解算器都有其优缺点。确保为
solver
关键字参数尝试不同的值,以找到最适合您的问题的值。以下是一个基于您的问题和其他评论的独立示例: