【发布时间】:2019-10-23 18:40:01
【问题描述】:
原材料,钢板,以矩形板的形式购买
制造的零件是钢板的圆形切割,但零件要求和成本计算基于正方形,零件直径 = 正方形长度和宽度
生产中消耗的印版总量按比例分配给生产的工作/零件
圆形和方形的SQIN差异以及板的嵌套效率/低效率影响分配
库存是根据测量单位、长度和宽度发出的。
我们的 ERP 系统无法有效地按比例分配库存。手动计算用于“菊花链”分配库存。完整的钢板分配给一个作业,不需要的部分从作业分配回库存,并且这个过程会针对与钢板相关的每个作业/项目重复进行。
此过程效率低下且容易出错。我正在尝试提出自动化此过程或至少自动化计算以减少错误所需的逻辑。我遇到的问题是我的分配使发放的金额偏向计算的第一个工作。基本上随着计算每个作业后返回库存的板材百分比减少,分配给下一个作业的库存百分比也减少
import pandas as pd
# Dimensions of a steel plate and the portions that will consumed in
# production and returned to inventory
plateLength = 480
plateWidth = 96
plateSQIN = plateLength * plateWidth
plateReturnedLength = 60
plateReturnedWidth = 45
plateReturnedSQIN = plateReturnedLength * plateReturnedWidth
consumedLength = plateLength - plateReturnedLength
consumedWidth = plateWidth - plateReturnedWidth
consumedSQIN = plateSQIN - plateReturnedSQIN
# DataFrame for the job details and material requirements that will be
# needed for production
data = {'JOB':[128576,128518,128577,128667,128630],
'Length':[90,90,90,84,36],
'Width':[90,90,90,84,36],
'QTY':[1,2,1,1,2]}
layout = pd.DataFrame(data=data)
# Adding calculated values to the DataFrame
layout['REQUIRED'] = (layout['Length'] * layout['Width'])*layout['QTY']
totalRequired = layout['REQUIRED'].sum()
layout['CALC_USE'] = (layout['REQUIRED']/totalRequired) * consumedSQIN
totalUsed = layout['CALC_USE'].sum()
layout['CALC_%'] = layout['REQUIRED'] / totalRequired
totalAllocatedPcnt = layout['CALC_%'].sum()
# Creating DataFrame columns that will be populated by function
layout['I_L'] = None # issue length
layout['I_W'] = None # issue width
layout['R_L'] = None # return length
layout['R_W'] = None # return width
layout['issued'] = None # SQIN issued
layout['issue%'] = None # %of total SQIN issued
# Function for calculating how much material to issue to each job and
# how much to return to inventory
def issue(data):
issueLength = plateLength
issueWidth = plateWidth
for index, row in layout.iterrows():
pcnt = data.loc[index,'CALC_%']
returnLength = issueLength - consumedLength * pcnt
returnWidth = issueWidth - consumedWidth * pcnt
data.at[index,'I_L'] = round(issueLength,2)
data.at[index,'I_W'] = round(issueWidth,2)
data.at[index,'R_L'] = round(returnLength,2)
data.at[index,'R_W'] = round(returnWidth,2)
issueLength = returnLength
issueWidth = returnWidth
data[['I_L','I_W','R_L','R_W']] =
data[['I_L','I_W','R_L','R_W']].astype(float).round(0)
data['issued'] = (data['I_L'] * data['I_W']) -
(data['R_L'] * data['R_W'])
issueTotal = data['issued'].sum()
data['issue%'] = data['issued']/issueTotal
return data
# call function and view results
issue(layout)
我需要能够为每个作业计算要发布和返回的长度和宽度,这将生成与基于总需求总和计算的分配百分比相匹配的已发布百分比。
任何关于如何实现这一点的建议将不胜感激
谢谢大家
附言
我还没有将代码格式化为纯粹的复制和粘贴。第 71 行和第 73 行会产生错误,但它是单行代码之间的间距,它被分成两行以便两个适合代码块
【问题讨论】:
标签: python-3.x pandas math logic