CBC 混合整数规划求解器

CBC(COIN-OR Branch and Cut)是一个开源混合整数规划求解器,与 COIN-OR LP 求解器 CLP 和 COIN-OR 割生成器库 Cgl 配合使用。该代码主要由 John J. Forrest 编写。本节中的大部分 CBC 文档来自 CBC 独立版本的帮助信息。

GAMS 中的 CBC 链接支持连续变量、二元变量、整数变量、半连续变量、半整数变量、类型 1 和类型 2 的特殊有序集以及分支优先级。

使用

可以在 GAMS 程序内部使用以下语句来指定使用 CBC:

Option LP = CBC;     { 或 MIP 或 RMIP }

上述语句应出现在 Solve 语句之前。如果在 GAMS 安装期间已将 CBC 指定为默认求解器,则无需上述语句。

有关求解器选项文件的用法和语法,请参见第 求解器选项文件 节。以下是选项文件 cbc.opt 的示例:

cuts root
      perturbation off

这将使 CBC 仅在根节点使用割生成器,并关闭 LP 松弛的扰动。

GAMS/CBC 目前不支持 GAMS 分支切割启发式(BCH)功能。如果需要将 GAMS/CBC 与 BCH 结合使用,请考虑使用版本 ≤ 23.3 的 GAMS 系统。

GAMS/CBC 当前支持的 GAMS 参数包括:reslimiterlimnodlimoptcaoptcrcheatcutoffthreads

选项列表

有许多参数会影响 CBC 分支定界算法的性能。首先尝试使用默认设置,仔细查看日志文件。割平面有帮助吗?它们是否耗时太长?查看输出以了解哪些割平面有效,然后进行调优(参见选项 cuts)。如果 preprocessing 减小了问题规模或增强了多个系数,那么将其保持开启可能是明智的。关闭未提供解的 heuristics。另一个需要关注的主要领域是搜索。希望好的解能在搜索的早期阶段获得,因此关键点在于选择最佳的分支变量。查看强分支是否表现良好——还是它只是消耗了大量的迭代次数?调整选项 strongBranchingtrustpseudocosts

下面,我们总结所有可用的 CBC 选项。

常规选项

选项说明默认值
clocktype时间测量的时钟类型wall
reslim最大秒数GAMS reslim
special传递给 CBC 的未见选项
writemps创建问题的 MPS 文件

LP 选项

选项说明默认值
autoScale是否在目标、右端项和边界看起来异常时进行缩放(实验性)0
biasLU分解是否偏向 ULX
bscale是否在内点法中缩放(以及排序速度)off
crash是否为问题创建基off
crossover是否在障碍法完成后使用单纯形法获取基本解on
denseThreshold使用稠密分解的阈值-1
dualPivot对偶转轴选择算法automatic
factorization使用哪种分解normal
gamma是否正则化障碍法off
idiotCrash是否尝试 idiot crash-1
iterlim停止前的最大迭代次数GAMS iterlim
KKT是否在障碍法中使用 KKT 分解0
maxFactor重新分解之间的最大迭代次数200
passPresolve预求解的轮数5
perturbation是否扰动问题1
presolve是否预求解问题on
primalPivot原始转轴选择算法automatic
primalWeight初始算法将不可行的代价视为1e+10
psiPositive Edge 准则的二维定价因子-0.5
randomSeedClpClp 的随机种子1234567
scaling是否缩放问题automatic
smallFactorization使用小规模分解的阈值-1

MIP 选项

选项说明默认值
allowableGap如果目标差距低于此值则停止0
allowableFractionGap如果分数差距低于此值则停止0
allowablePercentageGap如果百分比差距低于此值则停止0
cutDepth割平面应用的深度限制-1
cutLength割平面应用的长度限制-1
cutoff截止值1e+50
cuts割平面生成器设置on
cutup目标向上截止值1e+50
depthMiniBab使用小型分支定价的深度0
divingSOS尝试 SOS 潜水启发式off
doHeuristics是否使用启发式on
fathomDiscipline判断节点是否应被裁减的严格程度off
forceSolution强制解的值0
gcdCutsGCD 割平面off
gomoryCutsGomory 割平面on
heuristics启发式设置on
logLevel日志级别1
maxNodes最大节点数GAMS nodlim
maxSavedFeasibleSolutions保留的可行解最大数量1
maxSolutions找到的解达到此数量后停止0
multipleRootCuts根节点多重割平面off
nodeComparison节点比较sameProx
nodeLimit节点限制GAMS nodlim
nodeStrategy节点选择策略fewest
normalizeCuts是否归一化割平面on
numberBB分支定界节点数0
optimizationDirection优化方向1
outputFormat输出格式normal
preprocess是否预处理on
printFrequency打印频率1000
randomSeedCBC 随机种子1234567
refactorFrequency重新分解频率200
reslim资源限制(秒)GAMS reslim
slowCutAnalysis慢速割平面分析0
solutionLimit解的数量限制GAMS
special传递给 CBC 的额外选项
strongBranching强分支设置5
threads线程数1
timelimit时间限制(秒)GAMS reslim

