Skip to content

Python中常用的优化库

1传统的运筹优化

1.1框架工具:

  • CVXPY:使用Python进行凸优化,可用于线性和非线性规划,半正定规划、混合整数规划等问题。(类似于casadi,本身是一个框架,可以调用其他求解器)。CVXPY 是一个纯粹的 python 优化工具接口,它本身并没有实现任何求解器,都是根据问题类型调用相应的外部求解器 10,然后解析结果。对于线性规划问题,可以调用外部的 CBC, GLPK, CPLEX, GUROBI, MOSEK 等。需要注意的是,当需要调用 CBC 时,必须先安装其官方 python 接口 CyLP;当需要调用 CPLEX 时也需要先安装其官方 python 接口。 甚至cvxpy可以嗲用cvxopt的求解器。

  • CVXOPT :CVXOPT 实际上是一个凸优化工具包,并自带有线性规划求解器,但效率不是很高。但它可以调用外部求解器 8,包括 GLPKMOSEK 和 DSDP

  • Pyomo:Python建模语言,可用于线性规划,非线性规划,混合整数规划等问题。

  • casadi
  • PuLP:线性规划库,使用Python语言编写,简单易用。PulP 也可以调用 CBC, GLPK, CPLEX, GUROBI 等外部线性规划求解器。具体使用方法可以参考它的官方文档 12

1.2求解器

(1)开源

  • osqp:二次规划库
  • nlopt:非线性规划库
  • scipy.optimize:SciPy中的优化模块,包括线性规划和非线性规划等算法。
  • Optuna:用于超参数优化的库,可用于自动化机器学习和深度学习模型调参。
  • SCIP:非商用优化软件,可用于解决线性规划、混合整数规划等问题。
  • PySCIPOpt:Python界面的SCIP优化器,可用于混合整数规划、二次规划等问题。
  • OR-Tools:Google出品的优化库,可用于线性规划、整数优化、约束优化、车辆路径规划等问题。
  • DEAP:进化算法库,可用于优化问题,如遗传算法、粒子群算法等。
  • Platypus:Python框架,用于多目标优化问题,可用于遗传算法、NSGA-II等。

(2)商用

  • Gurobi:商用优化软件,提供Python API。
  • CPLEX:商用优化软件,提供Python API,可用于线性规划、混合整数规划等问题。。
  • MOSEK:商用优化软件,可用于线性规划、二次规划、混合整数规划等问题。

1.3 性能对比

  • GLPK 对于变量规模很大的线性规划问题求解速度非常慢。
  • CPLEX 求解大规模线性规划问题非常快,但是使用官方提供的方法建模时间非常长。实际测试,在变量规模为 65536 时,建模花费 20s 左右,求解花费不到 1s。当使用 CVXPY 调用 CPLEX 时,同样规模一共花费 5s 左右,推测主要时间也是花费在建模上面。
  • 比较 CVXPY 调用默认求解器,CPLEX, GUROBI,发现速度差距不大,相对来说 GUROBI 可能会稍微好一点。

2进化算法(建议用scikit-opt)

  • DEAP
  • mealpy
  • scikit-opt (国产良心)
  • Geatpy2(国产用心)
  • pygmo2
  • pyswarms
  • SciPy