Заявление об ограничении ответственности:
Это очень широко и упускает много деталей, почему упоминаются вещи, которые не имеют значения (Атом в качестве редактора).
Также: считайте это обоснованным предположением.
Сможет сделать
- показать что-нибудь и подождать в терминале
- продолжить после ввода пользователем
Это должно быть легко достижимо путем определения обратного вызова, который проходит через ваши условия и действует в соответствии с ними (например, ожидая несколько секунд или ввода пользователя).
Остается выбрать одно: коды обратного вызова Гуроби типов < strong> where, который решит, когда будет вызван ваш обратный вызов.
Для прохождения ваших условий вы захотите использовать значения для what (см. Выше).
Жизнеспособные кандидаты:
POLLING 0 Periodic polling callback
MIPSOL 4 Found a new MIP incumbent
Теперь опрос не позволит вам запрашивать какие значения. Это делает его бесполезным для вашей задачи, и мы не будем его рассматривать. Единственное преимущество состоит в том, что он, вероятно, очень часто вызывается без потенциально огромной разницы во времени между вызовами.
MIPSOL позволит вам получить доступ к интересным переменным, таким как MIP_OBJBST (текущая лучшая цель) и т. д.
Основное предположение здесь: Gurobi не имеет ограничения по времени обратного вызова и убивает ваш обратный вызов (аналогично мерам безопасности). Я не думаю, что есть что-то подобное (по крайней мере, без предупреждения в документации)!
Не могу сделать
Как правило, вы не можете сохранить все состояние Гуроби ( ссылка относится к Гуроби 7). С точки зрения программной инженерии это не слишком удивительно (не невозможно, но потенциально сложно).
Сможет сделать
Вы можете выключить компьютер (спящий режим!) во время решения или в состоянии ожидания в обратном вызове. Теперь я повторю это еще раз: мы говорим о гибернации операционных систем. Либо приостановка к оперативной памяти (ПК будет потреблять меньше энергии), либо приостановка на диск (полностью отключена).
Сейчас:
- this will destroy internal-timings (which you can observe in the verbose output)
- not sure if relevant for you (maybe in interaction with your callback!)
- warning: i could imagine that there are some statistics / interactive-learning based heuristic decisions (approach A worked in this part of the tree good; do A again) based on timings (as operations are harder to count)
- it's not impossible that those statistics are completely taken off-balance by hibernation!
- это зависит в основном от вашей операционной системы
- this is probably not guaranteed to work or recommended by the Gurobi-devs, but might work (and does run; but it's harder to evaluate the impact on the solution-process)
- we already saw, that things might change during sleep (time) and assumptions on these things are the potential problem
Сможет сделать
Используя обратные вызовы и запросы к внутренним состояниям, как упомянуто выше, вы можете использовать свой собственный тип сериализации для аутсорсинга текущего лучшего решения и, возможно, большего.
Эти вещи, наиболее важным из которых является начальный вектор MIP, который вы можете позже использовать для полностью недавно начатого процесса оптимизации.
Вам нужно решить, как сериализовать эти данные. База данных, HDF5, текстовые файлы и т. Д.!
Чтение и повторное использование должны соответствовать документам Гуроби.
Сейчас:
- starting from a feasible MIP-solution (your best found yet) is not as good as reusing the whole internal state (we are losing a lot of solving-process dependent information)
- but it should help a lot in general (probably depends much on the problem itself)
- вы можете попытаться сохранить и повторно добавить привязку к цели как ограничение, но я не думаю, что это сильно поможет
person
sascha
schedule
03.12.2017