割平面生成器的 MIP 选项

选项说明默认值
cliqueCuts团割平面on
combineCuts组合割平面on
costCuts成本割平面on
flowCoverCuts流覆盖割平面on
gmiCutsGMI 割平面on
gomoryCutsGomory 割平面on
gubCutsGUB 割平面on
knapsackCuts背包割平面on
lagomoryCuts滞后 Gomory 割平面on
latwocuts惰性双割平面on
liftProjectCuts提升投影割平面on
mirCutsMIR 割平面on
probingCuts探测割平面on
reduceAndSplitCuts化简与分割割平面off
residualCuts残差割平面on
twoMirCuts双 MIR 割平面root
zeroHalfCuts零半割平面ifmove

原始启发式的 MIP 选项

选项说明默认值
combineSolutions组合解on
crossOver2交叉 2on
dins距离诱导邻域搜索off
divingCoefficient系数潜水启发式off
divingFractional分数潜水启发式off
divingGuided引导潜水启发式off
divingLineSearch线搜索潜水启发式off
divingPseudoCost伪成本潜水启发式off
divingRandom随机潜水启发式off
divingSOSSOS 潜水启发式off
divingVectorLength向量长度潜水启发式off
feasibilityPump可行性泵off
greedyHeuristic贪婪启发式off
localBranching局部分支off
naiveHeuristics朴素启发式off
proximitySearch邻近搜索off
randomHeuristic随机启发式off
rens松弛富集邻域搜索off
rins松弛诱导邻域搜索off
roundingHeuristic舍入启发式on
VndVariableNeighborhoodSearch变邻域搜索off

选项详细说明

以下是所有 CBC 选项的详细说明,包括取值范围和默认值。

allowableGap:如果目标函数值与当前最佳整数解之间的绝对差距低于此值则停止。范围:[0, 1e20],默认值:0

allowableFractionGap:如果分数差距低于此值则停止。范围:[0, 1e20],默认值:0

allowablePercentageGap:如果百分比差距低于此值则停止。范围:[0, 1e20],默认值:0

autoScale:是否在目标、右端项和边界看起来异常时自动缩放问题(实验性)。范围:0, 1,默认值:0

biasLU:分解是否偏向于 U。范围:LX, UX, UU,默认值:LX

bscale:在内点法中是否缩放。范围:-5 到 5,默认值:off

cliqueCuts:是否启用团割平面生成器。范围:off, on, root, ifmove, forceOn, onglobal, forceandglobal, forceOnGlobal,默认值:on

clocktype:时间测量的时钟类型。范围:wall, cpu,默认值:wall

combineCuts:是否启用组合割平面生成器。范围:off, on, root, ifmove, forceOn, onglobal, forceandglobal, forceOnGlobal,默认值:on

combineSolutions:尝试组合两个现有解以找到更好的解。范围:off, on, both, before, intree,默认值:on

costCuts:是否启用成本割平面生成器。范围:off, on, root, ifmove, forceOn, onglobal, forceandglobal, forceOnGlobal,默认值:on

crash:是否为问题创建基。范围:-1 到 100,默认值:off

crossOver2:交叉 2 启发式。范围:off, on, both, before, intree,默认值:on

crossover:是否在障碍法完成后使用单纯形法获取基本解。范围:off, on, both,默认值:on

cutDepth:割平面在分支定界树中的深度限制。范围:-1 到 100,默认值:-1

cutLength:割平面可以包含的项数限制。范围:-1 到 100,默认值:-1

cutoff:截止值。范围:[-1e50, 1e50],默认值:1e+50

cuts:割平面生成器的整体设置。范围:off, on, root, ifmove,默认值:on

cutup:目标向上截止值。范围:[-1e50, 1e50],默认值:1e+50

denseThreshold:使用稠密分解的阈值。范围:-1 到 100000,默认值:-1

depthMiniBab:使用小型分支定价的深度。范围:0 到 100,默认值:0

dins:距离诱导邻域搜索。范围:off, on, both, before,默认值:off

divingCoefficient:系数潜水启发式。范围:off, on, both, before,默认值:off

divingFractional:分数潜水启发式。范围:off, on, both, before,默认值:off

