Long-step dual simplex will be used(亲测有效)

问题描述

cvxpy调用cvxopt集成的glpk时,一直提示Long-step dual simplex will be used

问题原因

直接使用pip 安装的cvxopt默认集成4.65版本的glpk,如【1】所述,该版本glpk/src/draft/glpios03.c第 923-930 行输出上述提示。

解决办法

  1. 卸载cvxopt,安装最新版本的glpk(5.0版本)
  2. cxvopt基于源代码重新安装,手动修改、配置其内部集成的glpk版本

具体操作

注:本人使用conda创建了虚拟变量(pytorch),故所有操作在该虚拟环境变量下完成。

  1. 激活虚拟环境变量 source activate pytorch
  2. 卸载cvxopt    pip uninstall cvxopt
  3. 从【5】中下载并安装最新版本的glpk,具体操作如下,安装完成后在/usr/local/bin及/usr/local/lib可找到相关文件

    # 同时下载sig文件和程序文件,x和y表示版本信息
    # 1. 完成sig认证
    gpg --verify glpk-x.y.tar.gz.sig
    # 2. 解压缩程序文件
    gzip -d glpk-x.y.tar.gz
    tar -x < glpk-x.y.tar
    # 3. 配置包
    ./configure
    # 4. 编译
    make
    # 5. 安装(一定要用sudo安装)
    sudo make install 确保在pytorch环境中

  4. 确保在pytorch环境下,安装如下包:

    sudo apt-get install -y libsuitesparse-dev libblas-dev liblapack-dev
  5. 在pytorch环境下,修改cvxopt文件夹下的setup.py文件的第38、41、43行,具体修改如下:

    1. # Set to 1 if you are installing the glpk module.
      BUILD_GLPK = 1
      
      # Directory containing libglpk (used only when BUILD_GLPK = 1).
      GLPK_LIB_DIR = '/usr/local/lib' #glpk实际的安装位置
      
      # Directory containing glpk.h (used only when BUILD_GLPK = 1).
      GLPK_INC_DIR = '/usr/local/include'
  6. 在pytorch环境下,执行pip setup.py install

  7. 使用如下代码进行测试,如不再输出:Long-step dual simplex will be used, 表示安装成功;反之,不成功。

    1. import cvxpy as cp
      # Create two scalar optimization variables.
      x = cp.Variable()
      y = cp.Variable()
      # Create two constraints.
      constraints = [x + y == 1,
                     x - y >= 1]
      
      # Form objective.
      obj = cp.Minimize(x - y)
      
      # Form and solve problem.
      prob = cp.Problem(obj, constraints)
      prob.solve(solver='GLPK_MI',cvxopt_params={'msg_lev':'GLP_MSG_OFF'})

注意事项

  1. glpk的卸载方式是在glpk文件根目录下执行sudo make uninstall,重新安装时需将整个glpk文件夹删除,重新解压缩

参考文献

[1]python - Stop GLPK from printing log messages when using cvxpy - Stack Overflow

Installation instructions — CVXOPT

[3]GLPK - GNU Project - Free Software Foundation (FSF3)

[4]GitHub - cvxopt/cvxopt: CVXOPT -- Python Software for Convex Optimization

[5]Index of /gnu/glpk

上一篇:Windows*享文件夹复制等操作


下一篇:Linux 常用命令