首页 > 解决方案 > Pyomo:从 G​​urobi 保存次电位解决方案(SolCount,X,Xn,SolutionNumber)

问题描述

我需要在指定的时间限制内访问并保存 Gurobi 找到的最佳次优解决方案。

大家好,

我一直在使用 Pyomo 和求解器 gurobi 来求解某个模型。达到最佳状态的时间非常长,因此我通过访问 TimeLimit 选项为求解器指定了时间限制:

optsolver = SolverFactory('gurobi',solver_io='python')
optsolver.options['TimeLimit'] = 30
results = optsolver.solve(instance1, tee=True)

在此之后,我建立了一个条件,因此如果解决方案以最优解结束,那么它作为参数传递给某个 pyomo_postprocess 函数,该函数以一种方便的方式为我的应用程序组织变量的值。

现在,我想要的是利用 gurobi SolCount, X, Xn, SolutionNumber 的属性来保存在时间限制之前达到的最佳可行解决方案。

这是我的第一次尝试:

if (results.solver.status == SolverStatus.ok) and (
        results.solver.termination_condition == TerminationCondition.optimal):

    registro = open('registro'+data_name+'.txt', 'w+')
    registro.write('optimal and feasible\n')
    registro.close()
    pyomo_postprocess(instance1, results,data_name)

elif (results.solver.status == SolverStatus.aborted):
    registro = open('registro' + data_name + '.txt', 'w+')
    registro.write('TimeLimit\n')
    registro.write(str(results.solver.status))
    registro.close()
    pyomo_postprocess(instance1, results, data_name)

但:

警告:加载具有“中止”状态但包含解决方案的 SolverResults 对象。ValueError:无法加载状态不佳的 SolverResults 对象:已中止

你能告诉我如何访问这些次优的 Gurobi 解决方案以便对它们进行后处理吗?非常感谢哥伦比亚的问候!

标签: pythongurobipyomo

解决方案


推荐阅读