divingGuided:引导潜水启发式。范围:off, on, both, before,默认值:off

divingLineSearch:线搜索潜水启发式。范围:off, on, both, before,默认值:off

divingPseudoCost:伪成本潜水启发式。范围:off, on, both, before,默认值:off

divingRandom:随机潜水启发式。范围:off, on, both, before,默认值:off

divingSOS:SOS 潜水启发式。范围:off, on, both, before,默认值:off

divingVectorLength:向量长度潜水启发式。范围:off, on, both, before,默认值:off

doHeuristics:是否在求解过程中使用启发式方法。范围:off, on,默认值:on

dualPivot:对偶转轴选择算法。范围:Dantzig, automatic, steepest, partial, PE, steepestPE,默认值:automatic

factorization:使用哪种分解。范围:normal, iterative, dense, small, barrier, simplex,默认值:normal

fathomDiscipline:判断节点是否应被裁减的严格程度。范围:-3 到 3,默认值:off (0)

feasibilityPump:可行性泵启发式。范围:off, on, both, before,默认值:off

flowCoverCuts:是否启用流覆盖割平面生成器。范围:off, on, root, ifmove, forceOn, onglobal, forceandglobal, forceOnGlobal,默认值:on

forceSolution:强制解中包含的变量值。范围:[-100, 100],默认值:0

gamma:是否正则化障碍法。范围:off, on,默认值:off

gcdCuts:是否启用最大公约数(GCD)割平面生成器。范围:off, on, root, ifmove, forceOn, onglobal, forceandglobal, forceOnGlobal,默认值:off

gmiCuts:是否启用 Gomory 混合整数(GMI)割平面生成器。范围:off, on, root, ifmove, forceOn, onglobal, forceandglobal, forceOnGlobal,默认值:on

gomoryCuts:是否启用 Gomory 割平面生成器。范围:off, on, root, ifmove, forceOn, onglobal, forceandglobal, forceOnGlobal,默认值:on

greedyHeuristic:贪婪启发式。范围:off, on, both, before,默认值:off

gubCuts:是否启用广义上界(GUB)割平面生成器。范围:off, on, root, ifmove, forceOn, onglobal, forceandglobal, forceOnGlobal,默认值:on

heuristics:启发式方法的整体设置。范围:off, on,默认值:on

idiotCrash:是否尝试 idiot crash。范围:-1 到 100,默认值:-1

iterlim:停止前的最大迭代次数。范围:[0, 2147483647],默认值:GAMS iterlim

KKT:是否在障碍法中使用 KKT 分解。范围:0, 1,默认值:0

knapsackCuts:是否启用背包割平面生成器。范围:off, on, root, ifmove, forceOn, onglobal, forceandglobal, forceOnGlobal,默认值:on

lagomoryCuts:是否启用滞后 Gomory 割平面生成器。范围:off, on, root, ifmove, forceOn, onglobal, forceandglobal, forceOnGlobal,默认值:on

latwocuts:是否启用惰性双割平面生成器。范围:off, on, root, ifmove, forceOn, onglobal,默认值:on

liftProjectCuts:是否启用提升投影割平面生成器。范围:off, on, root, ifmove, forceOn, onglobal,默认值:on

localBranching:局部分支启发式。范围:off, on, both, before,默认值:off

logLevel:日志级别。0 表示无输出,1 表示正常输出,2 表示详细输出,3 表示非常详细。范围:0 到 3,默认值:1

maxFactor:重新分解之间的最大迭代次数。范围:[1, 1000000],默认值:200

maxNodes:分支定界树中允许的最大节点数。范围:[0, 2147483647],默认值:GAMS nodlim

maxSavedFeasibleSolutions:保留的可行解的最大数量。范围:0 到 10000,默认值:1

maxSolutions:找到的解达到此数量后停止。范围:0 到 10000,默认值:0

mirCuts:是否启用混合整数舍入(MIR)割平面生成器。范围:off, on, root, ifmove, forceOn, onglobal, forceandglobal, forceOnGlobal,默认值:on

multipleRootCuts:是否在根节点使用多重割平面生成。范围:off, on,默认值:off

naiveHeuristics:朴素启发式。范围:-2 到 100,默认值:off

nodeComparison:节点比较策略。范围:sameProx, sameU, samePseudo,默认值:sameProx

nodeLimit:分支定界树中处理的最大节点数限制。范围:[0, 2147483647],默认值:GAMS nodlim

nodeStrategy:节点选择策略。范围:fewest, depth, up, down,默认值:fewest

normalizeCuts:是否归一化割平面。范围:off, on,默认值:on

numberBB:已处理的分支定界节点数。范围:[0, 2147483647],默认值:0

