Я новичок в целочисленном программировании и мне нужна ваша помощь. Я хочу решить задачу целочисленного программирования для планирования, учитывая нерабочие и рабочие часы. Например, есть три действия, 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)
'''