对于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