纸浆相对分配约束

2024-09-30 12:16:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个水桶和一个带有packsize的项目列表,其中packsize是一个单位集合

bckdf=pd.DataFrame.from_dict({0:{'Bucket_Type': 'Veg', 'Capacity':1000},
                        1:{'Bucket_Type': 'Non-Veg', 'Capacity':500}}).T

items=pd.DataFrame.from_dict({'item_no': {0: '123', 1: '456', 2: '789'},
 'item_description': {0: 'Buffet Malabar Paratha 300 gm',
  1: 'Mc Cain French Fries Value Pk 750 Gm',
  2: 'Yummies Veg Sticks 320 gm Pouch'},
 'volume': {0: 0.0714286, 1: 0.214286, 2: 0.0357143}})

我需要在桶中放入至少900个单元,同时确保每个项目的桶中放入的包装数量或多或少相等。每次,我选择一包,我用光了我作为成本制定的包装的体积

prob = LpProblem("LP_Problem", LpMaximize)

buckettype = bckdf[bckdf['Bucket_Type']=='Veg']['Bucket_Type']
capacity = bckdf.set_index(['Bucket_Type'])['Capacity'].to_dict()
itemlist=items['item_no']
combos = [(w,b) for w in buckettype for b in itemlist]
costs = makeDict((buckettype, itemlist),[items['volume']])

itemqtydict = LpVariable.dicts("Combo",(buckettype, itemlist), 0, None, LpInteger)
## Objective function
prob += lpSum([(itemqtydict[w][b]) for (w,b) in combos])
prob += lpSum([(itemqtydict[w][b])*costs[w][b] for (w,b) in combos])>=900
prob += lpSum([(itemqtydict[w][b])*costs[w][b] for (w,b) in combos])<=bckdf[bckdf['Bucket_Type']=='Veg']['Capacity'].values[0]

status=prob.solve(pulp.PULP_CBC_CMD(timeLimit=5,msg=1, gapRel=1))

如何在何处构建约束

more or less equal number of packs are put in the bucket


Tags: inforbuckettypeitemsitemdictcapacity
1条回答
网友
1楼 · 发布于 2024-09-30 12:16:29

你基本上已经有了

prob += lpSum([(itemqtydict[w][b])*costs[w][b] for (w,b) in combos])>=900

在这里,您将限制桶中项目的成本等于或大于900

但是如果你只想增加物品的数量,那么你可以使用

prob += lpSum([(itemqtydict[w][b])] for (w,b) in combos])>=900

相关问题 更多 >

    热门问题