Как установить ограничения для рабочего и нерабочего времени в задаче целочисленного программирования - PullRequest
0 голосов
/ 12 октября 2019

Я новичок в целочисленном программировании и мне нужна ваша помощь. Я хочу решить задачу целочисленного программирования для планирования, учитывая нерабочие и рабочие часы. Например, есть три действия, A, B и C. Они требуют 10, 5 и 9 часов для работы соответственно. Ежедневные часы работы с 8:00 до 17:00. Если последовательность действий A, B и C, рабочее время A составляет с 8:00 до 17:00 в 1-й день и с 8:00 до 9:00 в 2-й день.

Как я могу выразить приведенное ниже уравнение для целочисленного программирования? Пожалуйста, дайте мне знать.

# j is activity index, t is time
for j in J:    
    model += xsum(x[j][t]*t
                  for t in T) >= int(t/24)*24 + 8 'or' <= int(t/24)*24 + 17

Мои полные коды приведены ниже, без учета рабочего и нерабочего времени:

from mip import Model, xsum, BINARY


p = [0, 10, 5, 9, 0]  # working time, p[0] and p[4] are dummy element. 
s = [[0,1], [1,2], [1,3], [3,4]]

(J, T) = (range(len(p)), range(sum(p)))

model = Model()

x = [[model.add_var(name='x({},{})'.format(j, t), var_type=BINARY)
     for t in T]
    for j in J]

model.objective = xsum(x[len(J) - 1][t]* t
                       for t in T)

for j in J:
    model += xsum(x[j][t]
                  for t in T) == 1

for (j, s) in S:
    model += xsum(t * x[s][t] - t * x[j][t]
                  for t in T) >= p[j]

model.optimize()

s = []
print('Schedule: ')
for (j, t) in product(J, T):
    if x[j][t][d].x >= 0.99:
        s.append([j, t])
        print('({} ,{}, {} )'.format(j, t))
print('Makespan = {} '.format(model.objective_value))
print(s)

'''
...