Как мне остановить метод, если модель не может найти решение в установленные сроки? - PullRequest
0 голосов
/ 07 апреля 2020

У меня сложная модель MIP в Python, решение с Gurobi, и длинная программа для запуска. Обычно я запускаю его и затем записываю вывод (значения переменных, параметры решения и т. Д. c.) В файл. В больших случаях модель не находит решения в течение определенного периода времени, а затем логически выдает ошибку, когда я пытаюсь получить значения для переменных, что останавливает весь код. В этом случае я бы хотел пропустить раздел вывода. Я пытался добиться этого, только записывая выходные данные, если model.Params.SolutionCount! = 0. Тем не менее, это все равно дает мне ту же ошибку при попытке получить переменные в операторе if. Есть ли другой способ сказать Python пропустить код, если нет решения без полного прерывания программы? Спасибо!

1 Ответ

0 голосов
/ 07 апреля 2020

Вы всегда должны проверять состояние решения, прежде чем пытаться запрашивать значения решения. Это может быть так:

...
model.optimize()

if model.status == GRB.INF_OR_UNBD:
    # Turn presolve off to determine whether the model is infeasible
    # or unbounded
    model.setParam(GRB.Param.Presolve, 0)
    model.optimize()

if model.status == GRB.OPTIMAL:
    print('Optimal objective: %g' % model.objVal)
    model.write('model.sol')
    sys.exit(0)

elif model.status != GRB.INFEASIBLE:
    print('Optimization was stopped with status %d' % model.status)
    sys.exit(0)

Это взято из документации Gurobi .

...