Python PAO (бывший pyomo.двухуровневый) решатель находит неправильные решения

#python #optimization #pyomo

Вопрос:

Я использую модуль PAO в Python для работы с двухуровневыми моделями оптимизации. Пакет ПАО поставляется с интегрированными решателями (https://pao.readthedocs.io/en/latest/solvers.html). Я применил pao.pyomo.FA решение следующей проблемы:

 import pyomo.environ as pe
from pao.pyomo import *

M = pe.ConcreteModel()
M.x = pe.Var(bounds=(0, None), domain=pe.Reals)

M.L = SubModel(fixed=M.x)
M.L.y = pe.Var(bounds=(0, 10), domain=pe.Reals) #This is the relevant code line

M.L.ymax = 3
M.xmin = 2

def ul_obj_rule(M):
    """upper-level objective"""
    mo = M.model()
    return(mo.x   mo.L.y)

def ll_obj_rule(M):
    mo = M.model()
    return(mo.x   mo.L.y)

def ul_constraint_rule(M):
    mod = M.model()
    return(M.x >= mod.xmin)

def ll_constraint_rule(M):
    mod = M.model()
    return(mod.L.y <= mod.x   M.ymax)

M.obj = pe.Objective(rule=ul_obj_rule, sense=pe.minimize)
M.L.obj = pe.Objective(rule=ll_obj_rule, sense=pe.maximize)
M.c1 = pe.Constraint(rule=ul_constraint_rule)
M.L.c1 = pe.Constraint(rule=ll_constraint_rule)

solver = Solver('pao.pyomo.FA')
results = solver.solve(M, tee=True)
 

Поскольку x-переменная верхнего уровня, а y-переменная нижнего уровня, решение должно быть x=2 и y=5 в соответствии с целями и ограничениями (с целевым значением 7).

Тем не менее, решатель устанавливает y в 1e-4 с объективным значением, близким к 2, поэтому верхний уровень, по-видимому, определяет не только x, но и y. Если я установлю верхнюю границу y на «Нет» в «соответствующей строке кода», будет найдено ожидаемое целевое значение 7. Для верхней границы 1e5 значение y равно 1 (вместо 5).

Запуск того же кода с pao.pyomo.Решатель PCCG или пао.pyomo.РЕДЖ, такого поведения не происходит.

Поскольку моя модель содержит только линейные уравнения, реальные переменные верхнего и нижнего уровней и является двухуровневой задачей, я предполагаю, что все требования для применения пао.pyomo.Решатель FA выполнен. Кто-нибудь знает, почему обнаруживаются описанные (неожиданные) результаты?