Я пытаюсь написать ограничения, как показано на рисунке, но не могу достичь желаемого результата.
Результат будет, если задача использует электричество, тогда x
двоичная переменная будет 1, к ней наложено delta
двоичная переменнаядо 1 в другом ограничении.Таким образом, задача должна использовать электричество до конца времени выполнения задачи.
Здесь k - время, в которое задание запущено o_ {i, j} - общее время выполнения задания.
Я пробовал это:
m.addConstrs((x[t, u, app, task]<= x[time_slots[t_index + each_task_time], u, app, task]+ 1 - delta[t, u , app, task]
for t_index, t in enumerate(time_slots)
for u in users for app in appliances
for task in task_appliances[app]
for each_task_time in range(int(task_time[app][task])+1)
if t_index < (len(time_slots)- task_time[app][task])),
name = "task_end_electricity1")
Где task_time[app, task]
- время выполнения задачи j устройства i.
Двоичные переменные
x[t, u, app, task] : indicates whether task j of appliance i of user u at time slot k processed by electricity or not; 1 = processed, 0 = not processed
delta[t, u , app, task] : that takes value 1, if the task j of appliances i of user u starts running at time t. Or O if it doesn't start.
Пример данных:
time_slots = ['k1', 'k2','k3', 'k4', 'k5']
users = ['u1', 'u2', 'u3', 'u4', 'u5']
appliances = ['washingmachine', 'dryer', 'dishwasher']
task_appliances = {'washingmachine':['movement', 'heating','washing'],
'dryer': ['drying1', 'drying2'],
'dishwasher': ['movement', 'heating1', 'wash']}
task_time = {'washingmachine':{'movement': 1 , 'heating': 1, 'washing': 1},
'dryer':{'drying1': 1, 'drying2': 1},
'dishwasher': {'movement': 1, 'heating1': 1,'wash': 1}}
Может кто-нибудь поправить меня?