引言

优化问题(Optimization Problem),也称最优化问题,其目标是选择一组变量取值,在满足给定约束条件(Constraints)或无约束条件的情形下,使目标函数(Objective Function)的取值达到最优。

优化问题常常写成以下形式:

\[\begin{split} & \min f(\boldsymbol{x}) \\ s.t.\ & C_{leq}(\boldsymbol{x}) \leq \boldsymbol{0} \\ & C_{eq}(\boldsymbol{x}) = \boldsymbol{0} \\\end{split}\]
  • 变量 \(\boldsymbol{x}\) (粗体)表示一个向量 \((x_1, x_2, \ldots, x_n, \ldots)\)

  • 目标函数 \(f(\boldsymbol{x})\) 写为求最小值的形式。如果原函数是求最大值,添加负号。

  • 约束条件:整理为不等式约束 \(C_{leq}\) 与等式约束 \(C_{eq}\) 两类。

    • 不等约束均写为小于等于的形式。原使用大于等于号的,两边同乘 -1 来变换不等号为小于等于号。不等约束中的不等号应该包含等号(例如使用小于等于号而不是小于号),因为带等号的不等式才是符合实际的。

    • 等号约束写照常书写。

因此,我们也常常将其称为最小化问题(Minimization Problem)。

优化问题分类

优化问题一般分为以下几种类型:

  • 线性规划(LP, Linear Programming):线性约束条件、线性目标函数的优化问题。

  • 其余的问题称为非线性规划(NLP, Non-Linear Programming):

    • 二次规划(QP, Quadratic Programming):线性约束条件、二次目标函数的优化问题。

    • 二次锥规划(SCOP, Second-Order Cone Programming):二次锥约束条件的优化问题。

    • 指数锥规划(EXP, Exponential Programming):指数锥约束条件的优化问题。

    • 半正定规划(SDP, Semi-Definite Programming):半正定矩阵的约束。

  • 整数规划(IP, Integer Programming):变量必须取整数值的优化问题。

    • 混合整数规划(MIP, Mixed-Integer Programming):部分变量被规定为整数的优化问题。

    • 类似地,我们有混合整数线性规划(MILP)与混合整数非线性规划(MINLP)。

常用求解器

商业求解器:

  • CPLEX:IBM 提供的求解器,主要负责线性、混合整数与二次规划。

  • COPT:杉树科技提供的求解器,在近年来性能达到了一流水准。

  • Gurobi:最广泛使用的商业求解器之一,性能上表现一流。同样是线性、混合整数与二次规划。

  • Xpress:FICO 提供的求解器。

开源/免费求解器:

  • Coin-OR: 由 OR 界提供的一系列求解器集合,全称为 Computational Infrastructure for Operations Research. 例如:

    • Cbc:COIN-OR 提供的混合整数规划求解器,使用分支定界法

    • Clp:COIN-OR 提供的线性规划求解器(包含在 Cbc 中)

    • Ipopt:COIN-OR 提供的非线性规划求解器

    完整的 Coin-OR 求解器集合请参考其官方网站。

  • MOSEK:广泛支持各种问题的规划求解器。

  • OR-Tools:Google 提供的 OR 求解器。

  • SCIP:混合整数规划求解器。

Python 提供的调用库包括:

  • cvxpy: 一个常用的凸优化求解库。它也支持调用的外部求解器,可以参考 cvxpy 支持的外部求解器

  • Pyomo:一个功能更强的优化问题库,必须配合外部求解器使用。但它的使用方法较为不直观,语法的抽象程度比较高。

求解器性能基准测试*

警告

性能基准测试不能完全代表求解器的性能表现。求解器的表现可能是取决于具体问题的。

可以参考 Hans Mittelmann 的性能测试结果(Benchmarks for Optimization Software)。

注意

请注意,这个测试中的许多项中,并没有测试 IBM CPLEX 与 FICO Xpress求解器。这是因为 Gurobi 在 2018 年利用该页面不当宣传其性能优势——尤其是相比 CPLEX 与 Xpress——它们两者自那之后就要求不再参与该性能测试。