Как отобразить оптимальные значения переменных модели класса Pyomo? - PullRequest
0 голосов
/ 26 декабря 2018

Я новый пользователь Pyomo / Python, и мне просто интересно, как отобразить оптимальные значения переменных в модели Pyomo классового типа.

Я только что попробовал стандартный пример из библиотеки примеров Pyomo, «модель с минимальными затратами».Код доступен в https://github.com/Pyomo/PyomoGallery/wiki/Min-cost-flow

В нижней части кода написано:

sp = MinCostFlow('nodes.csv', 'arcs.csv') 
sp.solve()
print('\n\n---------------------------')
print('Cost: ', sp.m.OBJ())

, а вывод

Academic license - for non-commercial use only
Read LP format model from file.    
Reading time = 0.00 seconds
x8: 7 rows, 8 columns, 16 nonzeros
No parameters matching 'mip_tolerances_integrality' found
No parameters matching 'mip_tolerances_mipgap' found
Optimize a model with 7 rows, 8 columns and 16 nonzeros
Coefficient statistics:
  Matrix range     [1e+00, 1e+00]
  Objective range  [1e+00, 5e+00]
  Bounds range     [0e+00, 0e+00]
  RHS range        [1e+00, 1e+00]
Presolve removed 7 rows and 8 columns
Presolve time: 0.00s
Presolve: All rows and columns removed
Iteration    Objective       Primal Inf.    Dual Inf.      Time
       0    5.0000000e+00   0.000000e+00   0.000000e+00      0s

Solved in 0 iterations and 0.01 seconds
Optimal objective  5.000000000e+00

Я могу получить толькооптимальная цель, но как насчет оптимальных значений переменных?Я также искал документацию, в которой говорилось, что я должен использовать что-то вроде:

print("x[2]=",pyo.value(model.x[2])).  

Но это не сработало для моделей типа класса, таких как модель с минимальными затратами.

Iтакже попытался изменить определение функции в классе:

def solve(self):
        """Solve the model."""
        solver = pyomo.opt.SolverFactory('gurobi')
        results = solver.solve(self.m, tee=True, keepfiles=False, options_string="mip_tolerances_integrality=1e-9, mip_tolerances_mipgap=0")
        print('\n\n---------------------------')
        print('First Variable: ', self.m.Y[0])

Но это не сработало.Вывод:

KeyError: "Index '0' is not valid for indexed component 'Y'"

Можете ли вы помочь мне с этим?Спасибо!

Габриэль

1 Ответ

0 голосов
/ 27 декабря 2018

Самый простой способ отобразить результаты модели после решения - использовать функцию model.display().В вашем случае self.m.display().

Функция display() работает и на Var объектах, поэтому, если у вас есть переменная self.m.x, вы можете сделать self.m.x.display().

...