Python-cvxopt库的使用(1)(解决LP问题)

对于python cvxopt 库,这个库用于求解线性和二次规划。本节介绍如何求解线性规划问题。
形如以下的问题:
在这里插入图片描述
我们将其写成标准形式:
min cx
s.t. Ax < b

对应写出A,b,c矩阵。

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 ])

要注意,这里的matrix是cvx库的matrix写法,要求是按列从左到右书写。

接下来调用标准的求解器solver.lp计算:

solvers.options['show_progress'] = True
sol=solvers.lp(c,A,b)
print(sol)
print(sol['x'])

结果如下:

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.
{'x': <2x1 matrix, tc='d'>, 'y': <0x1 matrix, tc='d'>, 's': <4x1 matrix, tc='d'>, 'z': <4x1 matrix, tc='d'>, 'status': 'optimal', 'gap': 1.3974945737537904e-07, 'relative gap': 5.589978335863919e-08, 'primal objective': 2.499999989554308, 'dual objective': 2.4999999817312544, 'primal infeasibility': 1.1368786496881938e-08, 'dual infeasibility': 2.2578790069187308e-08, 'primal slack': 2.0388399547194678e-08, 'dual slack': 3.529915972560751e-09, 'residual as primal infeasibility certificate': None, 'residual as dual infeasibility certificate': None, 'iterations': 5}
[ 5.00e-01]
[ 1.50e+00]
发布了92 篇原创文章 · 获赞 52 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/gophae/article/details/104920857
今日推荐