跳到内容

硬币或/Cbc

文件夹和文件

姓名姓名
上次提交消息
上次提交日期

最新提交

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

存储库文件导航

中国银行

COIN-OR项目

像这样的项目由一小部分志愿者维护非营利组织的赞助COIN-OR基金会我们需要你的帮助!请考虑赞助我们的活动志愿服务来帮忙!

最新版本

此文件是从自动生成的配置.yml使用生成自述文件脚本。要进行更改,请编辑配置.yml或生成脚本在这里在这里.

中国银行(C类欧-欧b条牧场和c(c)ut)是一个用C++编写的开源混合整数线性规划求解器。它可以用作可调用库或使用独立的可执行文件。它可以通过各种建模系统、包等以多种方式使用。

大多数平台的二进制文件可从下载在这里.AMPL还提供单机中国银行可执行文件那可能是与AMPL一起使用(或不使用)。Julia提供了广泛的二进制文件.备选方案包括康达您最喜欢的包管理器,详细信息在下面.

Cbc是由约翰·福雷斯特和其他人开发的,他现在已经从IBM研究所退休。该项目目前由John Forrest管理,特德拉尔夫斯,斯特凡维格尔斯克,哈罗德·甘比尼桑托斯以及Cbc团队的其他成员。

Cbc是用C++编写的,并在Eclipse公共许可证2.0.

它由COIN-OR基金会.

Cbc开发站点是https://github.com/coin-or/Cbc.

引用

代码:内政部

当前构建状态

Windows内部版本

Linux和MacOS构建

下载

以下是获取或构建的快速入门指南通用平台上的Cbc。更详细的信息是可获得的在这里.

Docker图像

有一个Docker镜像提供了Cbc以及其他项目在中COIN-OR优化一套 在这里

二进制文件

