Мне нужно получить доступ и сохранить лучшее неоптимальное решение, найденное Гуроби, в указанный срок.
Привет всем,
Я использовал 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 для последующей их обработки?
Большое спасибо, привет из Колумбии!