Cvxopt 是基于 Python 语言的用于解决凸优化问题的免费包,可以用于求解纳什均衡问题的最优策略,好用但是不容易理解,
官网给的例子很简单,没有什么说明,初次见不太容易看出来代码中各字母的含义,这里就简单介绍一下:
下面代码要求解的优化问题如下所示:
- 代码中 c 表示的是想要优化的问题中 x1 和 x2 的系数,即 2x1 + x2 = [2,1];
- b 是限制条件中右侧的数字,注意要先将所有限制条件都转化为 <= 号之后再提取数字,上图的例子中,b = [ 1.0, -2.0, 0.0, 4.0 ];
- A 是优化问题中 x1 和 x2 的系数,也是转化为 <= 号之后的:
然后就可以用 solvers.lp(c,A,b) 来求解。
A = [
[-1.0, -1.0, 0.0, 1.0], # for x1
[1.0, -1.0, -1.0, -2.0] # for x2
]
>>> 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]
学习资料:
https://cvxopt.org/index.html
https://stackoverflow.com/questions/32543475/how-python-cvxopt-solvers-qp-basically-works
网友评论