對於python cvxopt 庫,這個庫用於求解線性和二次規劃。本節介紹如何求解線性規劃問題。
形如以下的問題:
我們將其寫成標準形式:
注意,約束條件需要化爲:
對應寫出P,q,G,h,A,b矩陣。
P=2 * matrix([[2., 0.5],[0.5,1.]])
q=matrix([1.,1.])
G=matrix([[-1.,0.],[0.,-1.]])
h=matrix([0.,0.])
A=matrix([1.,1.],(1,2))
b=matrix(1.)
要注意,這裏的matrix是cvx庫的matrix寫法,要求是按列從左到右書寫。另外,要嚴格按照標準形式的方式寫出對應矩陣。
接下來調用標準的求解器solver.lp計算:
solvers.options['show_progress'] = True
sol = solvers.qp(P,q,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 1e-16 6e-02
2: 1.8750e+00 1.8739e+00 1e-03 1e-16 5e-04
3: 1.8750e+00 1.8750e+00 1e-05 0e+00 5e-06
4: 1.8750e+00 1.8750e+00 1e-07 2e-16 5e-08
Optimal solution found.
[ 2.50e-01]
[ 7.50e-01]
1.8750000000000182