我是Gurobi Python界面的新手。有人可以指导我解决这个问题。
我想使用Python接口创建一个Binary Decision变量。
由$ X_ {k,u,i,j} $表示的二进制变量-表示是否处理了用户k在时隙k的设备i的任务j。 1 =已处理,0 =未处理。
我已经尝试过了,但是无法获得想要的输出。
x = m.addVars(time_slots, users, appliances, task_appliances, vtype = GRB.BINARY, name = 'x')
输出
x [k1,u1,洗衣机,洗衣机],x [k1,u1,洗衣机, 烘干机]
Where
time_slots = ['k1', 'k2','k3', 'k4', 'k5', 'k6', 'k7', 'k8', 'k9', 'k10']
users = ['u1', 'u2', 'u3', 'u4', 'u5']
appliances = ['washingmachine', 'dryer', 'dishwasher', 'refrigerator', 'gashob1', 'gashob2']
task_appliances = {'washingmachine':['movement', 'heating','washing', 'cooling', '1strinse', '2ndrinse', '3rdrinse'], 'dryer': ['drying1', 'drying2', 'drying3', 'drying4', 'drying5', 'drying6', 'drying7', 'drying8'], 'dishwasher': ['movement', 'heating', 'wash', '1strinse', 'drain', 'heating','2ndrinse', 'drain_and_dry'], 'refrigerator': ['cooling1', 'cooling2', 'cooling3', 'cooling4','cooling5', 'cooling6', 'cooling7','cooling8', 'cooling9', 'cooling10'],'gashob1':['heating'], 'gashob2':['heating']}
我如何创建一个代表所有洗衣机任务的x[k1,u1,washingmachine, movement], x[k1,u1,washingmachine, heating]
...这样的二进制变量,以及对于所有烘干机任务的x[k1,u1,dryer, drying1], x[k1,u1,dryer, drying2]
...这样的所有电器等等。
答案 0 :(得分:1)
首先请注意,在task_appliances中,洗碗机的任务加热是两次,修复此问题后,您可以使用列表推导获取元组列表,然后使用m.addVars()
:
from gurobipy import *
# Your lists here
m = Model()
vars_tup = [(t, u, app, task) for t in time_slots for u in users for app in appliances for task in task_appliances[app]]
x = m.addVars(vars_tup, vtype=GRB.BINARY, name="x")
# Your constraints and objective function..