У меня есть базовая абстрактная модель Pyomo с параметром, индексированным двумя наборами. Я хочу извлечь наборы, которые индексируют этот параметр, но когда я делаю, я получаю неожиданный вывод. Код ниже:
import pyomo.environ as pe
class MakeModel:
def __init__(self):
self.model = pe.AbstractModel()
self.model.a = pe.Set()
self.model.b = pe.Set()
self.model.cost = pe.Param(self.model.a, self.model.b)
def main():
my_model = MakeModel()
print(my_model.model.cost.index_set())
if __name__ == '__main__':
main()
Вывод из оператора печати - "cost_index". После небольшого копания выясняется, что Pyomo автоматически создаст виртуальный набор для многоиндексированного параметра, который является перекрестным произведением данных наборов. Иными словами, на заднем плане Pyomo устанавливает model.cost_index = model.a * model.b
.
Я пытаюсь выяснить, есть ли способ найти, что model.cost
проиндексировано model.a
и model.b
. Если model.cost
был проиндексирован только одним набором, то вызов .index_set()
сделает это для меня. Есть ли другой способ сделать это для многомерных параметров?