python安装cvxopt_Python CVXOPT模块安装及使用解析

Python中支持Convex Optimization(凸规划)的模块为CVXOPT,其安装方式为:

卸载原Pyhon中的Numpy

安装CVXOPT的whl文件,链接为:https://www.lfd.uci.edu/~gohlke/pythonlibs/

安装Numpy+mkl的whl文件,链接为:https://www.lfd.uci.edu/~gohlke/pythonlibs/

之所以选择这种安装方式,是因为Python的whl和pip直接install的不兼容性。

CVXOPT的官方说明文档网址为:http://cvxopt.org/index.html, 现最新版本为1.1.9,由Martin Andersen, Joachim Dahl 和Lieven Vandenberghe共同开发完成,能够解决线性规划和二次型规划问题,其应用如SVM中的Hard Margin SVM.

CVXOPT使用举例如下:

线性规划问题

例1:

671c50f7114d64b2994b44a72eb4742b.gif

Python程序代码:import numpy as np

from cvxopt import matrix, solvers

A = matrix([[-1.0, -1.0, 0.0, 1.0], [1.0, -1.0, -1.0, -2.0]])

b = matrix([1.0, -2.0, 0.0, 4.0])

c = matrix([2.0, 1.0])

sol = solvers.lp(c,A,b)

print(sol['x'])

print(np.dot(sol['x'].T, c))

print(sol['primal objective'])

输出结果:pcost dcost gap pres dres k/t

0: 2.6471e+00 -7.0588e-01 2e+01 8e-01 2e+00 1e+00

1: 3.0726e+00 2.8437e+00 1e+00 1e-01 2e-01 3e-01

2: 2.4891e+00 2.4808e+00 1e-01 1e-02 2e-02 5e-02

3: 2.4999e+00 2.4998e+00 1e-03 1e-04 2e-04 5e-04

4: 2.5000e+00 2.5000e+00 1e-05 1e-06 2e-06 5e-06

5: 2.5000e+00 2.5000e+00 1e-07 1e-08 2e-08 5e-08

Optimal solution found.

{'primal objective': 2.4999999895543072, 's': <4x1 matrix, tc='d'>, 'dual infeasibility': 2.257878974569382e-08, 'primal slack': 2.0388399547464153e-08, 'dual objective': 2.4999999817312535, 'residual as dual infeasibility certificate': None, 'dual slack': 3.529915972607509e-09, 'x': <2x1 matrix, tc='d'>, 'iterations': 5, 'gap': 1.3974945737723005e-07, 'residual as primal infeasibility certificate': None, 'z': <4x1 matrix, tc='d'>, 'y': <0x1 matrix, tc='d'>, 'status': 'optimal', 'primal infeasibility': 1.1368786228004961e-08, 'relative gap': 5.5899783359379607e-08}

[ 5.00e-01]

[ 1.50e+00]

[[ 2.49999999]]

例2

671c50f7114d64b2994b44a72eb4742b.gif

Python程序代码import numpy as np

from cvxopt import matrix, solvers

A = matrix([[1.0, 0.0, -1.0], [0.0, 1.0, -1.0]])

b = matrix([2.0, 2.0, -2.0])

c = matrix([1.0, 2.0])

d = matrix([-1.0, -2.0])

sol1 = solvers.lp(c,A,b)

min = np.dot(sol1['x'].T, c)

sol2 = solvers.lp(d,A,b)

max = -np.dot(sol2['x'].T, d)

print('min=%s,max=%s'%(min[0][0], max[0][0]))

输出结果:pcost dcost gap pres dres k/t

0: 4.0000e+00 -0.0000e+00 4e+00 0e+00 0e+00 1e+00

1: 2.7942e+00 1.9800e+00 8e-01 9e-17 7e-16 2e-01

2: 2.0095e+00 1.9875e+00 2e-02 4e-16 2e-16 7e-03

3: 2.0001e+00 1.9999e+00 2e-04 2e-16 6e-16 7e-05

4: 2.0000e+00 2.0000e+00 2e-06 6e-17 5e-16 7e-07

5: 2.0000e+00 2.0000e+00 2e-08 3e-16 7e-16 7e-09

Optimal solution found.

pcost dcost gap pres dres k/t

0: -4.0000e+00 -8.0000e+00 4e+00 0e+00 1e-16 1e+00

1: -5.2058e+00 -6.0200e+00 8e-01 1e-16 7e-16 2e-01

2: -5.9905e+00 -6.0125e+00 2e-02 1e-16 0e+00 7e-03

3: -5.9999e+00 -6.0001e+00 2e-04 1e-16 2e-16 7e-05

4: -6.0000e+00 -6.0000e+00 2e-06 1e-16 2e-16 7e-07

Optimal solution found.

min=2.00000000952,max=5.99999904803

二次型规划问题

671c50f7114d64b2994b44a72eb4742b.gif

其中P,q,G,h,A,b为输入矩阵,该问题求解采用QP算法。

例1:

671c50f7114d64b2994b44a72eb4742b.gif

Python程序代码:from cvxopt import matrix, solvers

Q = 2*matrix([[2, .5], [.5, 1]])

p = matrix([1.0, 1.0])

G = matrix([[-1.0,0.0],[0.0,-1.0]])

h = matrix([0.0,0.0])

A = matrix([1.0, 1.0], (1,2))

b = matrix(1.0)

sol=solvers.qp(Q, p, G, h, A, b)

print(sol['x'])

print(sol['primal objective'])

输出结果:pcost dcost gap pres dres

0: 1.8889e+00 7.7778e-01 1e+00 2e-16 2e+00

1: 1.8769e+00 1.8320e+00 4e-02 0e+00 6e-02

2: 1.8750e+00 1.8739e+00 1e-03 1e-16 5e-04

3: 1.8750e+00 1.8750e+00 1e-05 6e-17 5e-06

4: 1.8750e+00 1.8750e+00 1e-07 2e-16 5e-08

Optimal solution found.

[ 2.50e-01]

[ 7.50e-01]

例2:

671c50f7114d64b2994b44a72eb4742b.gif

Python程序代码:from cvxopt import matrix, solvers

P = matrix([[1.0, 0.0], [0.0, 0.0]])

q = matrix([3.0, 4.0])

G = matrix([[-1.0, 0.0, -1.0, 2.0, 3.0], [0.0, -1.0, -3.0, 5.0, 4.0]])

h = matrix([0.0, 0.0, -15.0, 100.0, 80.0])

sol=solvers.qp(P, q, G, h)

print(sol['x'])

print(sol['primal objective'])

输出结果pcost dcost gap pres dres

0: 1.0780e+02 -7.6366e+02 9e+02 0e+00 4e+01

1: 9.3245e+01 9.7637e+00 8e+01 6e-17 3e+00

2: 6.7311e+01 3.2553e+01 3e+01 6e-17 1e+00

3: 2.6071e+01 1.5068e+01 1e+01 2e-17 7e-01

4: 3.7092e+01 2.3152e+01 1e+01 5e-18 4e-01

5: 2.5352e+01 1.8652e+01 7e+00 7e-17 3e-16

6: 2.0062e+01 1.9974e+01 9e-02 2e-16 3e-16

7: 2.0001e+01 2.0000e+01 9e-04 8e-17 5e-16

8: 2.0000e+01 2.0000e+01 9e-06 1e-16 2e-16

Optimal solution found.

[ 7.13e-07]

[ 5.00e+00]

20.00000617311241

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持爱安网。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值