【问题标题】:Julia JuMP Cbc solver hangs infinitely without message and without exitingJulia JuMP Cbc 求解器无限挂起,没有消息,也没有退出
【发布时间】:2020-12-08 03:26:05
【问题描述】:

我正在使用 Julia 语言(版本 1.3.1)、JuMP 包(版本 0.20.1)和 Cbc 包(版本 0.6.6)来解决带有 ubuntu:16.04 的 docker 容器中的优化问题。优化器 Cbc 似乎已挂起,CPU 使用率为 100%,没有退出也没有任何消息。这些问题很少发生在类似的问题上,而且似乎不可复制:如果我用相同的数据运行相同的代码,它就不会再挂起。希望通过gdb得到的回溯能有用。

如果需要,我可以分享我的模型。它有11520个变量,4652个约束,10080个用于线性目标函数的变量。

这是Cbc优化器的日志:

欢迎使用 CBC MILP 求解器 版本:2.10.3 构建日期:2019 年 10 月 7 日

命令行 - Cbc_C_Interface -threads 0 -seconds 360.0 -maxNodes 30000 -logLevel 1 -solve -quit (default strategy 1) seconds 是 从 1e+100 更改为 360 maxNodes 从 2147483647 更改为 30000 连续目标值为 2.3607e+08 - 0.11 秒 Cgl0002I 3197 个变量已修复 Cgl0005I 7 SOS 有 8323 个成员 Cgl0004I 处理后的模型有 15 行 8323 列(8323 整数(8323 其中二进制))和 26556 个元素 Cbc0045I 仅固定非零 变量。 Cbc0045I 警告:mipstart 值不能用于 构建解决方案。

这里的 Cbc 似乎挂起并且变得没有响应,CPU 使用率为 100%。

这里是正在运行的 pid 进程的回溯:

#0 0x00007f163c3facc9 在?? () 来自目标:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbcSolver.so #1 0x00007f163c4125b3 在?? () 来自目标:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbcSolver.so #2 0x00007f163c467586 在?? () 来自目标:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbcSolver.so #3 0x00007f163c46aebc 在?? () 来自目标:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbcSolver.so #4 0x00007f163c40594a 在?? () 来自目标:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbcSolver.so #5 0x00007f163c29afbe 在?? () 来自目标:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbcSolver.so #6 0x00007f163c2ad844 在?? () 来自目标:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbcSolver.so #7 0x00007f163b8ea31f 在 CbcHeuristicDive::solution(double&, int&, int&, OsiRowCut**, CbcSubProblem&, double*) () 来自 目标:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbc.so.3 #8 0x00007f163b8ebf42 在 CbcHeuristicDive::solution(double&, double*) () 来自 目标:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbc.so.3 #9 0x00007f163b938fd2 in CbcModel::solveWithCuts(OsiCuts&, int, CbcNode*) () 来自 目标:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbc.so.3 #10 0x00007f163b9472d7 in CbcModel::branchAndBound(int) () from target:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbc.so.3 #11 0x00007f163c214c47 in CbcMain1(int, char const, CbcModel&, int ()(CbcModel, int), CbcSolverUsefulData&) () 来自 目标:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbcSolver.so #12 0x00007f163c2252ae 在 CbcMain1(int, char const**, CbcModel&) () 来自 目标:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbcSolver.so #13 0x00007f163c19bc50 in Cbc_solve () from target:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbcSolver.so #14 0x00007f16698e7e71 在?? () #15 0x000000000000000c 在 ?? () #16 0x00007fff70694480 在?? () #17 0x00007f16604ce110 在?? () #18 0x000000000000262e 在 ?? () #19 0x0000000000000006 在 ?? () #20 0x00007fff70694480 在?? () #21 0x00007f165966ab40 在?? () #22 0x00007f164a7ce1d0 在?? () #23 0x00007f164a7ce220 在?? () #24 0x00007f164a7ce1d0 在?? () #25 0x00007f1688be7b00 在?? () 在 /buildworker/worker/package_linux64/build/src/array.c:738 来自 目标:/opt/julia/bin/../lib/libjulia.so.1 #26 0x00007f163d909af0 在?? () #27 0x00007f164439d3c0 在?? () #28 0x00007f1689524200 在?? () #29 0x0000000000000000 在 ?? ()

gdb 控制台中使用next 命令,会在 CbC 上捕获 StackOverflowError() 错误。

目标函数的项是否太多?

任何帮助都是非常可观的。

谢谢

【问题讨论】:

    标签: julia julia-jump coin-or-cbc coin-or


    【解决方案1】:

    这似乎是 Cbc 的问题。如果没有可重复的示例,就不可能提供更多建议。我建议您尝试简化模型并创建 MPS 文件。

    【讨论】:

    • 感谢您的回答。这里是找到 MPS 文件drive.google.com/drive/u/1/folders/… 的链接(希望它有用)。
    • 将 Cbc v 0.6.6 更新到 Cbc v 0.7.0 是否更好?它是最后一个版本,但它是稳定的?有没有办法让函数“优化!()”超时以处理这样的问题并强制退出优化器?我必须在哪个维度上简化我的模型:目标函数中的变量、约束或项数?提前非常感谢您
    • 创建 MPS 文件时会出现警告:'警告:MathOptFormat.MPS.InnerModel{Float64} 不支持 MathOptInterface.VariablePrimalStart()。此信息将被丢弃。',所以我认为在 MPS 文件中有关 set_start_value 的信息丢失了。我可以分享。
    • 经过进一步调查,Cbc求解器是否有可能挂在Heuristic上?在回溯中,我发现了“CbcHeuristicDive”,并且经常在 Cbc 求解器中找到 Cbc0045I 警告之后的行:mipstart 值无法用于构建解决方案。是 DiveCoefficient 在 522 次迭代和 0 个节点(0.25 秒)后找到的 11300000 的一个 Cbc0012I 整数解
    • 驱动器链接不可公开访问。是的,您应该更新到 0.7。要设置时间限制,请使用set_optimizer_attribute(model, "seconds", 100)
    【解决方案2】:

    您可以使用 seconds 参数设置时间限制,如下所示。

    对于较新的软件包版本:

    model = Model(optimizer_with_attributes(Cbc.Optimizer
                                            ,"seconds" => 60
                                            ,"threads" => 4
                                            ,"loglevel" => 0
                                            ,"ratioGap" => 0.0001))
    

    或者对于较旧的软件包版本这样:

    model = Model(with_optimizer(Cbc.Optimizer
                                 ,seconds=60
                                 ,threads=4
                                 ,loglevel=0
                                 ,ratioGap=0.0001))
    

    【讨论】:

      猜你喜欢
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-29
      • 2016-02-17
      相关资源
      最近更新 更多