Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Gurobi-python接口中创建二进制变量?_Python_Python 3.x_Linear Programming_Gurobi - Fatal编程技术网

如何在Gurobi-python接口中创建二进制变量?

如何在Gurobi-python接口中创建二进制变量?,python,python-3.x,linear-programming,gurobi,Python,Python 3.x,Linear Programming,Gurobi,我不熟悉Gurobi Python接口。如果有人能指导我解决这个问题,那就太好了 我想使用Python接口创建一个二进制决策变量 由$X_{k,u,i,j}$-表示的二进制变量指示用户u的设备i在时隙k处的任务j是否已处理。1=已处理,0=未处理 我试过这样做,但没有得到想要的输出 x = m.addVars(time_slots, users, appliances, task_appliances, vtype = GRB.BINARY, name = 'x') 输出 x[k1,u1,洗

我不熟悉Gurobi Python接口。如果有人能指导我解决这个问题,那就太好了

我想使用Python接口创建一个二进制决策变量

由$X_{k,u,i,j}$-表示的二进制变量指示用户u的设备i在时隙k处的任务j是否已处理。1=已处理,0=未处理

我试过这样做,但没有得到想要的输出

 x = m.addVars(time_slots, users, appliances, task_appliances, vtype = GRB.BINARY, name = 'x')
输出

x[k1,u1,洗衣机,洗衣机],x[k1,u1,洗衣机, 干燥器]


如何创建一个二进制变量来表示
x[k1,u1,洗衣机,移动],x[k1,u1,洗衣机,加热]
,。。对于所有洗衣机任务和
x[k1,u1,干燥器,干燥1],x[k1,u1,干燥器,干燥2]
,。。所有的烘干机任务都是这样,所有的电器都是这样。

首先要注意,在task\u电器中,洗碗机的任务加热是两次的,在解决这个问题后,你可以使用列表理解来获得元组列表,然后使用
m.addVars()


这看起来是正确的-为什么你说你没有“得到想要的输出”?不,实际上我得到的是这样的输出,
x[k1,u1,洗衣机,洗衣机]
,`x[k1,u1,洗衣机,烘干机]`实际上,洗碗机包含两个加热任务,这就是为什么我包含了两次加热。然后我建议将它们重命名为heating1和heating2,就像其他任务一样。否则,
m.addVars
将由于重复密钥而产生密钥错误。
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']}
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..