Хитрость заключается в определении набора индексации, используемого для индексации переменной.Pyomo не поддерживает зацикливание отдельных индексов и добавление их в Var по одному.Вы должны использовать некоторый умный код Python для создания всего набора индексации.Например, вы можете использовать что-то вроде этого, чтобы отфильтровать нужные вам индексы:
m = ConcreteModel()
m.g = Set(initialize=[1,2,3])
h = {1:['a','b'], 2:['b','c'], 3:['c','d']}
m.h_all = Set(initialize=set(sum(h.values(),[]))) # Extract unique h values
# Initialize set to be entire cross product of g and h and then filter desired values
m.hg = Set(initialize=m.g*m.h_all, filter=lambda m,g,hi:hi in h[g])
m.x = Var(m.hg, within=NonNegativeReals)
Еще лучшей альтернативой будет:
h = {1:['a','b'], 2:['b','c'], 3:['c','d']}
m.hg = Set(initialize=list((i,j) for i in h.keys() for j in h[i])