|
|
|
Рассчет доступного товара при многоуровневом BOM.
|
|||
|---|---|---|---|
|
#18+
Добрый день! Продумываю структуры и логику для организации работы с многоуровневым BOM (bill of materials). По факту, это граф с одной вершиной в нашем случае. Но при этом с циклами. Т.е. один материал может входить в несколько узлов, причем разного уровня. Тогда у нас могут проявляться линейные алгебраические уравнения с несколькими коэффициентами (а если уровней много, то и не очень линейные). Так же возможны ситуации, когда можно оперировать только целыми единицами или целыми+дробными. В общем, чем дальше - тем веселее. Интересуют есть ли исследования по алгоритмам, рассмотрение введение ограничений для упрощения учета и прочее. Идей много, надо разложить оп полкам. Буду рад любой помощи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 10:31 |
|
||
|
Рассчет доступного товара при многоуровневом BOM.
|
|||
|---|---|---|---|
|
#18+
Drac013Тогда у нас могут проявляться линейные алгебраические уравнения с несколькими коэффициентами (а если уровней много, то и не очень линейные). Ээ, это как? Как из такого графа может получиться что-то отличное от линейного уравнения? Целые + дробные я бы решал выбором соответствующей единицы измерения - подозреваю что "точность" дробной части везде четко ограничена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 11:07 |
|
||
|
Рассчет доступного товара при многоуровневом BOM.
|
|||
|---|---|---|---|
|
#18+
Drac013, какие еще нелинейные уравнения? Это же обычный BOM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 11:15 |
|
||
|
Рассчет доступного товара при многоуровневом BOM.
|
|||
|---|---|---|---|
|
#18+
Drac013, насчет циклов поподробнее? то что "один материал входит в разные уровни" ни каком цикличности не говорит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 11:16 |
|
||
|
Рассчет доступного товара при многоуровневом BOM.
|
|||
|---|---|---|---|
|
#18+
ViPRos, Видимо, ТС рассматривает свой граф как неориентированный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 11:21 |
|
||
|
Рассчет доступного товара при многоуровневом BOM.
|
|||
|---|---|---|---|
|
#18+
ViPRos, Да, с цикличностью я немного ошибся в определении. Ну и уравнения для поиска максимума будет только линейным, тоже верно. Только с каждым уровнем может серьезно расти количество переменных. Вот произвольный пример в приложении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 11:48 |
|
||
|
Рассчет доступного товара при многоуровневом BOM.
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинDrac013Тогда у нас могут проявляться линейные алгебраические уравнения с несколькими коэффициентами (а если уровней много, то и не очень линейные). Целые + дробные я бы решал выбором соответствующей единицы измерения - подозреваю что "точность" дробной части везде четко ограничена. Есть такой соблазн. Если требуются дробные части, то вводить новые базовые единицы. Но это потребует много движений в уже существующем функционале. Поэтому стоит попробовать сначала реализовать логику целые+дробные в зависимости, например, от номенклатуры. Т.е. жесткие диски мы не можем потрать 1,5 или 2,2, а вот 0,1 пачки винтов вполне можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 11:53 |
|
||
|
Рассчет доступного товара при многоуровневом BOM.
|
|||
|---|---|---|---|
|
#18+
Drac013 Поэтому стоит попробовать сначала реализовать логику целые+дробные в зависимости, например, от номенклатуры. Т.е. жесткие диски мы не можем потрать 1,5 или 2,2, а вот 0,1 пачки винтов вполне можно. Сложность тут будет в том, что Вы, конечно, можете потратить 0.1 пачки винтов - а вот, условно говоря, 0.15 не можете (потому что их там в пачке 10 штук). Поэтому просто галочкой "возможны дробные доли" обойтись не получится, придется вводить сложную валидационную логику. Имхо проще оперировать в графе в целых миллиграммах, микрограммах и т.п., а "наружу" отдавать значения, умноженные на соответствующий для каждого материала коэффициент (если внешний функционал у Вас уже заточен на дробные значения) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 12:14 |
|
||
|
Рассчет доступного товара при многоуровневом BOM.
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, Переход к виртуальным единицам в рамках алгоритма - интересное решение. Попробую опереться на него. Осталось разобраться с математикой. Понятно, что нам необходимо найти максимум для уравнения: 1*(2*(3*K+1*G)+3*G)+2*(3*3*G +4*(G+2*J+3*I)). Но нас волнуют не только остатки материалов G,K,I и J, но и узлов B,D,C,E,F,H. Было бы легко разложить остатки узлов на материалы, но в общем случае это невозможно (если ПК на составляющие можно разобрать, то тесто на муку, дрожжи и прочее уже сложнее :) ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 12:29 |
|
||
|
Рассчет доступного товара при многоуровневом BOM.
|
|||
|---|---|---|---|
|
#18+
Drac013, чего хоть оптимизируешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 13:24 |
|
||
|
Рассчет доступного товара при многоуровневом BOM.
|
|||
|---|---|---|---|
|
#18+
ViPRos, Это не важно. Система, где есть совсем урезанное производство. Скорее даже сборка. И захотели в ней бантиков. Для решения большинства бантиков необходимо реализовать этот алгоритм. Сейчас связь простая: у элемента указаны входящие в него детали. У них тоже могут быть указаны свои детали и так далее. Рассчитывать на лету, боюсь, будет накладно, но в некоторых ситуациях придется. Например, собираем ПК. По умолчанию, в нем один диск. Но конкретный заказ подразумевает 2 диска. Тогда в документе к материалам по умолчанию добавляем еще один HDD и пересчитываем возможности сборки. Пока вот изучаю литературу по теме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 14:04 |
|
||
|
Рассчет доступного товара при многоуровневом BOM.
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинDrac013 Поэтому стоит попробовать сначала реализовать логику целые+дробные в зависимости, например, от номенклатуры. Т.е. жесткие диски мы не можем потрать 1,5 или 2,2, а вот 0,1 пачки винтов вполне можно. Сложность тут будет в том, что Вы, конечно, можете потратить 0.1 пачки винтов - а вот, условно говоря, 0.15 не можете (потому что их там в пачке 10 штук). Не выйдет потратить 0,1 пачки винтов, даже если 1 или сколько-то винтов точно соответствуют 0,1 от их количества в пачке. Если недосточно заложить в стоимость сборки что-то типа «и еще винты на 10 рублей», то пачки надо по приходу «рассыпать», т.е. пересчитывать в количество штук винтов, и эти штуки потом учитывать в BOM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 15:21 |
|
||
|
Рассчет доступного товара при многоуровневом BOM.
|
|||
|---|---|---|---|
|
#18+
Ы, Давайте без винтов. Ткань приходуется и учитывается метрами, а списываться на пошив (да, и продажу тоже) может и по 0,5 и по 0,15. Переводить учет на сантиметры мало кому придет в голову, да и не особо рационально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 15:41 |
|
||
|
Рассчет доступного товара при многоуровневом BOM.
|
|||
|---|---|---|---|
|
#18+
ЫКот Матроскинпропущено... Сложность тут будет в том, что Вы, конечно, можете потратить 0.1 пачки винтов - а вот, условно говоря, 0.15 не можете (потому что их там в пачке 10 штук). Не выйдет потратить 0,1 пачки винтов, даже если 1 или сколько-то винтов точно соответствуют 0,1 от их количества в пачке. Если недосточно заложить в стоимость сборки что-то типа «и еще винты на 10 рублей», то пачки надо по приходу «рассыпать», т.е. пересчитывать в количество штук винтов, и эти штуки потом учитывать в BOM. Потратить 0.1 - выйдет, и даже учесть это - выйдет, только это неудобно. Поэтому я предложил использовать целые единицы измерения (т.е. в случае пачек винтов - именно "рассыпать") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 15:59 |
|
||
|
Рассчет доступного товара при многоуровневом BOM.
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, виртуально рассыпать :) Это вполне удобно. Точность ограничена. Поэтому мы всегда сможем перейти к целым виртуальным единицам и вернуться от них обратно на выходе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 16:06 |
|
||
|
Рассчет доступного товара при многоуровневом BOM.
|
|||
|---|---|---|---|
|
#18+
Drac013, в литературе это называется "матрица применяемости" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 16:19 |
|
||
|
Рассчет доступного товара при многоуровневом BOM.
|
|||
|---|---|---|---|
|
#18+
ViPRos, матрица затрат лишь один из вариантов представления BOM, еще есть граф и дерево. У меня нет проблем в том, чтобы посчитать потребность материалов для производства одной единицы продукта. Проблема посчитать, сколько товара мы можем произвести, учитывая остатки как материалов, так и готовых узлов. Ведь в общем случае один материал может входить в некий узел (и в узел этого узла и т.д.) и в сам продукт. Т.е. его остаток необходимо оптимально распределить между узлами с учетом остатков самих узлов. Вот тут пока у меня затык. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 16:29 |
|
||
|
Рассчет доступного товара при многоуровневом BOM.
|
|||
|---|---|---|---|
|
#18+
Drac013ViPRos, матрица затрат лишь один из вариантов представления BOM, еще есть граф и дерево. У меня нет проблем в том, чтобы посчитать потребность материалов для производства одной единицы продукта. Проблема посчитать, сколько товара мы можем произвести, учитывая остатки как материалов, так и готовых узлов. Ведь в общем случае один материал может входить в некий узел (и в узел этого узла и т.д.) и в сам продукт. Т.е. его остаток необходимо оптимально распределить между узлами с учетом остатков самих узлов. Вот тут пока у меня затык. В этом, кстати, тоже имхо могут быть сложности, если только есть альтернативные схемы получения материалов - т.е. материал A можно получить либо как n1 единиц материала B + n2 единиц материала С, либо как m1 единиц материала D + m2 единиц материала E. Если же схема строго одна - то чего там оптимизировать? самый тупой и простой в реализации способ - в цикле рассчитывать производство каждой единицы готвоой продукции, пока не обнаружится недостача в одном из "элементарных" материалов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 16:50 |
|
||
|
Рассчет доступного товара при многоуровневом BOM.
|
|||
|---|---|---|---|
|
#18+
[quot Кот Матроскин]Drac013ViPRos, Если же схема строго одна - то чего там оптимизировать? самый тупой и простой в реализации способ - в цикле рассчитывать производство каждой единицы готвоой продукции, пока не обнаружится недостача в одном из "элементарных" материалов. Не, задача "можем ли мы произвести n единиц товара?" - очень легкая. У меня обратная задача: "Какое количество материала мы можем произвести?". Т.е. необходимо рассчитать максимально возможное n. Причем для подчиненных узлов это придется рассчитывать еще с учетом весового коэффициента. Например, продукт P состоит из одного узла N1 и одного N2, N1 и N2 требуют по одной единице материала M1, которого на складе m штук. Казалось бы, мы можем произвести m штук N1 и m штук N2, но т.к. нам нужны оба узла для производства P, то фактически мы можем произвести m/2 штук каждого из них. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 17:06 |
|
||
|
Рассчет доступного товара при многоуровневом BOM.
|
|||
|---|---|---|---|
|
#18+
[quot Drac013]Кот Матроскинпропущено... Не, задача "можем ли мы произвести n единиц товара?" - очень легкая. У меня обратная задача: "Какое количество материала мы можем произвести?". Т.е. необходимо рассчитать максимально возможное n. . Именно этот алгоритм я и описал. "Мы можем произвести N? А N+1? А N+2? А N+3? опа, для N+3 элементарного материала G не хватило, значит можем только N+2". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 17:12 |
|
||
|
Рассчет доступного товара при многоуровневом BOM.
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, кажется, понял, что вы имеете ввиду. А если таких циклов будет 1000? 10000? 0_о Да уровней штук 5 хотя бы. Мне это и в интерфейсе пересчитывать придется иногда (меняем в документе состав для текущей сборки). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 17:13 |
|
||
|
Рассчет доступного товара при многоуровневом BOM.
|
|||
|---|---|---|---|
|
#18+
Хм, мы можем быстро посчитать границу сверху (разложив все на элементарные материалы), проверить ее. И пойти медианным методом. Тогда более менее прилично выходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 17:16 |
|
||
|
Рассчет доступного товара при многоуровневом BOM.
|
|||
|---|---|---|---|
|
#18+
Drac013Мне это и в интерфейсе пересчитывать придется иногда (меняем в документе состав для текущей сборки). Дерево отрезков , не ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 17:18 |
|
||
|
Рассчет доступного товара при многоуровневом BOM.
|
|||
|---|---|---|---|
|
#18+
Drac013Кот Матроскин, кажется, понял, что вы имеете ввиду. А если таких циклов будет 1000? 10000? 0_о Да уровней штук 5 хотя бы. Мне это и в интерфейсе пересчитывать придется иногда (меняем в документе состав для текущей сборки). Цикл будет один - итераций этого цикла может быть 10000. При условии что граф у Вас в памяти - думаю, расчет будет занимать секунды. Хотя, подчеркиваю, это самый простой и тупой способ, придуманный за 2 минуты, при необходимости его можно оптимизировать (другой вопрос что в наш век гигабайтов ОЗУ и десятков ядер процессора вполне может хватить и такого ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 17:20 |
|
||
|
Рассчет доступного товара при многоуровневом BOM.
|
|||
|---|---|---|---|
|
#18+
kva6513, почитаю, спс. Кот Матроскин, обход дерева - это сам по себе цикл. Т.е. каждая итерация - это именно что новый цикл обхода по дереву. Вот что смущает. Понятно, что настоль прямолинейно действовать нельзя. Прикину еще варианты. Если аналитически решение будет не найти (в чем я почти уверен), то будем решать подобным образом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 17:29 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=39075554&tid=1540452]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
149ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 481ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...