Python CVXOPT模块安装及使用解析


Posted in Python onAugust 01, 2019

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:

Python CVXOPT模块安装及使用解析

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

Python CVXOPT模块安装及使用解析

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

二次型规划问题

Python CVXOPT模块安装及使用解析

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

Python CVXOPT模块安装及使用解析

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:

Python CVXOPT模块安装及使用解析

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
Dec 06 Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
Apr 24 Python
python生成ppt的方法
Jun 07 Python
使用python将大量数据导出到Excel中的小技巧分享
Jun 14 Python
对python 生成拼接xml报文的示例详解
Dec 28 Python
20行python代码实现人脸识别
May 05 Python
Python实现的爬取百度贴吧图片功能完整示例
May 10 Python
python+selenium实现简历自动刷新的示例代码
May 20 Python
Python中的Cookie模块如何使用
Jun 04 Python
Python3如何使用tabulate打印数据
Sep 25 Python
python 使用OpenCV进行简单的人像分割与合成
Feb 02 Python
Python图像处理库PIL详细使用说明
Apr 06 Python
Python Selenium 之数据驱动测试的实现
Aug 01 #Python
Python 一键获取百度网盘提取码的方法
Aug 01 #Python
Django中的静态文件管理过程解析
Aug 01 #Python
pycharm 批量修改变量名称的方法
Aug 01 #Python
python腾讯语音合成实现过程解析
Aug 01 #Python
Python空间数据处理之GDAL读写遥感图像
Aug 01 #Python
Python生命游戏实现原理及过程解析(附源代码)
Aug 01 #Python
You might like
php中的登陆login
2007/01/18 PHP
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
2012/01/03 PHP
php反射应用示例
2014/02/25 PHP
php把时间戳转换成多少时间之前函数的实例
2016/11/16 PHP
Zend Framework分发器用法示例
2016/12/11 PHP
PHP实现的观察者模式实例
2017/06/21 PHP
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
addEventListener 的用法示例介绍
2014/05/07 Javascript
使用jQuery设置disabled属性与移除disabled属性
2014/08/21 Javascript
用js读、写、删除Cookie代码续篇
2014/12/03 Javascript
基于jPlayer三分屏的制作方法
2016/12/21 Javascript
js中toString()和String()区别详解
2017/03/23 Javascript
node.js操作mysql简单实例
2017/05/25 Javascript
浅谈JS如何实现真正的对象常量
2017/06/25 Javascript
Vue学习之路之登录注册实例代码
2017/07/06 Javascript
vuejs实现本地数据的筛选分页功能思路详解
2017/11/15 Javascript
React数据传递之组件内部通信的方法
2017/12/31 Javascript
python将html转成PDF的实现代码(包含中文)
2013/03/04 Python
python插入排序算法的实现代码
2013/11/21 Python
python通过cookie模拟已登录状态的初步研究
2016/11/09 Python
使用django-crontab实现定时任务的示例
2018/02/26 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
Python操作Excel插入删除行的方法
2018/12/10 Python
关于pycharm中pip版本10.0无法使用的解决办法
2019/10/10 Python
pytorch查看torch.Tensor和model是否在CUDA上的实例
2020/01/03 Python
高考考python编程是真的吗
2020/07/20 Python
利用python+request通过接口实现人员通行记录上传功能
2021/01/13 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
2021/01/28 Python
CSS3 media queries + jQuery实现响应式导航
2016/09/30 HTML / CSS
Nike瑞士官网:Nike CH
2021/01/18 全球购物
初三家长会邀请函
2014/01/18 职场文书
煤矿安全生产标语
2014/06/06 职场文书
学习优秀共产党员先进事迹思想报告
2014/09/17 职场文书
走群众路线学习心得体会
2014/10/31 职场文书
HR在给员工开具离职证明时,需要注意哪些问题?
2019/07/03 职场文书
使用logback实现按自己的需求打印日志到自定义的文件里
2021/08/30 Java/Android