Сырье, стальной лист, приобретается в прямоугольных плитах
Изготовленные детали представляют собой круглые надрезы из стального листа, однако требования к деталям и их стоимость основаны на квадрате, диаметре детали = квадрат Длина и ширина
Общее количество пластины, которая потребляется в производстве, пропорционально распределяется между производимыми заданиями / деталями
Разница между 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)
Мне нужно иметь возможность рассчитать длину иШирина, которая будет выдана и будет возвращена для каждой работы, которая будет генерировать выданный процент, который соответствует рассчитанному проценту распределения на основе суммы общих потребностей.
Любые предложения о том, как добиться этого, будут высоко оценены
Спасибо всем
PS
Я не получил форматирование кода для работы в качестве чистого копирования и вставки. Строки 71 и 73 будут генерировать ошибку, но это интервал между отдельными строками кода, которые были разбиты на две строки, чтобы две вписались в блоки кода