1. 程式人生 > 其它 >Py之cvxopt:cvxopt庫的簡介、安裝、使用方法之詳細攻略

Py之cvxopt:cvxopt庫的簡介、安裝、使用方法之詳細攻略

技術標籤:Python_Libraries

Py之cvxopt:cvxopt庫的簡介、安裝、使用方法之詳細攻略

目錄

cvxopt庫的簡介

cvxopt庫的安裝

cvxopt庫的使用方法

1、建立矩陣

2、求解線性規劃


cvxopt庫的簡介

CVXOPT是一個基於Python程式語言的凸優化的免費軟體包。它可以與互動式Python直譯器一起使用,也可以通過執行Python指令碼在命令列上使用,或者通過Python擴充套件模組整合到其他軟體中。它的主要目的是通過構建Python的廣泛標準庫和Python作為一種高階程式語言的優勢,使凸優化應用程式的軟體開發變得簡單。

官網http://cvxopt.org/

cvxopt庫的安裝

pip install cvxopt

cvxopt庫的使用方法

1、建立矩陣

CVXOPT有單獨的稠密和稀疏矩陣物件。這個例子演示了建立密集和稀疏矩陣的不同方法。使用matrix()函式建立一個密集矩陣;它可以通過列表(或迭代器)建立:

>>> from cvxopt import matrix
>>> A = matrix([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], (2,3))
>>> print(A)
[ 1.00e+00  3.00e+00  5.00e+00]
[ 2.00e+00  4.00e+00  6.00e+00]
>>> A.size
(2, 3)

>>> B = matrix([ [1.0, 2.0], [3.0, 4.0] ])
>>> print(B)
[ 1.00e+00  3.00e+00]
[ 2.00e+00  4.00e+00]


>>> print(matrix([ [A] ,[B] ]))
[ 1.00e+00  3.00e+00  5.00e+00  1.00e+00  3.00e+00]
[ 2.00e+00  4.00e+00  6.00e+00  2.00e+00  4.00e+00]


>>> from cvxopt import spmatrix
>>> D = spmatrix([1., 2.], [0, 1], [0, 1], (4,2))
>>> print(D)
[ 1.00e+00     0    ]
[    0      2.00e+00]
[    0         0    ]
[    0         0    ]
>>> print(matrix(D))
[ 1.00e+00  0.00e+00]
[ 0.00e+00  2.00e+00]
[ 0.00e+00  0.00e+00]
[ 0.00e+00  0.00e+00]

2、求解線性規劃

可以通過求解器.lp()函式指定線性程式

\begin{array}{ll} \mbox{minimize}   &  2x_1 + x_2 \\ \mbox{subject to} &   -x_1  + x_2 \leq 1 \\        & x_1  + x_2 \geq 2 \\        & x_2 \geq 0 \\        & x_1 -2x_2 \leq 4 \end{array}

>>> 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)
     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
>>> print(sol['x'])
[ 5.00e-01]
[ 1.50e+00]