选择优化器

描述 C++ API 中可用的优化器。

使用 CPLEX 来求解所抽取的模型涉及到求解一个或一系列连续松弛:

用于求解第一个连续松弛(无论这是唯一的问题还是一系列问题中的第一个问题)的优化器选项由根算法参数控制:


cplex.setParam(IloCplex::RootAlg, alg);

其中,alg 是嵌套枚举 IloCplex_Algorithm 的成员。

作为嵌套枚举,在程序中必须使用的标准名称是 IloCplex::PrimalIloCplex::Dual,等等。 表 1 显示 IloCplex::Algorithm 所定义的优化器选项的含义。
提示:
选项 Sifting 不适用于 QP 模型。 只有 Barrier 选项适用于 QCP 模型。 表 2 概述这些选项。
表 1. IloCplex::Algorithm 中的优化器选项
优化器 目的
AutoAlg 让 CPLEX 决定所要使用的算法
Primal 使用主单纯形法算法
Dual 使用对偶单纯形法算法
Network 将主网络单纯形法算法用于嵌入式网络,接着将对偶单纯形法算法用于整个网络的 LP,并将主单纯形法算法用于 QP
Barrier 使用内点法算法。 在内点法算法之后执行的转换类型由参数 IloCplex::BarCrossAlg 设置。
Sifting 使用筛选算法
Concurrent 在多处理器系统上并发使用多种算法
表 2. 在根处可用的算法(按问题类型排列)
算法类型

LP?

MILP?

QP?

MIQP?

QCP?

MIQCP?

0 IloCplex::AutoAlg
1 IloCplex::Primal not available
2 IloCplex::Dual not available
3 IloCplex::Network not available
4 IloCplex::Barrier
5 IloCplex::Sifting not available not available
6 IloCplex::Concurrent not available

如果所抽取的模型要求求解多个连续松弛,那么用于求解根处第一个松弛的算法由 RootAlg 参数控制。 除根以外所有其他节点处的算法由 NodeAlg 参数控制:


cplex.setParam(IloCplex::NodeAlg, alg)
表 3 概述节点处可用的选项。
表 3. NodeAlg 的算法类型
算法类型 MILP? MIQP? MIQCP?
0 IloCplex::Auto
1 IloCplex::Primal not available
2 IloCplex::Dual not available
3 IloCplex::Network not available not available
4 IloCplex::Barrier
5 IloCplex::Sifting not available not available