我是 Google OR-Tools 的新手。
我使用 Python 实现了一个以 SCIP 作为求解器的 MIP 模型。目标函数用于最小化 (求解器.最小化(C))并且我正在通过访问最终解决方案求解器.Objective().Value().
但是,我还需要访问中间解决方案求解器在到达最后一个之前发现的,以及他们的时间戳。 (最终目标是绘制一个图表,其中显示解决方案随时间的演变)。
我尝试使用 while 循环:
solutions_evolution = {} # dict to store miliseconds (as keys) and solutions (as values)
localtime = (solver.wall_time()) #in miliseconds
limit_break = localtime + 60*5*1000 #sets a time limit of 5 minutes
while (localtime <= limit_break) & (status != pywraplp.Solver.OPTIMAL & status != pywraplp.Solver.FEASIBLE):
new_localtime = (solver.wall_time())
solutions_evolution[new_localtime] = solver.Objective().Value()
localtime = new_localtime
但从那时起它就不起作用了求解器.Objective().Value()仅给出最终解决方案。
我已经挣扎了好几天了。谁能帮帮我吗?谢谢。
在非 C++ 语言中,您无法访问求解器对象,并且在 python 中无法访问现有回调。
您可以通过 SCIP 使用解决方案池。
赶紧跑Solve()
,然后循环NextSolution()
.
如果您的问题是纯积分问题,则可以使用 CP-SAT 求解器(直接使用,而不是通过线性求解器包装器)。它支持Python中的解决方案回调。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)