Gurobi Python: Удовлетворяет ли код ограничению? - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь написать ограничения, как показано на рисунке, но не могу достичь желаемого результата.

enter image description here

Результат будет, если задача использует электричество, тогда 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}}

Может кто-нибудь поправить меня?

...