Решатель Julia JuMP Cbc бесконечно зависает без сообщения и без выхода
Я использую язык Julia (версия 1.3.1), пакет JuMP (версия 0.20.1) и пакет Cbc (версия 0.6.6) для решения проблемы оптимизации в контейнере докера с ubuntu:16.04. Оптимизатор Cbc кажется зависшим, со 100% использованием процессора, без выхода и без каких-либо сообщений. Проблемы возникают редко с аналогичной проблемой и, кажется, не воспроизводятся: если я запускаю один и тот же код с теми же данными, он больше не зависает. Надеюсь, что обратная трассировка через gdb может быть полезной.
При необходимости могу поделиться своей моделью. Он имеет 11520 переменных, 4652 ограничения, 10080 переменных, используемых в линейной целевой функции.
Это журнал оптимизатора Cbc:
Добро пожаловать в CBC MILP Solver Версия: 2.10.3 Дата сборки: 7 октября 2019 г.
командная строка - 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 зависает и перестает отвечать, при 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*) () из target:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbc.so.3 #9 0x00007f163b938fd2 в CbcModel:: resolveWithCuts(OsiCuts&, int, CbcNode*) () из target:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbc.so.3 #10 0x00007f163b9472d7 в CbcModel::branchAndBound(int) () из цели:/root/.julia/packages/Cbc/vWzyC/deps/usr/lib/libCbc.so.3 #11 0x00007f163c214c47 в 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 в Cbc_solve () из цели:/root/.julia/packages/Cbc/vWzyC/deps/usr/usr/usr/ /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 в?? ()
Using next
command in gdb
console, than a StackruError() error is catched on CbC.
Has the objective function too many terms?
Any help is really appreciable.
Thank you
2 ответа
Похоже, это проблема с 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))