У меня есть pyomo ConcreteModel()
, который я решаю повторно в рамках другого процесса стохастической оптимизации, в то время как один или несколько параметров изменяются в модели.
Основной процесс можно описать следующим образом:
# model is created as a pyomo.ConcreteModel()
for i in range(0, 10):
# change some parameter on the model
opt = SolverFactory('gurobi', solver_io='lp')
# how can I check here if the changed model/lp-file is valid?
results = opt.solve(model)
Теперь я получаю сообщение об ошибке в некоторых случаях, когда модель и LP-файл (см. Суть) , кажется, содержат значения NaN:
ERROR: Solver (gurobi) returned non-zero return code (1)
ERROR: Solver log: Academic license - for non-commercial use only Error
reading LP format file /tmp/tmp8agg07az.pyomo.lp at line 1453 Unrecognized
constraint RHS or sense Neighboring tokens: " <= nan c_u_x1371_: +1 x434
<= nan "
Unable to read file Traceback (most recent call last):
File "<stdin>", line 5, in <module> File
"/home/cord/.anaconda3/lib/python3.6/site-
packages/pyomo/solvers/plugins/solvers/GUROBI_RUN.py", line 61, in
gurobi_run
model = read(model_file)
File "gurobi.pxi", line 2652, in gurobipy.read
(../../src/python/gurobipy.c:127968) File "gurobi.pxi", line 72, in
gurobipy.gurobi.read (../../src/python/gurobipy.c:125753)
gurobipy.GurobiError: Unable to read model Freed default Gurobi
environment
Конечно, первая идея состояла бы в том, чтобы предотвратить установку этих значений NaN. Но я не знаю, почему они так или иначе происходят, и хочу выяснить, когда модель сломается из-за неправильной структуры, вызванной NaN.
Я знаю, что могу получить статус решателя и критерий завершения из объекта SolverFactory()
. Но ошибка, очевидно, возникает где-то перед процессом решения из-за недопустимых измененных значений.
Как я могу поймать ошибки такого рода для разных решателей, прежде чем решить i. е. проверить, действителен ли файл / lp-файл перед применением решателя? Есть ли какой-нибудь метод, например check_model()
, который выдает True
или False
, если модель (не) действительна или что-то подобное?
Заранее спасибо!