对于较新的版本,二进制文件将作为附加到的资产提供Github中的版本在这里.较旧的二进制文件作为Cbc的一部分存档在这里.

  • Linux操作系统(请参见https://repology.org/project/coin-or-cbc/versions完整列表):

    • 拱门:
      $sudo pacman-S coin或-cbc
    • Debian/Ubuntu:
      $sudo apt-get安装coinor-cbc-coinor-libcbc-dev
    • Fedora/Redhat/CentOS:
      $sudo-yum-install-coin-or-Cbc-coin-or-Cbc-devel
    • 免费bsd:
      $sudo-pkg安装数学/cbc
    • linuxbrew公司:
      $brew安装cbc
  • 窗户:在Windows上获取Cbc的最简单方法是按上述方式下载存档。

  • Mac OS X:在Mac OS X上获取Cbc的最简单方法是通过自制啤酒.

    $brew tap coin-or-tools/coinor$brew安装coin-or-tools/coinor/cbc
  • 康达(跨平台,暂时没有Windows):

    $conda安装硬币或cbc

由于许可证不兼容,预编译的二进制文件缺少一些功能。如果您的平台没有最新版本的二进制文件版本,并且您想请求构建和发布它们,请放心让我们在邮件列表上知道。

来源

源代码可以通过以下方式获得

  • 从下载Cbc最新发布版本的源代码快照发布第页,
  • 从克隆此存储库github,或
  • 使用造币厂脚本来获取项目和所有依赖项(推荐,请参阅下文)。

依赖关系

Cbc有许多依赖项,详见配置.yml。对其他COIN-OR项目的依赖性是使用获取源时自动下载造币厂。对一些人来说剩余的第三方依赖项、自动下载脚本和提供了构建包装器(也将根据需要自动运行和推荐的依赖项),而其他库则很容易获得必须使用适当的软件包管理器安装(或可能随您的默认为OS)。

从源头构建

这些快速启动说明假设您处于bash shell中。

使用造币厂

要从源代码下载并构建Cbc,请执行在命令行上执行以下操作。

wget公司https://raw.githubusercontent.com/coin-or/coinbrew/master/coinbewchmod u+x造币厂./coinbrew获取Cbc@主机./coinbrew构建Cbc

有关coinbrew的更多详细说明,请参阅https://coin-or.github.io/coinbrew.这个造币厂脚本将获取在的依赖项部分中指定的其他项目配置.yml.

没有造币厂(专家用户)

  • 下载源代码,例如通过克隆git repohttps://github.com/coin-or/Cbc
  • 下载并安装中列出的依赖项的源代码配置.yml
  • 按如下方式构建代码(确保设置PKG_CONFIG_PTH以安装依赖项的目录)。
./configure-C制作进行测试进行安装

使用Microsoft Visual Studio

对于Microsoft Visual C++用户,有版本10的项目文件可在MSVisual工作室目录。首先,获取源代码使用Windows git客户端或下载快照。在MSVC++版本中10,打开解决方案文件(应将其转换为您正在使用的MSVC+)并构建Cbc项目。代码应该由带有默认设置的框。

也可以使用Visual Studio编译器从命令行,使用类Unix环境的过程,使用Msys2外壳或CYGWIN。这是推荐和支持的最佳建筑方式Windows中的Cbc源。为此,请确保编译器位于您的路径并添加--启用msvc构建命令造币厂。

如果要构建并行版本使用Visual Studio创建CBC以下说明:(多亏托比亚斯·斯坦格尔和亚历克西斯·古格)。

假设:

  • 一个包含所有必要项目(libCbc、libClp、libCbcSolver、,libCgl、libCoinUtils、libOsi、libOsiCbc和libOsiClp)。项目文件可以被发现在MSVisual工作室文件夹。

步骤(基于VS 2013):

  1. 对于每个lib*项目,请执行以下操作:添加CBC_螺纹在属性->配置属性->C/C++->下预处理器->预处理器定义(lib*项目的一个子集可能足够了,但这样做对所有人都没有坏处)

  2. 链接到pthreads库。PThreadsWin32工作(即使在64位系统),并在LGPL下分发。如果您决定使用预编译的二进制文件:pthreadVC2和pthreadVS2似乎都可以工作。否则:可以在上找到pthreads4win的第三方VS项目文件github。

    注意:如果使用C++/Cli,请确保没有回调(eventHandlers、custom切割生成器、自定义启发…)包含托管代码。否则您的代码将在运行时崩溃,AssembyNotFoundExceptions位于由Cbc创建的本机线程。即使没有,GC的问题是很可能。

  3. 如果静态链接pthreads4win,则必须定义PTW32_STATIC_LIB在构建程序/Cbc时(例如,通过属性->C/C++/预处理器->预处理器定义)AND-仅当您构建pthreads自己&在构建pthread时。动态链接pthreads无需额外的预处理器定义即可工作。

  4. 通过-线程yourNumberCbc电源1

Doxygen文档

如果你有编程辅助工具可用,您可以通过键入以下内容来构建HTML文档

制作多西根docs

在build目录中。如果Cbc是通过构建的造币厂,然后是构建目录将是./build/Cbc/master默认情况下。doxygen文档主文件在中找到<build-dir>/doxydoc/html/index.html.

如果你没有多西根安装在本地,您还可以使用文档在这里.

文档

项目链接

CHANGELOG公司

  • 3.0版(准备中)

    • 增加了MIP启动文件不完整的可能性。文件名后缀指示Cbc应选择的值缺少变量(请参见更改r2549)
    • 对构建系统进行了较大的更新,并更改了目录结构。因此,Cbc的整体构建,它使用在一次configure和make运行中,它的所有依赖项不再是可能。依赖项现在应该先生成并安装建筑Cbc。
      • 删除了svn:externals。依赖项(CoinUtils、Osi、Clp、Cgl等)现在需要提前手动或通过使用coinbrew。
      • 使用GCC兼容编译器时,Cbc接口函数现在用声明可见性(默认)-属性,从而使用-fvisibility=隐藏仍然会生成可用库。
      • 使用与MSVC兼容的编译器时,Cbc接口函数现在声明为dlimport公司-属性,以便Cbc C++DLL可以使用。
      • 在Windows/Msys2下,DLL现在默认是构建的。
      • 不再支持Cygwin和MSys1。
      • pkg-config现在是必需的。在Windows上,确保使用生成Unix样式路径的pkg-config版本。
      • *_加法器文件已被删除,应改用pkg-config。
      • 脚本编译现在用于包装cl/icl/ifort的调用并将GCC样式的编译器标志转换为MSVC样式。
      • 头文件现在安装在名称更好的$prefix/include/coin-or而不是$前缀/包含/硬币.
      • 的默认值--前缀不再是构建目录,但autotools可能是默认的/usr/本地.
      • --启用调试并不意味着--禁用共享不再。
      • 远离的--enable-debug-cbc,使用--启用调试而不是。
      • 删除了配置变量OPT/DBG_C/CXXFLAGS。请改用C/CXFLAGS。
      • 默认情况下,静默生成输出现在已启用,请使用configure旗帜--禁用silent规则或拨打makeV=1禁用。
      • 对于静态构建,PIC对象现在默认生成,使用--没有pic禁用。
      • 这个--带-*-incdir--带-*-lib配置标志已经替换为相应的--带-*-cflags--带-*-lflags旗帜。注意,需要指定include目录通过-我<目录>在里面--带-*-cflags.
    • --启用cbc并行现在,如果pthread库找到。使用--禁用cbc并行禁用。
    • 添加了冲突图基础结构和基于冲突的例程:
      • Cgl客户关系强化:应用于设置包装约束的预处理例程。
      • CglBK集团:基于改进版Bron-Kerbosch算法的团割分离器。
      • CglOddWheel(奇数轮):带提升程序的奇数循环分离器。
      • 命令行中的新参数:
        • cgraph(cgraph):设置基于冲突图形的例程(CglBKClique、CglOddWheel和CliqueStrenging)的使用-“off”=关闭这些例程,“on”=打开这些例程,”clq“=关闭这些例行程序并启用CglClique的剪切分隔符-default=“on”
        • 化学发光二极管:设置基于团强化(CglCliqueStrenging)的预处理例程的使用-“off”=关闭此例程,“before”=在初始解算之前执行团强化,“after”=在初次解算之后执行团强化-默认值=“after“。
        • 集团:设置CglBKClique的使用(on、root、ifmove、forceOn、onglobal)-default=“ifmove”。
        • 比沃特:CglBKClique中Bron-Kerbosch算法使用的枢轴策略-0=关闭,1=随机,2=度,3=权重,4=修改度,5=修改权重,6=修改度+修改权重-默认值=3。
        • bkmaxcalls公司:CglBKClique中Bron-Kerbosch算法可以进行的最大递归调用数-默认值=1000。
        • bkclqext(bkclq文本):用于扩展CglBKClique发现的违规派系的策略-0=关闭,1=随机,2=度,3=修改度,4=降低成本(成反比),5=减少成本(成反比)+修改度-默认值=4。
        • 奇数轮:设置CglOddWheel的使用(on、root、ifmove、forceOn、onglobal)-default=ifmove。
        • 奥德韦克斯:用于搜索CglOddWheel找到的切割的车轮中心的策略-0=关闭,1=一个变量,2=集团-默认值=2。
      • CglClique被CglBKClique替换为CbcSolver.cpp中的默认团分隔符。
  • 版本2.10.10

    • 修复了将私有符号意外引入公共头的问题。
  • 版本2.10.9

    • 对称处理的改进。
    • 推出的维护版本会累积补丁。
  • 版本2.10.8

    • 由于Github Actions配置错误而重新生成二进制文件合并新版本的Cgl。
  • 版本2.10.7

    • 修复一个错误,如果MIPLIB3项目不存在
  • 版本2.10.6

    • 与构建、测试和CI相关的累积修复。
  • 版本2.10.5

    • 恢复在达到时限时停止Clp的修复,因为这会导致所有清理工作都会在没有适当修整的情况下停止给出错误的结果
  • 版本2.10.4

    • 允许从stdin读取.lp文件。
    • 修复AMPL接口可选参数的解析。
    • 更多错误修复。
  • 版本2.10.3

    • 改进一些原始启发式的性能,包括可行性泵,通过使整数松弛连续
    • 增加了额外的时限检查
    • 修复了Cbc_clone结果的初始化
    • 其他错误修复
  • 版本2.10.2

    • 错误修复程序
  • 版本2.10.1

    • 修复了C接口中的Cbc_clone
    • 修复了examples/driver3.cpp中的CbcMain1()调用
    • 修复了预解决添加变量时MIPstart可能出现的问题
    • 更多小错误修复
  • 版本2.10.0

    • 改进了SOS、起点和对称性的处理
    • 关于处理隐式整数变量
    • 使用多线程求解时,Mini-B&B现在被禁用
    • 将零半切割参数的默认值从off更改为ifmove
    • 将CbcModel::postProcessedSolver()添加到预解后获得的LP
    • 新选项前缀名称指示列名是否应保存在预处理模型中
    • 新选项sosPrioritize(排序)确定如何确定SOS的优先级
    • 添加了新事件生成的切割
    • CbcSolver现在可以读取压缩的.lp文件(GZIP、BZIP2)
    • C接口中的新函数:Cbc_readLp、Cbc_writeLp、,Cbc_addCol、Cbc_aaddRow、Cbc_getNumIntegers、Cbc_ bestSolution、,Cbc_getObjValue、Cbc_get行Nz、Cbc_获取行索引、Cbc获取行系数、,Cbc_getRowRHS、Cbc_getRowSense、Cbc _getColNz、Cbc_获取ColIndices、,Cbc_getColCoeffs、Cbc_getReducedCost、Cbc_numberSavedSolutions、,Cbc_savedSolution、Cbc_savedSolutionObj、Cbc_setMIPStart、,Cbc_setMIPStartI、Cbc_addCutCallback、Osi_getNumCols、Osi_ getColName、,Osi_getColLower、Osi_getColUpper、Osi_isInteger、Osi_getNumRows、,Osi_getRowNz、Osi_getRowIndices、Osi-getRowCoeffs、Osi_ getRowRHS、,Osi_getRowSense、Osi_getColSolution、OsiCuts_addRowCut、,Cbc_getAllowableGap、Cbc_setAllowableGap、Cbc_getAllowableFractionGap、,Cbc_setAllowableFractionGap、Cbc_getAllowablePercentageGap、,Cbc_setAllowablePercentageGap、Cbc_getCutoff、Cbc_set Cutoff,Cbc_getMaximumNodes、Cbc_setMaximumNodes、Cbc_getMaximumSolutions、,Cbc_setMaximumSolutions、Cbc_getLogLevel、Cbc_set LogLevel,Cbc_getMaximumSeconds、Cbc_setMaximumSeconds
    • 新操作猜测检查模型的属性以确定最佳用于求解LP松弛的参数。
    • 演示解决方案回调的新示例inc.cpp
    • 演示用户定义的分支规则的新示例driver5.cpp
    • 演示ClpEventHandler使用的新示例clpdriver.cpp
    • 增加了对使用OsiHiGHS和CbcGeneric的支持
    • 添加了MSVC 14项目文件
    • 错误修复程序
  • 版本2.9.10

    • 解决数字问题
    • 修复一些内存泄漏
    • 修复根节点明显不可行时的问题
    • 小型B&B的性能改进
    • 固定最终消息中绑定的名称
    • 修复预处理问题中的名称
  • 版本2.9.9

    • SOS2的修复
    • mipstart的更新
    • 切换到新构建系统
    • CI更新
  • 版本2.9.8

    • 更新到依赖项的最新版本
    • 小错误修复
    • 添加对Travis和Appveyor自动构建和测试的支持
  • 版本2.9.7

    • 小错误修复
    • 切换到线路缓冲输出的选项
  • 版本2.9.6

    • 小错误修复
  • 版本2.9.5

    • 小错误修复
  • 版本2.9.4

    • 稳定性的小修复
    • 修复了Doygen文档生成
  • 版本2.9.3

    • 小错误修复
  • 版本2.9.2

    • 固定以正确安装DESTDIR公司
  • 2.9.1版

    • 修复依赖关系链接
    • 小错误修复
  • 2.9.0版

    • 介绍了处理“大Ms”的专用分支方法。
    • 引入了处理对称性的新方法(需要安装鹦鹉螺)
    • 引入冲突切割(默认情况下关闭,使用启用-约束冲突)
  • 版本2.8.13

    • 改进了消息处理
    • 其他错误修复。
  • 版本2.8.12

    • 更新依赖项。
  • 版本2.8.11

    • C接口大修
    • 修复到SOS
    • 其他错误修复
  • 版本2.8.10

    • 更多与线程安全相关的更改。
    • 使用Visual Studio编译器修复生成系统中的错误。
    • 其他错误修复。
  • 版本2.8.9

    • 尝试使Cbc线程安全。
    • 添加并行示例。
    • 添加CbcSolverUsefulInfo。
    • 错误修复。
  • 版本2.8.8

    • 添加了一个示例,演示如何将Cbc与MSVC中已安装的库一起使用++
    • 修复了中添加libCbcSolver到依赖项的不一致性{{{cbc_addlibs.txt}}}。
  • 版本2.8.7

    • 更改为Doxygen构建LaTex
    • 构建系统的修复
  • 版本2.8.6

    • 添加了显式链接依赖项以符合打包的选项对Fedora和Debian的要求,以及允许建造MinGWDLL。
  • 版本2.8.5

    • 构建系统的小修复
  • 版本2.8.4

    • 小错误修复
    • 升级以构建系统
  • 2.8.3版:

    • 修复处理SOS。
  • 2.8.2版:

    • 修复了主配置中Glpk源的识别。
    • 修复了CoinUtils、Clp和Cbc中的小错误。
  • 2.8.1版:

    • 小错误修复
  • 2.8.0版:

    • 引入了新的secondary状态8,表示由于迭代极限。

    • 现在可以通过命令行和CbcMain访问解决方案池*接口。

    • 新的mipstart选项,用于从文件中读取初始可行解决方案。只需提供离散变量的值。

    • Fischetti和Monaci添加了Proximity Search启发式(关闭默认设置):使用单机版打开它的最简单方法是-接近.

      邻近搜索是新的“无邻居搜索”0-1 MIP改进Fischetti和Monaci(2012)最近提出了启发式方法。这个想法是定义子MIP时不需要附加约束,但需要修改目标函数旨在吸引在现任者。该方法适用于0-1个MIP的解决方案环境不太不规则(意味着有合理的概率通过翻转少量二进制文件找到改进的解决方案变量),尤其是应用于第一个启发式时在根节点找到解决方案。

    • 阿尔贝托·卡普拉拉(Alberto Caprara)实现的零半切割现在可用。默认情况下,这些剪切是关闭的。要使用add到命令行-zerohalf剪切根(或其他选项)或仅为-zero。到目前为止,他们可能只对一小部分问题提供帮助,可能需要一些调整。

      G.Andreello,A.中描述了这些削减的实施。Caprara和M.Fischetti“在分支和切割框架中嵌入切割:{0,1/2}-Cuts“INFORMS计算杂志”的计算研究19(2), 229-238, 2007http://dx.doi.org/10.1287/ijoc.1050.0162

    • 减少和分割生成器的替代实现贾科莫·南尼奇尼现在可以上场了。默认情况下,这些切割处于关闭状态使用add到命令行-reduce2AndSplitCuts root(或其他选项)。

      这些削减的实施在G.Cornuejols和G。Nannicini“产生等级1分割切割的实用策略混合整数线性规划“数学规划计算3(4), 281-318, 2011http://dx.doi.org/10.1007/s12532-011-0028-6

    • Giacomo对Gomory切割生成器的另一种稳健实现Nannicini现已上市。默认情况下,这些剪切处于关闭状态。要使用add To命令行-GMI root(或其他选项)。

      这些削减的实施在G.Cornuejols,F。Margot和G.Nannicini“关于Gomory切割发电机的安全”http://官能.sutd.edu.sg/~nannicini/index.php?page=出版物

    • 鼓励使用一些更奇特/更昂贵的切割发电机添加了参数slowcutpasss。想法是代码可以这些削减只有几倍&比更常见的削减要少。默认值为10。目前识别为“可能很慢”的切割发电机只是提升和投影以及减少和拆分(两种版本)。

    • 允许用户初始化随机种子。伪随机数为用于Cbc和Clp。在CIP中,它们被用来在退化中打破联系问题,而在Cbc启发式中,如可行性泵使用它们决定是向上取整还是向下取整。所以如果一个不同的伪随机种子给Clp,然后你可以得到一个不同的连续最优值所以不同的切割和启发式解决方案。这可以通过以下方式打开为Clp设置randomSeed和/或为Cbc设置randomCbcSeed。特别的值0告诉代码使用一天中的时间作为初始种子。

    • 基于这个想法,安德烈亚·洛迪、马蒂奥·菲舍蒂、米歇尔·莫纳奇,Domenico Salvagnin、Yuji Shinano和Andrea Tramontani认为通过在具有多个副本的根节点上运行解算器,每个解算器都有自己的不同种子,然后传入解和切割,以便主解算器具有更丰富的解集以及可能更大幅度的削减。这通过设置打开-多个RootPasses。这些也可以并行完成。

    • 对于特殊变量和严重规模问题的预解几乎没有变化(在CoinUtils中)。

    • 新选项-extraVariables,用于切换琐碎的引入额外整数变量分组的重组成本相同的变量。

    • 对于某些问题,如果如果成本太高,这个问题就不可行了。如果新的选项-constraintFromCutoff设置后,目标函数添加为将rhs设置为当前截止值(目标值)的约束最好的解决方案)。

  • 2.7.8版:

    • 从“Exiting on”(退出最大节点”到“退出最大迭代次数”
    • 修复了使用重叠SOS的问题。
    • 固定在内置系统中。
  • 2.7.7版:

    • 修复了在收到SIGINT时报告用户事件中断的问题CbcSolver公司。如果发生此事件,model->status()现在应该为5。补充方法CbcModel::sayEventHappened()使cbc因“用户”而停止事件”。

    • 其他次要修复。

  • 2.7.6版:

    • 修复以构建系统。

    • 其他次要修复。

  • 2.7.5版:

    • 修复以使AMPL接口再次工作。

    • 对MSVC++文件的更多修复。

  • 2.7.4版:

    • 小错误修复。
  • 2.7.3版:

    • 小错误修复。

    • 修复MSVC++文件。

  • 2.7.2版:

    • 允许GMPL模型使用行/列名称。

    • 添加了CbcModel::haveMultiThreadSupport()以指示Cbc库已使用多线程支持进行编译。

    • 添加了CbcModel::waitingForMiniBranchAndBound()以指示是否亚MIP启发式算法当前正在运行。

    • 如果使用配置,则Cbc shell应与readline一起使用--enable-gnu包.

    • 现在默认启用了对压缩输入文件(.gz、.bz2)的支持。

    • 修复相对间隙容差>100%的问题以及其他错误。

    • 修复了MSVC++版本9文件。

    • 内置系统中的小修复;更新至BuildTools 0.7.1。

  • 2.7.1版:

    • 修复MSVC++文件
  • 2.7.0版:

    • 许可证已更改为EPL。

    • 添加了对MSVC++版本10的支持。

    • 支持BuildTools 0.7版,以纳入最新的增强功能,在Linux中包括正确的库版本控制,禁止安装私有标头等。

    • 将外部更新为依赖项目的新稳定版本。

    • 启发式的改进。

    • 切割生成的新选项。

    • 改进结果报告。