摘要:中支持凸規劃的模塊為其安裝方式為卸載原中的安裝的文件,鏈接為安裝的文件,鏈接為之所以選擇這種安裝方式,是因為的和直接的不兼容性。
??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
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41416.html
摘要:入門簡單策略機器學習庫的使用什么是支持向量機。就是試圖把棍放在最佳位置,好讓在棍的兩邊有盡可能大的間隙。現在即使魔鬼放了更多的球,棍仍然是一個好的分界線。魔鬼看到大俠已經學會了一個,于是魔鬼給了大俠一個新的挑戰。 Python入門簡單策略 sklearn 機器學習庫的使用 什么是 SVM ? 支持向量機/support vector machine (SVM)。 當然首先看一下wik...
摘要:的模塊其實就是封裝了一個或者多個功能的代碼集合,以便于重用,模塊可以是一個文件也可以是一個目錄,目錄的形式稱作包。已經導入的模塊會保存在字典中。 Python的模塊其實就是封裝了一個或者多個功能的代碼集合,以便于重用,模塊可以是一個文件也可以是一個目錄,目錄的形式稱作包。 模塊分類 內置模塊 內置模塊可以理解成當你安裝好python環境之后,直接可以使用import導入的就是內置模塊,...
摘要:時間永遠都過得那么快,一晃從年注冊,到現在已經過去了年那些被我藏在收藏夾吃灰的文章,已經太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設置私密了,不收拾不好看呀。 ...
摘要:局部變量只能在其被聲明的函數內部訪問,而全局變量可以在整個程序范圍內訪問。調用函數時,所有在函數內聲明的變量名稱都將被加入到作用域中。 1. 變量作用域 Python 中,程序的變量并不是在哪個位置都可以訪問的,訪問權限決定于這個變量是在哪里賦值的。變量的作用域決定了在哪一部分程序可以訪問哪個特定的變量名稱。Python 的作用域一共有4種,分別是: L (Local) 局部作用...
摘要:但是在轉化中,浮點數轉化為二進制后,不會精確等于十進制的。一般情況下,只要簡單地將最終顯示的結果用四舍五入到所期望的十進制位數,就會得到期望的最終結果。四舍五入內建函數。在中的第二個數,表示要保留的小數位數,返回值是一個四舍五入之后的數值。 數字 基本類型 首先,進入Python交互模式中: //整數 >>> 3 3 //長整數 >>> 3333333333333333333333...
閱讀 3278·2023-04-26 00:57
閱讀 600·2021-10-08 10:05
閱讀 1345·2021-09-08 09:36
閱讀 4147·2021-08-12 13:31
閱讀 2542·2019-08-30 15:55
閱讀 2237·2019-08-30 15:55
閱讀 1013·2019-08-30 15:55
閱讀 2684·2019-08-29 13:17