选择优化器
描述 C++ API 中可用的优化器。
使用 CPLEX 来求解所抽取的模型涉及到求解一个或一系列连续松弛:
-
如果所抽取的模型本身是连续的,即,如果它未包含整数变量、布尔型变量、半连续或半整数变量、逻辑约束、特殊有序集 (SOS) 或分段线性函数,那么只需要求解一个连续松弛。 求解 LP:单纯形法优化器和求解 LP:barrier 优化器探讨可用于求解 LP 的算法。 同样,求解具有二次目标 (QP) 的问题探讨可用于求解 QP 的算法。 使用二次约束 (QCP) 对问题求解在二次约束规划问题 (QCP) 的上下文中重新介绍 barrier 优化器。 在优化中使用分段线性函数:运输示例通过一个运输示例来介绍分段线性函数。 优化中的逻辑约束介绍逻辑约束,随后的章节提供示例。
-
在所有其他情况下,CPLEX 看到的所抽取问题实际上是 MIP,一般而言,这是需要求解的一系列连续松弛。 在此类情况下,方法
cplex.isMIP
将返回IloTrue
。 求解混合整数规划 (MIP) 问题探讨所应用的算法。
用于求解第一个连续松弛(无论这是唯一的问题还是一系列问题中的第一个问题)的优化器选项由根算法参数控制:
cplex.setParam(IloCplex::RootAlg, alg);
其中,alg
是嵌套枚举 IloCplex_Algorithm 的成员。
作为嵌套枚举,在程序中必须使用的标准名称是
IloCplex::Primal
和 IloCplex::Dual
,等等。 表 1
显示 IloCplex::Algorithm
所定义的优化器选项的含义。 提示:
优化器 | 目的 |
---|---|
AutoAlg
|
让 CPLEX 决定所要使用的算法 |
Primal | 使用主单纯形法算法 |
Dual | 使用对偶单纯形法算法 |
Network | 将主网络单纯形法算法用于嵌入式网络,接着将对偶单纯形法算法用于整个网络的 LP,并将主单纯形法算法用于 QP |
Barrier | 使用内点法算法。 在内点法算法之后执行的转换类型由参数 IloCplex::BarCrossAlg 设置。 |
Sifting | 使用筛选算法 |
Concurrent | 在多处理器系统上并发使用多种算法 |
值 | 算法类型 |
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 概述节点处可用的选项。
值 | 算法类型 | 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 |