在Python中使用cvxopt进行二次优化

我已经演示了如何在Python中使用SciPy解决线性问题,以及如何解决R中的非线性优化问题(例如,使用nloptr进行梯度下降优化)。在本文中,我想展示如何使用cvxopt-module解决Python中的二次优化任务。

我将在Python中使用cvxopt进行建模并解决以下问题:

为了在Python中使用cvxopt解决此问题,必须以矢量矩阵表示形式重新声明该问题-使其满足以下模板要求:

在下面的编码示例中,我解决了上述问题,并根据给定的模板以矢量矩阵表示形式进行了说明:

# 使用cvxopt准备建模输入 
from cvxopt import matrix

# 设置矩阵和向量 
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])

# 从cvxopt导入求解器,提供求解器功能  
from cvxopt import solvers

# 使用求解器 
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
找到最佳解决方案。 
# 最佳 x1
solution["x"][0]
4.6666665332235375
# 最佳  x2
solution["x"][1]
2.6666665168063117
# 最佳目标函数值 
solution["primal objective"] + 5
122.33332669148787

Leave a Reply

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Close

功能