optimizationDirection:优化方向。范围:1(最小化),-1(最大化),默认值:1

outputFormat:输出格式。范围:normal, mps,默认值:normal

passPresolve:预求解的轮数。范围:-1 到 1000,默认值:5

perturbation:是否扰动问题。范围:0(关闭)到 100,默认值:1

preprocess:是否预处理。范围:off, on, equal, equal2, equal3,默认值:on

presolve:是否预求解问题。范围:off, on, more,默认值:on

primalPivot:原始转轴选择算法。范围:Dantzig, automatic, steepest, partial, PE, steepestPE,默认值:automatic

primalWeight:初始算法将不可行的代价视为。范围:[1, 1e20],默认值:1e+10

printFrequency:打印日志的频率(节点数间隔)。范围:0 到 2000000,默认值:1000

probingCuts:是否启用探测割平面生成器。范围:off, on, root, ifmove, forceOn, onglobal, forceandglobal, forceOnGlobal,默认值:on

proximitySearch:邻近搜索启发式。范围:off, on, both, before,默认值:off

psi:Positive Edge 准则的二维定价因子。范围:[-1, 1],默认值:-0.5

randomHeuristic:随机启发式。范围:off, on, both, before,默认值:off

randomSeed:CBC 随机种子。范围:[0, 2147483647],默认值:1234567

randomSeedClp:CLP 随机种子。范围:[0, 2147483647],默认值:1234567

reduceAndSplitCuts:是否启用化简与分割割平面生成器。范围:off, on, root, ifmove, forceOn, onglobal,默认值:off

refactorFrequency:重新分解频率。范围:0 到 2000000,默认值:200

rens:松弛富集邻域搜索启发式。范围:off, on, both, before,默认值:off

residualCuts:是否启用残差割平面生成器。范围:off, on, root, ifmove, forceOn, onglobal,默认值:on

reslim:资源限制(秒)。范围:[0, 1e20],默认值:GAMS reslim

rins:松弛诱导邻域搜索启发式。范围:off, on, both, before,默认值:off

roundingHeuristic:舍入启发式。范围:off, on, both, before,默认值:on

scaling:是否缩放问题。范围:off, automatic, equilibrium, geometric,默认值:automatic

slowCutAnalysis:慢速割平面分析。范围:0 到 100,默认值:0

smallFactorization:使用小规模分解的阈值。范围:-1 到 100000,默认值:-1

solutionLimit:解的数量限制。范围:[0, 2147483647],默认值:GAMS

special:传递给 CBC 的额外选项字符串。

strongBranching:强分支设置。范围:0 到 100,默认值:5

threads:线程数。范围:1 到 64,默认值:1

timelimit:时间限制(秒)。范围:[0, 1e20],默认值:GAMS reslim

tol_presolve:预求解容差。范围:[1e-20, ∞],默认值:1e-08

tol_primal:原始容差。范围:[1e-20, ∞],默认值:1e-07

trustPseudoCosts:伪成本信任度。范围:{-3, ..., ∞},默认值:10

twoMirCuts:是否启用双 MIR 割平面生成器。范围:off, on, root, ifmove, forceOn, onglobal, forceandglobal, forceOnGlobal,默认值:root

VndVariableNeighborhoodSearch:变邻域搜索启发式。范围:off, on, both, before, intree,默认值:off

vubheuristic:变量上界启发式。范围:{-2, ..., 20},默认值:-1

writemps:创建 MPS 文件。范围:字符串,默认值:空

zeroHalfCuts:是否启用零半割平面生成器。范围:off, on, root, ifmove, forceOn, onglobal,默认值:ifmove

 


 

在线留言

尊敬的客户朋友,如您有任何意见建议,请通过下表反馈给我们,我们会尽快与您联系。

 

 

 

 

联系我们

 

微信公众号

咨询微信

企业店铺

400-621-1085

(节假日期间办公室座机如无人接听,请选择其他联系方式,感谢理解!祝您节日快乐!)

 

联系我们 快速链接 相关产品 上海卡贝信息技术有限公司

©2025  上海卡贝信息技术有限公司

产品中心

下载中心

站点地图

隐私政策

 

销售QQ咨询

产品QQ咨询

淘宝店铺

 

GAMS:概述

最近更新

相关文档

下载试用

购买咨询

Berkeley Madonna

iThink

Stella Architect

IBM SPSS Modeler

DecisionTools Suite

NeuralTools

Frontier Analyst

Vensim

RISKOptimizer

PrecisionTree

LINGO

LINDO API

What'sBest!

@RISK

BARON

BayesiaLab

Oracle Crystal Ball

GEMPACK

GTAP Database

TreeAge