Использование разреженного индекса для оптимизации с помощью модели Pyomo - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть модель 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.

Есть идеи о том, как я могу разбросать свой набор переменных?

...