Формулирование MIP с помощью FICO xpress с использованием Pyomo

#pyomo #mixed-integer-programming #xpress-optimizer

#pyomo #смешанное целочисленное программирование #xpress-оптимизатор

Вопрос:

Как мне решить модель MIP с помощью FICO Xpress через Pyomo?

Кроме того, я хочу задать параметры Xpress, такие как miptol и miprelstop . Как мне это сделать в Pyomo?

Ответ №1:

Чтобы пометить переменную как двоичную, вы должны определить ее within Binary как ограничение:

 model.z = pyo.Var(bounds=(0, 1)), within=pyo.Binary)
 

Настройка элементов управления выполняется с options помощью атрибута решателя. Вот краткий пример, который создает простую модель, задает параметры и решает.

 import pyomo.environ as pyo

model = pyo.ConcreteModel()
model.x = pyo.Var(bounds=(0, 1))
model.y = pyo.Var(bounds=(0, 1))
model.z = pyo.Var(bounds=(0, 1), within=pyo.Binary)
model.c = pyo.Constraint(expr = model.z >= 0.5)
model.obj = pyo.Objective(expr = model.x - 2 * model.y   3 * model.z,
                          sense = pyo.minimize)

opt = pyo.SolverFactory('xpress_direct')

opt.options['miprelstop'] = 1e-9
opt.options['miptol'] = 0.5

results = opt.solve(model)

print('x =', pyo.value(model.x))
print('y =', pyo.value(model.y))
print('z =', pyo.value(model.z))
 

Это выводит (среди прочего)

 x = 0.0
y = 1.0
z = 1.0
 

что показывает, что двоичное условие on z было соблюдено (в противном случае оптимальное значение for z было бы равно 0.5). Он также показывает измененные значения параметров в выходном журнале.