首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Gurobi接口中创建二进制变量?

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

Stack Overflow用户
提问于 2018-09-28 15:42:17
回答 1查看 853关注 0票数 1

我对Gurobi界面很陌生。如果有人能指导我解决这个问题,那就太好了。

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

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

我试过这样做,但无法得到想要的输出。

代码语言:javascript
复制
 x = m.addVars(time_slots, users, appliances, task_appliances, vtype = GRB.BINARY, name = 'x')

输出 xk1,u1,洗衣机,洗衣机,xk1,u1,洗衣机,干燥机

代码语言:javascript
复制
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]都是这样。像这样,所有烘干机的任务,等等,所有的电器。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-29 09:43:58

首先,请注意,在task_appliances中,洗碗机的任务加热是两次,修复后可以使用列表理解来获取元组列表,然后使用m.addVars()

代码语言:javascript
复制
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..
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52558695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档