Как проиндексировать матрицу в Pyomo - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь создать индекс Pyomo, который будет применяться как к именам столбцов, так и к индексу строк в кадре данных pandas.

Причина в том, что у меня есть ограничения на каждый столбец, но я также хотел бы разделить строки df на 4 части, с различными ограничениями на каждую часть.Я могу заставить эту формулировку работать, создав 4 отдельных Params, индексированных только по именам столбцов матрицы, но это негибко, если подмножество должно быть разным количеством частей.

Мой код, пытающийся установить подмножество x и y матрицы, приведен ниже:

model=ConcreteModel()
model.N = Set(initialize=col_names)
model.I = Set(initialize=full_df.index)
model.M = Param(model.I, model.N, initialize=full_df[col_names].values)

Буду признателен за любую помощь.

1 Ответ

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

Param может поддерживать словари, а словари поддерживают ключи кортежей.

  1. Создайте набор (i, n) кортежей, где i является элементом I, а n является элементом N. Этот набор, вместо того, чтобы содержать числа или строку, будет содержать кортежи.

    model.your_set = Set(initialize=list_of_tuples)
    
  2. Убедитесь, что у вас есть словарь или представление объекта данных, которое допускает одно и только одно числовое значение на кортеж (т. Е. Содержимое вашей матрицы).Давайте назовем его неординарно d.

  3. Параметр должен быть объявлен следующим образом:

    model.M = Param(model.your_set, initialize=d)
    

Таким образом, ваши кортежи будут работатьв качестве ключей от диктата.

...