首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python实现生产计划与调度问题

python实现生产计划与调度问题
EN

Stack Overflow用户
提问于 2019-05-23 18:37:37
回答 1查看 877关注 0票数 1

我正在尝试使用纸浆包装来进行生产调度。我有不同型号的订单。不同的工厂以不同的速度生产不同的型号。我应该计划所有的订单,但我的目标只是在接下来的几天(即6天)完成更多的产品。约束主要是交货期(到期日)和订单可以开始生产的时间(发布日期)。

我不确定我是否正确地使用了纸浆:我将LpVariables r设置为发布日期。和c表示完整的日期。像顺序一样,我将在时刻r开始于facory j,在周期c之后结束。

代码语言:javascript
复制
r=LpVariable('release date',(o,f),0)
c=LpVariable('complete days',(o,f),0)
d=LpVariable('due date',(o,f),0)

我假设目标函数应该是这样:

代码语言:javascript
复制
prob=lpProblem('aps',LpMaximize)
prob+=LpSum([c[o][f]*speed[o][f] for o in orders for f in factories if d[o][f]<=6])+lpSum([(6-r[o][f])*speed[o][f] for o in orders for f in factories if d[o][f]>=6 and r[o][f]<=6])

我的问题是如何纠正它。也许使用不同的包?或者只是更改一些代码?

EN

回答 1

Stack Overflow用户

发布于 2020-04-04 03:59:25

您需要使用LpVariable.dicts而不是LpVariable。后者创建LpVariable对象的单个实例。前者创建了一个字典,其中的键基于indexs (第二个)参数,值是LpVariable对象,这正是您想要的。

我认为当您将(o,f)作为看似无关的参数传递时,LpVariable可能会抛出一个错误。

您可以通过使用LpVariableLpVariable.dicts输出r、c和d来查看两者之间的区别。

代码语言:javascript
复制
o = [1, 2, 3]
f = ['a', 'b', 'c']

r = LpVariable('release date',(o,f),0)
c = LpVariable('complete days',(o,f),0)
d = LpVariable('due date',(o,f),0)

>>>print(r, c, d)
release_date complete_days due_date

# this error occurs because c is an object, not a dictionary where the values are objects.
>>>prob += lpSum([c[o][f]*speed[o][f] for o in orders ...])
TypeError: 'LpVariable' object is not subscriptable 

# correct approach
r = LpVariable.dicts('release date',(o,f),0)
c = LpVariable.dicts('complete days',(o,f),0)
d = LpVariable.dicts('due date',(o,f),0)

>>>print(r, c, d)
{1: {'a': release_date_1_a, 'b': release_date_1_b, 'c': release_date_1_c},
  2: {'a': release_date_2_a, 'b': release_date_2_b, 'c': release_date_2_c},
  3: {'a': release_date_3_a, 'b': release_date_3_b, 'c': release_date_3_c}},
 {1: {'a': complete_days_1_a, 'b': complete_days_1_b, 'c': complete_days_1_c},
  2: {'a': complete_days_2_a, 'b': complete_days_2_b, 'c': complete_days_2_c},
  3: {'a': complete_days_3_a, 'b': complete_days_3_b, 'c': complete_days_3_c}},
 {1: {'a': due_date_1_a, 'b': due_date_1_b, 'c': due_date_1_c},
  2: {'a': due_date_2_a, 'b': due_date_2_b, 'c': due_date_2_c},
  3: {'a': due_date_3_a, 'b': due_date_3_b, 'c': due_date_3_c}}]

>>>print(r[1]['b'])
release_date_1_b

另请注意,您有一些大写错误。您的代码应该读取LpProblem,而不是lpProblem,并且读取LpSum而不是lpSum。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56273382

复制
相关文章

相似问题

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