cvxopt 示例简单讲解

作者: 不会停的蜗牛 | 来源:发表于2020-03-20 23:55 被阅读0次

    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

    相关文章

      网友评论

        本文标题:cvxopt 示例简单讲解

        本文链接:https://www.haomeiwen.com/subject/xbreyhtx.html