我正在使用Julia在Atom上运行优化问题。
我使用的解算器是Gurobi:
1. Interrupt upon interrupting/stopping Julia
2. Interrupt if the objective function returns a sufficiently good result
3. Interrupt after a set time
我的模型可能需要数小时到数天的计算才能达到最佳值,所以我想知道在resolve()运行时是否可以执行以下操作:
db.car.aggregate([
{ $project : { city_state : { $split: ["$City/State/Zip", " "] } } },
{ $unwind : "$city_state" },
{ $match : { city_state : /[A-Z]{2}/ } },
{ $group : {_id:{ "state" : "$city_state" }, count:{$sum:1}}}
])
然后显示并保存到达的当前状态,以便稍后我可以恢复计算。
答案 0 :(得分:2)
这是非常广泛的,并且错过了很多细节,为什么提到无关紧要的事情(Atom as Editor)。
另外:认为这是有根据的猜测。
这应该可以通过定义一个回调来轻松实现,该回调符合您的条件并根据这些条件行事(例如,等待几秒钟或用户输入)。
有一件事需要决定:Gurobi的Callback Codes类型其中,它将决定何时调用您的回调。
要了解您的条件,您需要使用内容的值(请参阅上述文档)。
可行的候选人:
POLLING 0 Periodic polling callback
MIPSOL 4 Found a new MIP incumbent
现在投票通常不允许您查询的值。这使得它对你的任务毫无用处,我们不会考虑它。唯一的好处是它可能经常被调用,而且调用之间没有潜在的巨大差异。
MIPSOL 将允许您访问有趣的变量,例如 MIP_OBJBST (当前最佳目标)和co。
这里的核心假设是:Gurobi没有回调时限,并且会终止你的回调(类似于保护措施)。我不认为有类似的东西(至少在文档中没有警告)!
一般情况下,您can't会保存整个Gurobi州(链接适用于Gurobi 7)。从基于软件工程的角度来看,这并不太令人惊讶(并非不可能,但可能很棘手)。
您可以在解决问题时或在回调中处于某种等待状态时关闭计算机(休眠!)。现在我再说一遍:我们正在谈论Hibernation of Operating-systems。暂停到ram(PC将使用更少的能量)或挂起到磁盘(完全关闭)。
立即强>
如上所述,在内部状态上使用回调和查询,您可以使用自己的序列化来外包当前最佳解决方案,甚至更多。
这些事情,最重要的是你可以在以后用于完全新开始的优化过程的MIP start vector。
您需要决定如何序列化此数据。数据库,HDF5,文本文件和co。!
阅读和重用应遵循Gurobi的文档。
立即强>
答案 1 :(得分:0)
将SolutionLimit或TimeLimit设置为GurobiSolver参数