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 切片和range()用法说明
Mar 24 Python
Python常用列表数据结构小结
Aug 06 Python
用Python制作检测Linux运行信息的工具的教程
Apr 01 Python
python的mysqldb安装步骤详解
Aug 14 Python
Python if语句知识点用法总结
Jun 10 Python
python实现飞机大战
Sep 11 Python
Scrapy框架使用的基本知识
Oct 21 Python
Python的高阶函数用法实例分析
Apr 11 Python
Appium+python自动化怎么查看程序所占端口号和IP
Jun 14 Python
python 字典操作提取key,value的方法
Jun 26 Python
浅谈django 重载str 方法
May 19 Python
Django开发RESTful API实现增删改查(入门级)
May 10 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的加密方式及原理
2012/06/14 PHP
php用header函数实现301跳转代码实例
2013/11/25 PHP
php+xml编程之xpath的应用实例
2015/01/24 PHP
PHP curl 或 file_get_contents 获取需要授权页面的方法
2017/05/05 PHP
PHP get_html_translation_table()函数用法讲解
2019/02/16 PHP
利用PHP如何统计Nginx日志的User Agent数据
2019/03/06 PHP
jQuery使用手册之三 CSS操作
2007/03/24 Javascript
IE/FireFox具备兼容性的拖动代码
2007/08/13 Javascript
Code: write(s,d) 输出连续字符串
2007/08/19 Javascript
实现连缀调用的map方法(prototype)
2009/08/05 Javascript
jQuery 方法大全方便学习参考
2010/02/25 Javascript
ExtJs默认的字体大小改变的几种方法(自己整理)
2013/04/18 Javascript
JavaScript自定义数组排序方法
2015/02/12 Javascript
JQuery实现简单的图片滑动切换特效
2015/11/22 Javascript
JS查找字符串中出现次数最多的字符
2016/09/05 Javascript
浅谈React + Webpack 构建打包优化
2018/01/23 Javascript
nodejs用gulp管理前端文件方法
2018/06/24 NodeJs
详解vue使用vue-layer-mobile组件实现toast,loading效果
2018/08/31 Javascript
微信小程序收藏功能的实现代码
2020/06/19 Javascript
解决vuecli3中img src 的引入问题
2020/08/04 Javascript
python2.7读取文件夹下所有文件名称及内容的方法
2018/02/24 Python
python实现计数排序与桶排序实例代码
2019/03/28 Python
python+opencv实现移动侦测(帧差法)
2020/03/20 Python
用python实现一个简单计算器(完整DEMO)
2020/10/14 Python
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
recorder.js 基于Html5录音功能的实现
2020/05/26 HTML / CSS
详解HTML5中CSS外观属性
2020/09/10 HTML / CSS
英国领先品牌手动工具和电动工具供应商:Tooled Up
2018/11/24 全球购物
英国莱斯特松木橡木家具网上商店:Choice Furniture Superstore
2019/07/05 全球购物
大学毕业登记表自我鉴定
2013/10/09 职场文书
利群广告词
2014/03/20 职场文书
2014年大学生党课心得体会范文
2014/03/29 职场文书
2015教师见习期工作总结
2014/12/12 职场文书
伏羲庙导游词
2015/02/09 职场文书
如何写好竞聘报告
2019/04/03 职场文书
导游词之山东八大关
2019/12/18 职场文书