问题描述
我正在使用Julia语言(版本1.3.1),JuMP软件包(版本0.20.1)和Cbc软件包(版本0.6.6)来解决ubuntu:16.04的docker容器中的优化问题。优化器Cbc似乎已挂起,CPU使用率为100%,没有退出且没有任何消息。该问题很少在类似问题上发生,并且似乎不可复制:如果我使用相同的数据运行相同的代码,它将不再挂起。希望通过gdb获得的backtrace有用。
如果需要,我可以共享我的模型。它具有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(默认策略1)秒为 从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 in ?? ()来自目标:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbcSolver.so #1 0x00007f163c4125b3 in ?? ()来自目标:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbcSolver.so #2 0x00007f163c467586 in ?? ()来自目标:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbcSolver.so #3 0x00007f163c46aebc in ?? ()来自目标:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbcSolver.so #4 0x00007f163c40594a in ?? ()来自目标:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbcSolver.so #5 0x00007f163c29afbe in ?? ()来自目标:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbcSolver.so #6 0x00007f163c2ad844 in ?? ()来自目标:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbcSolver.so #7 0x00007f163b8ea31f in CbcHeuristicDive :: solution(double&,int&,int&,OsiRowCut **,CbcSubProblem &,double *)()从 目标:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbc.so.3 来自CbcHeuristicDive :: solution(double&,double *)()的#8 0x00007f163b8ebf42 目标:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbc.so.3 #9 0x00007f163b938fd2在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/libClibc.so.3 #11 0x00007f163c214c47在CbcMain1(int,char const ,CbcModel&,int()(CbcModel ,int),CbcSolverUsefulData&)()中 目标:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbcSolver.so 来自CbcMain1(int,char const **,CbcModel&)()中的#12 0x00007f163c2252ae 目标:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbcSolver.so #13 0x00007f163c19bc50在Cbc_solve()中来自目标:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbcSolver.so #14 0x00007f16698e7e71 in ?? () #15 0x000000000000000c in ?? () #16 0x00007fff70694480 in ?? () #17 0x00007f16604ce110 in ?? () #18 0x000000000000262e in ?? () #19 0x0000000000000006 in ?? () #20 0x00007fff70694480 in ?? () #21 0x00007f165966ab40 in ?? () #22 0x00007f164a7ce1d0 in ?? () #23 0x00007f164a7ce220 in ?? () #24 0x00007f164a7ce1d0 in ?? () #25 0x00007f1688be7b00 in ?? ()在/buildworker/worker/package_linux64/build/src/array.c:738中 目标:/ opt / julia / bin /../ lib / libjulia.so.1 #26 0x00007f163d909af0 in ?? () #27 0x00007f164439d3c0 in ?? () #28 0x00007f1689524200 in ?? () #29 0x0000000000000000 in ?? ()
在next
控制台中使用gdb
命令,会在CbC上捕获到StackOverflowError()错误。
目标函数的术语过多吗?
任何帮助都是真的。
谢谢
解决方法
这似乎是Cbc的问题。没有可复制的示例,就不可能提供更多建议。我建议您尝试简化模型并创建MPS文件。
,您可以使用秒参数设置时间限制,如下所示。
对于较新的软件包版本:
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))