Pyomo: сохранение неоптимальных решений от Gurobi (SolCount, X, Xn, SolutionNumber) - PullRequest
0 голосов
/ 06 мая 2019

Мне нужно получить доступ и сохранить лучшее неоптимальное решение, найденное Гуроби, в указанный срок.

Привет всем,

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...