Проблема: Инструмент работает для большинства входных данных, но иногда выдает неправильные длины рельсов. Например, для небольших значений или определенной оставшейся длины буфера выводятся недопустимые рельсы (например, длины меньше разрешенного минимума).
Желаемые примеры вывода (текущие) : Учитывая входную максимальную длину рельса 1600 мм, буфер 600 мм и общую длину 8650 мм, правильный результат должен быть: {1600, 1600, 1600, 1800, 1800
Для общей длины 4650 мм правильный результат должен быть: {1400, 1400, 1600} (Эти значения с добавленным буфером конечной стойки дают в сумме общую длину с использованием только разрешенных длин рельсов). и обеспечение сбалансированности набора.)
Примеры неправильных выходных данных (текущие): Например, когда оставшаяся длина составляет 1050 мм, код создает недопустимую направляющую. из {800}. Иногда она превышает или занижает допустимую длину рельсов.
Код: Выделить всё
remainingLength = 27250
remainingBufferLength = 600
maxLengthIndex = 3
standardLengths = [1000, 1200, 1400, 1600, 1800, 2000]
standardLengths.sort()
standardStep = 200
odCCDifference = 250
endPostCount = 2
railSets = []
remainingLength -= odCCDifference
while remainingLength >= standardLengths[maxLengthIndex]:
remainingLength -= standardLengths[maxLengthIndex]
railSets.append(standardLengths[maxLengthIndex])
if remainingBufferLength >= remainingLength:
while remainingLength > 0:
remainingLength -= standardStep
railSets.sort()
railSets[0] += standardStep
else:
remainingLength -= standardLengths[maxLengthIndex]
railSets.append(standardLengths[maxLengthIndex])
while remainingLength < 0:
remainingLength += standardStep
railSets.sort(reverse=True)
railSets[0] -= standardStep
midPostCount = len(railSets)-1
railSetsList = []
for i in set(railSets):
railSetsList.append([i, railSets.count(i)])
print("Endposts: " + str(endPostCount))
print("Midposts: " + str(midPostCount))
for i in railSetsList:
print(str(i[0]) + " Railsets: " + str(i[1]))
- Как я могу улучшить логику балансировки, чтобы избежать создания незаконных железнодорожных перевозок длины?
- Есть ли альтернативные подходы, которые мне следует рассмотреть для более эффективного разделения общей длины?
Изменить: я уточню буфер и стандартную длину: у нас есть стандартной длины, доступной для покупки, 1730 будет нестандартной длиной, которую я добавлю в код позже. В отрасли стандартная длина является общепринятой с точки зрения цен и наличия на складе. В общем, мы хотим работать с желаемой максимальной длиной (например, 1600), но если бы это была жесткая крышка, то лишь для небольшого превышения длины в 200 нам потребовались бы дополнительная средняя стойка и набор направляющих. Предполагается, что буфер уловит это и предоставит некоторую свободу действий (один более длинный набор рельсов 1800) на случай, если это произойдет.
Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-python