Ограничение приоритета Pyomo

У меня проблемы с кодом ограничения приоритета. Вот пример:

Изображение, на котором показаны четыре задачи с приоритетом

Я хотел бы реализовать следующее ограничение предшественника:

Вот математический алгоритм

где:

i = tasks;
t = period;
j = model of product

x = binary variable which returns 1
    if task i is done in period t for model j and 0 otherwise.

Чтобы удовлетворить ограничение, P_i представляет набор с задачами-предшественниками i.

Чтобы стандартизировать код, я использую матрицу-предшественницу для создания наборов в зависимости от задачи, сохраненных в словаре. Вот мой код:

import pyomo.environ
from pyomo.core import *
from pyomo.opt import SolverFactory
M_predecessor = [[0,0,0,0,],[0,0,0,0],[1,1,0,0,],[0,0,1,0,]]

predecessor = dict()
for i in range(4):
    b = i+1    
    predecessor[b] = []
    for j in range(4):
        if M_predecessor[i][j] == 1:
            predecessor[b].append(j+1)

model = ConcreteModel()

model.TASKS = RangeSet(1,len(M_predecessor))
model.PERIODS = RangeSet(1,10)
model.MODELS = [1]

Вот это ограничение:

def rest1_rule(model, i, j):
   return sum(t * model.x[i,t,j] for t in model.PERIODS) >= (
       sum(t * model.x[p for p in predecessor[i],t,j] for t in model.PERIODS)) + model.tiempo[p for p in predecessor[i],j] 
model.rest1 = Constraint(model.TASKS, model.MODELS, rule=rest1_rule)

Я не уверен, как реализовать это в моем ограничении, пожалуйста, есть идеи? Есть ли другая форма для этого? заранее спасибо


person Carlos Dlc    schedule 03.08.2018    source источник


Ответы (1)


person    schedule
comment
Большое спасибо за помощь Ци Чен, работает отлично! - person Carlos Dlc; 05.08.2018