Функция для выделения изменяющейся пропорции - PullRequest
0 голосов
/ 23 октября 2019

Сырье, стальной лист, приобретается в прямоугольных плитах

Изготовленные детали представляют собой круглые надрезы из стального листа, однако требования к деталям и их стоимость основаны на квадрате, диаметре детали = квадрат Длина и ширина

Общее количество пластины, которая потребляется в производстве, пропорционально распределяется между производимыми заданиями / деталями

Разница между 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 будут генерировать ошибку, но это интервал между отдельными строками кода, которые были разбиты на две строки, чтобы две вписались в блоки кода

1 Ответ

0 голосов
/ 24 октября 2019

Просто нужна была помощь от моей старой алгебры друзей, спасибо, я все понял. Изменена функция следующим образом.

L * W = SQIN

L = SQIN / W

Ширина возврата может быть рассчитана путем уменьшения общего уменьшения ширины пластины на линию% при каждом изменении.
Возвращенный SQIN может быть рассчитан путем уменьшения выданного SQIN на требуемый SQIN при каждом изменении.

Для каждой строки возвращаемое значение для Length = Returned SQIN / Returned Width

def issue(data):

    issueLength = plateLength
    issueWidth = plateWidth

    for index, row in layout.iterrows():

        pcnt = data.loc[index,'CALC_%']       
        reqSQIN = pcnt * (consumedSQIN)   
        issueSQIN = issueLength * issueWidth
        returnSQIN = issueSQIN - reqSQIN

        if returnSQIN <= 0:
            returnLength = 0
            returnWidth = 0
        else:
            returnWidth = issueWidth - (consumedWidth * pcnt)
            returnLength = returnSQIN/returnWidth

        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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...