【源码编译】几种常见数学规划求解器源码编译安装

前提

由于项目需求,笔者最近需要在一个无网络环境且只能通过拷贝源码自行编译的方式安装若干线性规划求解器。

linux

  1. cmake>=3.15
  2. gcc>=9.4(支持c++11)

windows

  1. cmake>=3.15
  2. vs 2015或更高版本(支持c++11)

常见求解器编译安装

1. lpsolve

1.1 下载lpsolve求解器源码包

下载地址:https://sourceforge.net/projects/lpsolve/files/lpsolve/5.5.2.11/lp_solve_5.5.2.11_source.tar.gz/download
如有其版本需求,请自行下载

1.2 源码编译lpsolve

1.2.1 linux

  • 解压源码包
$ tar -xzvf ./lp_solve_5.5.2.11_source.tar.gz
  • 编译可执行程序lp_solve

    切换至相应目录,不切换会导致编译脚本查找文件的相对路径错误而报错

    $ cd ./lp_solve/
    

    编译脚本添加可执行权限并执行

    $ chmod +x ./ccc
    $ ./ccc 
    

    bin文件夹下生成可执行文件

    $ cd ./bin/ux64/
    $ ./lp_solve  -h
    Usage of ./lp_solve version 5.5.2.11:
    ./lp_solve [options] [[<]input_file]
    
  • 编译lpsolve55.so库文件

    切换至相应目录,不切换会导致编译脚本查找文件的相对路径错误而报错

    $ cd ./lpsolve55/
    

    编译脚本添加可执行权限并执行

    $ chmod +x ./ccc
    $ ./ccc 
    

    bin文件夹下生成lpsolve55.solpsolve55.a

    $ cd ./bin/ux64/
    $ ls
    liblpsolve55.a  liblpsolve55.so
    

1.2.2 windows

  • 解压源码包lp_solve_5.5.2.11_source.tar.gz

  • 打开VS2015开发人员提示,如果默认系统环境变量中已有MSVC编译工具cl则忽略这个步骤
    image-20241226135629722

  • 编译可执行文件lp_solve

    # cd/d切换到lp_solve可执行文件脚本目录
    > cd/d C:\Users\XXXXX\XXXXX\lp_solve_5.5\lp_solve
    # 运行编译脚本
    > cvc8.bat 
    

    之后在可执行文件脚本目录的bin\win32目录下就有lp_solve.exe可执行文件了

  • 编译可执行文件lp_solve

    # cd/d切换到lp_solve可执行文件脚本目录
    > cd/d C:\Users\XXXXX\XXXXX\lp_solve_5.5\lp_solve
    # 运行编译脚本
    > cvc8.bat 
    

    之后在可执行文件脚本目录的bin\win32目录下就有lp_solve.exe可执行文件了

    > lp_solve.exe -h
    Usage of lp_solve.exe version 5.5.2.11:
    lp_solve.exe [options] [[<]input_file]
    ......
    
  • 编译动态库

    # cd/d切换到lp_solve 库脚本目录
    > cd/d C:\Users\XXXXX\XXXXX\lp_solve_5.5\lpsolve55
    # 运行编译脚本
    > cvc8msvcrt.bat 
    

    之后在可执行文件脚本目录的bin\win32目录下就有libspsolve55.lib库文件了

2. glpk

2.1 glpk源码下载

下载地址:https://ftp.gnu.org/gnu/glpk/glpk-5.0.tar.gz
如有其版本需求,请自行下载

2.2 源码编译glpk

2.2.1linux

  • 解压源码包

    $ tar -xzvf ./glpk-5.0.tar.gz
    
  • 编译安装

    $ cd ./glpk-5.0/
    $ ./configure
    $ make
    $ cd ./examples/.libs/ # 生成的求解器在examples/.libs下
    $ glpsol -v
    GLPSOL--GLPK LP/MIP Solver 5.0
    $ make install # 【可选】将生成的求解器安装至系统环境/usr/local/bin下
    

2.2.2 windows

  • 解压源码包

  • 打开VS2015开发人员提示,如果默认系统环境变量中已有MSVC编译工具cl则忽略这个步骤

  • 记事本打开glpk-5.0\w64\Build_GLPK_with_VC14.bat文件,将MSVC的目录修改为当前系统的对应位置.

    如果不知道自己电脑的MSVC在哪里,就在刚才打开的VS2015开发人员提示,输入where cl

    > where cl
    E:\VS\VC\bin\cl.exe # 可以看到在当前系统中vc的目录是E:\VS\VC
    

    修改示例如下
    image

​ 双击运行Build_GLPK_with_VC14.bat,等待完成后,在当前目录中产生glpsol.exe

  • [可选] 编译库文件

    与编译可执行文件类似,对于Build_GLPK_with_VC14_DLL.bat文件,修改对应的VC目录后,双击执行后,即可生成glpk.lib

3. scip

3.1 源码下载

官网在对于scip下载提供了两种方式,一种是scip本身,另外一种是包含scip和其他求解器在内的优化套件,强烈建议编译环境在弱联网甚至无网络情况下下载前者,减少不必要的麻烦

https://scipopt.org/download/release/scip-9.2.0.tgz

如果有其他版本需求,请自行下载

3.2 源码编译scip

3.2.1 linux

  • 解压源码包

    $ tar -xzvf ./scip-9.2.0.tgz
    
  • 使用cmake构建

    $ cmake -Bbuild -H. -DPAPILO=off -DLPS=none -DIPOPT=off -DAUTOBUILD=off -DZIMPL=off -DREADLINE=off -DZLIB=off -DGMP=off
    $ cmake --build build --config Release
    

Tips:把很多看似所谓的预装库如readline都禁用的原因是,某些离谱的国产发行版,把这些东西都给阉割了,甚至g++都没有

​ 编译过程略微漫长,请耐心等待~

  • 构建编译完成后,在build文件夹下的bin目录生成可执行文件scip

    $ cd ./build/bin/
    $ scip -v
    SCIP version 9.1.0 [precision: 8 byte] [memory: block] [mode: optimized]
    ......
    

3.2.2 windows

  • 解压压缩包scip-9.2.0.tgz

  • 打开VS2015开发人员提示,如果默认系统环境变量中已有MSVC编译工具cl则忽略这个步骤

    # 切换至scip解压后的文件夹内
    > cd/d C:\Users\XXX\XXX\scip-9.2.0
    # cmake 构建
    > cmake -Bbuild -H. -DPAPILO=off -DLPS=none -DIPOPT=off -DAUTOBUILD=off -DZIMPL=off -DREADLINE=off -DZLIB=off -DGMP=off
    > cmake --build build --config Release
    

    编译过程略微漫长,请耐心等待~

  • scip-9.2.0\build\bin\Release\ 生成可执行文件scip.exe

    >scip -v
    SCIP version 9.2.0 [precision: 8 byte] [memory: block]
    ......
    
posted @ 2024-12-26 15:01  TICSMC  阅读(322)  评论(0)    收藏  举报