У меня есть модель Pyomo, подключенная к сайту, созданному в Django.Моя переменная решения имеет 4 индекса, и у меня на ней работает огромное количество ограничений.
Поскольку Pyomo тратит кучу времени на чтение ограничений с таким большим количеством переменных, я хочу сократить индекс, установленный насодержат только переменные, которые на самом деле могут быть 1 (у меня есть некоторые условия на это)
Я видел этот пост Создать переменную с разреженным индексом в Pyomo
и попытался дляпетля для всех моих условий.Я создал набор «AllowedVariables», чтобы позже поместить это в мои ограничения.Но серверу Django требуется много времени для создания этого набора при выполнении проверки системы, он никогда не выходит.
В настоящее время у меня есть эта модель:
model = AbstractModel()
model.x = Var(model.K, model.L, model.F, model.Z, domain=Boolean)
def ObjRule(model):
# some rule, sense maximize
model.Obj = pyomo.environ.Objective(rule=ObjRule, sense=maximize)
def ARule(model,l):
maxA = sum(model.x[k,l,f,z] * for k in model.K for f in model.F
for z in model.Z and (k,l,f,z) in model.AllowedVariables)
return maxA <= 1
model.maxA = Constraint(model.L, rule=ARule)
Ограничение является примерным, у меня 15больше похожих.В настоящее время я создаю «AllowedVariables» следующим образом:
AllowedVariables = []
for k in model.K:
for l in model.L:
..... check all sorts of conditions, break if not valid
AllowedVaraibles.append((k,l,f,z))
model.AllowedVariables = Set(initialize=AllowedVariables)
Используя это, сервер Django начинает проверку .... и никогда не останавливается
performing system checks...
К сожалению, мне как-то нужно какое-то ограничение напеременные или чтение для решателя займут много времени, так как ограничения содержат так много ненужных переменных, которые в любом случае должны быть равны 0.
Есть идеи о том, как я могу разбросать свой набор переменных?