资讯专栏INFORMATION COLUMN

Python之CVXOPT模块

LiuZh / 1425人阅读

摘要:中支持凸规划的模块为其安装方式为卸载原中的安装的文件,链接为安装的文件,链接为之所以选择这种安装方式,是因为的和直接的不兼容性。

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

卸载原Pyhon中的Numpy

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

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

之所以选择这种安装方式,是因为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程序代码:

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程序代码

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

二次型规划问题

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

例1:

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程序代码:

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41416.html

相关文章

  • Python 机器学习 SVM 预测买卖(标的物:比特币)

    摘要:入门简单策略机器学习库的使用什么是支持向量机。就是试图把棍放在最佳位置,好让在棍的两边有尽可能大的间隙。现在即使魔鬼放了更多的球,棍仍然是一个好的分界线。魔鬼看到大侠已经学会了一个,于是魔鬼给了大侠一个新的挑战。 Python入门简单策略 sklearn 机器学习库的使用 什么是 SVM ? 支持向量机/support vector machine (SVM)。 当然首先看一下wik...

    andong777 评论0 收藏0
  • Python标准库系列模块介绍

    摘要:的模块其实就是封装了一个或者多个功能的代码集合,以便于重用,模块可以是一个文件也可以是一个目录,目录的形式称作包。已经导入的模块会保存在字典中。 Python的模块其实就是封装了一个或者多个功能的代码集合,以便于重用,模块可以是一个文件也可以是一个目录,目录的形式称作包。 模块分类 内置模块 内置模块可以理解成当你安装好python环境之后,直接可以使用import导入的就是内置模块,...

    v1 评论0 收藏0
  • 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0
  • Python 3 学习笔记——变量作用域、模块和包

    摘要:局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。 1. 变量作用域 Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python 的作用域一共有4种,分别是: L (Local) 局部作用...

    lijinke666 评论0 收藏0
  • Python基础(一)基本数据类型

    摘要:但是在转化中,浮点数转化为二进制后,不会精确等于十进制的。一般情况下,只要简单地将最终显示的结果用四舍五入到所期望的十进制位数,就会得到期望的最终结果。四舍五入内建函数。在中的第二个数,表示要保留的小数位数,返回值是一个四舍五入之后的数值。 数字 基本类型 首先,进入Python交互模式中: //整数 >>> 3 3 //长整数 >>> 3333333333333333333333...

    yagami 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<