摘要:中支持凸规划的模块为其安装方式为卸载原中的安装的文件,链接为安装的文件,链接为之所以选择这种安装方式,是因为的和直接的不兼容性。
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入门简单策略 sklearn 机器学习库的使用 什么是 SVM ? 支持向量机/support vector machine (SVM)。 当然首先看一下wik...
摘要:的模块其实就是封装了一个或者多个功能的代码集合,以便于重用,模块可以是一个文件也可以是一个目录,目录的形式称作包。已经导入的模块会保存在字典中。 Python的模块其实就是封装了一个或者多个功能的代码集合,以便于重用,模块可以是一个文件也可以是一个目录,目录的形式称作包。 模块分类 内置模块 内置模块可以理解成当你安装好python环境之后,直接可以使用import导入的就是内置模块,...
摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...
摘要:局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。 1. 变量作用域 Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python 的作用域一共有4种,分别是: L (Local) 局部作用...
摘要:但是在转化中,浮点数转化为二进制后,不会精确等于十进制的。一般情况下,只要简单地将最终显示的结果用四舍五入到所期望的十进制位数,就会得到期望的最终结果。四舍五入内建函数。在中的第二个数,表示要保留的小数位数,返回值是一个四舍五入之后的数值。 数字 基本类型 首先,进入Python交互模式中: //整数 >>> 3 3 //长整数 >>> 3333333333333333333333...
阅读 3248·2023-04-26 00:57
阅读 572·2021-10-08 10:05
阅读 1329·2021-09-08 09:36
阅读 4074·2021-08-12 13:31
阅读 2524·2019-08-30 15:55
阅读 2223·2019-08-30 15:55
阅读 992·2019-08-30 15:55
阅读 2665·2019-08-29 13:17