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之for循环语句
Oct 02 Python
Python多进程multiprocessing用法实例分析
Aug 18 Python
Python实现string字符串连接的方法总结【8种方式】
Jul 06 Python
Python实现快速傅里叶变换的方法(FFT)
Jul 21 Python
Python 占位符的使用方法详解
Jul 10 Python
python实现获取单向链表倒数第k个结点的值示例
Oct 24 Python
Jupyter notebook快速入门教程(推荐)
May 18 Python
python实现126邮箱发送邮件
May 20 Python
python模块如何查看
Jun 16 Python
python使用bs4爬取boss直聘静态页面
Oct 10 Python
Python关于拓扑排序知识点讲解
Jan 04 Python
利用Python过滤相似文本的简单方法示例
Feb 03 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用身份证号获取星座和生肖的方法
2013/11/07 PHP
PHP查询大量数据内存耗尽问题的解决方法
2016/10/28 PHP
Input 特殊事件onpopertychange和oninput
2009/06/17 Javascript
学习ExtJS form布局
2009/10/08 Javascript
事件模型在各浏览器中存在差异
2010/10/20 Javascript
基于jQuery的简单的列表导航菜单
2011/03/02 Javascript
JavaScript中的some()方法使用详解
2015/06/09 Javascript
谈谈JavaScript中function多重理解
2015/08/28 Javascript
jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法
2015/11/23 Javascript
js命名空间写法示例
2015/12/18 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
2016/03/01 Javascript
js实现String.Fomat的实例代码
2016/09/02 Javascript
jquery实现简单实用的轮播器
2017/05/23 jQuery
JS实现二维数组横纵列转置的方法
2018/04/17 Javascript
Vue.js 父子组件通信的十种方式
2018/10/30 Javascript
JS重学系列之聊聊new操作符
2019/03/04 Javascript
JS中的模糊查询功能
2019/12/08 Javascript
easyUI 实现的后台分页与前台显示功能示例
2020/06/01 Javascript
JavaScript中的几种继承方法示例
2020/12/06 Javascript
Python获取Windows或Linux主机名称通用函数分享
2014/11/22 Python
Python使用Beautiful Soup包编写爬虫时的一些关键点
2016/01/20 Python
Python判断文本中消息重复次数的方法
2016/04/27 Python
Python实现感知器模型、两层神经网络
2017/12/19 Python
Python类装饰器实现方法详解
2018/12/21 Python
对Python 检查文件名是否规范的实例详解
2019/06/10 Python
pytorch 图像预处理之减去均值,除以方差的实例
2020/01/02 Python
Django中使用Json返回数据的实现方法
2020/06/03 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
2020/09/03 Python
凯伦·米莲女装网上商店:Karen Millen
2017/11/07 全球购物
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
《翻越远方的大山》教学反思
2014/04/13 职场文书
党风廉政建设责任书
2014/04/14 职场文书
教师优秀党员事迹材料
2014/08/14 职场文书
故意伤害人身损害赔偿协议书
2014/11/19 职场文书
vue引入Excel表格插件的方法
2021/04/28 Vue.js
python使用pycharm安装pyqt5以及相关配置
2022/04/22 Python