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中的super用法详解
May 28 Python
python实现多线程的方式及多条命令并发执行
Jun 07 Python
Python3 伪装浏览器的方法示例
Nov 23 Python
python实现文件助手中查看微信撤回消息
Apr 29 Python
使用celery执行Django串行异步任务的方法步骤
Jun 06 Python
使用Python实现文字转语音并生成wav文件的例子
Aug 08 Python
Python 日期区间处理 (本周本月上周上月...)
Aug 08 Python
Python requests获取网页常用方法解析
Feb 20 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
May 15 Python
Python执行时间的几种计算方法
Jul 31 Python
python super()函数的基本使用
Sep 10 Python
Python基础之进程详解
May 21 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/02/05 PHP
header跳转和include包含问题详解
2012/09/08 PHP
php微信开发之上传临时素材
2016/06/24 PHP
php中isset与empty函数的困惑与用法分析
2019/07/05 PHP
php输出形式实例整理
2020/05/05 PHP
jQuery javaScript捕获回车事件(示例代码)
2013/11/07 Javascript
返回上一页并自动刷新的JavaScript代码
2014/02/19 Javascript
jQuery老黄历完整实现方法
2015/01/16 Javascript
yui3的AOP(面向切面编程)和OOP(面向对象编程)
2015/05/01 Javascript
在jQuery中处理XML数据的大致方法
2015/08/14 Javascript
基于AngularJs + Bootstrap + AngularStrap相结合实现省市区联动代码
2016/05/30 Javascript
AngularJs页面筛选标签小功能
2016/08/01 Javascript
js html css实现复选框全选与反选
2016/10/09 Javascript
获取当前按钮或者html的ID名称实例(推荐)
2017/06/23 Javascript
jQuery实现上传图片前预览效果功能
2017/08/03 jQuery
快速解决vue-cli不能初始化webpack模板的问题
2018/03/20 Javascript
nodejs 生成和导出 word的实例代码
2018/07/31 NodeJs
微信小程序实现页面下拉刷新和上拉加载功能详解
2018/12/03 Javascript
详解Vue中CSS样式穿透问题
2019/09/12 Javascript
使用Promise封装小程序wx.request的实现方法
2019/11/13 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
react antd表格中渲染一张或多张图片的实例
2020/10/28 Javascript
javascript实现倒计时关闭广告
2021/02/09 Javascript
[01:08]DOTA2“血战之命”预告片
2017/08/12 DOTA
python web框架学习笔记
2016/05/03 Python
Python实现简单求解给定整数的质因数算法示例
2018/03/25 Python
Python线程下使用锁的技巧分享
2018/09/13 Python
python+django+rest框架配置创建方法
2019/08/31 Python
如何安装2019Pycharm最新版本(详细教程)
2019/09/26 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
让IE可以变相支持CSS3选择器
2010/01/21 HTML / CSS
CSS3中媒体查询结合rem布局适配手机屏幕
2019/06/10 HTML / CSS
大班幼儿评语大全
2014/04/30 职场文书
创业女性典型材料
2014/05/02 职场文书
导师对论文的学术评语
2015/01/04 职场文书
党员理论学习心得体会
2016/01/21 职场文书