Pull to refresh
5
0

Интегратор ИТ-решений

Send message
тема статьи интересная, жаль только текст не доступен. Задачу о p-медиане хорошо исследовали в ИМ СО РАН. Видел ссылку на Кочетова, это хорошо уже :)
тогда 01.01, по датам производства конечно. Да, краны поступают из производства, поэтому у них остаточный срок годности один и тот же изначально. Здесь отбор по FIFO и FEFO даст один и тот же результат. Поэтому и без разницы как называть :) Хотя, в чем-то Вы и правы.
да, прошу прощения. Такое разбиение как у Вас получится, опечатался. Алгоритм то жадный. Сам алгоритм не запускал на этих, так как немного другая структура данных на входе. Хотел показать, что наибольшее множество будет другим.
ну да, на самом деле штуки похожи, Вы правы. Но, мне кажется, что все таки мы говорим о разных немного вещах.

Срок годности 10 дней.
Партия 1. Пришел товар 1 шт 1.01 с остатком срока годности 10 дней.
Партия 2. Пришел товар 1 шт 5.01 с остатком срока годности 2 дня.

По FIFO уйдет товар партии 1, по FEFO партия 2. Ну это по тому определению FEFO, которое я знаю, она в вики, вроде такое же. Если Вы по-другому рассуждаете, дайте ссылку на определение FEFO :)
в FEFO при ротации грузов на складе учитывается остаточный срок годности товара. Мы именно остаток не считали, поэтому и не употребили слово FEFO. Или Вы другое имели ввиду?
FEFO это когда First Expire, First Out — первый истекает — первый выходит. У нас же, именно истечение срока годности, не рассматривалось, поэтому и назвали FIFO, от слова «In» :)
смотрите пункт 4 у MinimaJack. Там никто не ошибается особо в объемах и разрухи там нет, просто если вы не будете работать по FIFO, то никто не гарантирует, что у Вас не будет старого товара на складе даже при высокой оборачиваемости. Условно вы всегда будете брать верхние свежие из стека, а нижние старые будут оставаться.
c MinimaJack согласен. У каждого товара есть срок годности и краны не исключение, не смотря на то, что срок годности на складе (без спец смазки и доп. обслуживания) дольше чем у лекарств. Например, у мебели вообще нет срока годности, лежи себе и лежи, но Икея по FIFO работает :)
MinimaJack, спасибо за код. Да, я думал вы предлагаете просто разбивать на отрезки, так как предлагали брать целое при делении. Просто в каких-то примерах количество групп может быть целое при делении, а где-то целое +1. Не вник до конца в Ваше предложение.

Сейчас понимаю, что я упустил сказать об одном условии в тексте статьи, что требовалось не просто разбить на минимальное количество групп, а еще при этом попытаться максимизировать количество элементов в группе. В таком случае последующее сжатие остатков с большим количеством ячеек предполагается (здесь конечно не более чем умственное рассуждение, но практика подтверждает) более качественным.

Поясню на примере. Если в исходный пример добавить такие данные:
данные в коде 1С
ЗаполнитьЗначенияСвойств(Данные.Добавить(), Новый Структура(«Дата, Партия», Дата('20190101'), «1 партия»));
ЗаполнитьЗначенияСвойств(Данные.Добавить(), Новый Структура(«Дата, Партия», Дата('20190130'), «2 партия»));
ЗаполнитьЗначенияСвойств(Данные.Добавить(), Новый Структура(«Дата, Партия», Дата('20190130'), «3 партия»));
ЗаполнитьЗначенияСвойств(Данные.Добавить(), Новый Структура(«Дата, Партия», Дата('20190201'), «4 партия»));
ЗаполнитьЗначенияСвойств(Данные.Добавить(), Новый Структура(«Дата, Партия», Дата('20190301'), «5 партия»));
ЗаполнитьЗначенияСвойств(Данные.Добавить(), Новый Структура(«Дата, Партия», Дата('20190301'), «6 партия»));
ЗаполнитьЗначенияСвойств(Данные.Добавить(), Новый Структура(«Дата, Партия», Дата('20190301'), «7 партия»));
ЗаполнитьЗначенияСвойств(Данные.Добавить(), Новый Структура(«Дата, Партия», Дата('20190304'), «8 партия»));
ЗаполнитьЗначенияСвойств(Данные.Добавить(), Новый Структура(«Дата, Партия», Дата('20190304'), «9 партия»));
ЗаполнитьЗначенияСвойств(Данные.Добавить(), Новый Структура(«Дата, Партия», Дата('20190304'), «10 партия»));

то получится такой ответ:
Вывод 1С
Объединение партий
1 партия
2 партия
3 партия
Конец объединение
Объединение партий
4 партия
5 партия
6 партия
7 партия
Конец объединение
Объединение партий
8 партия
9 партия
10 партия
Конец объединение

Здесь алгоритм в статье вычислит такие группы: {5,6,7,8,9,10},{4,3},{1,2}, то есть максимальное количество элементов в группе равно 6, а простым алгоритмом 4. Чем больше остатков товаров в разных ячейках с одной партией (а такая ситуация очень популярна) то тем больше будет разрыв.

В статью внесу дополнения по условиям. MinimaJack и Ildarovich благодарю за горячее обсуждение.

хорошо, тогда простой алгоритм какое число групп даст по этому рисунку:
4? Т поставил далеко в право, но смысл вроде не меняет.
1. разницы для 0 до Tmax и для от Tmin до Tmax не вижу. От Tmin можно прийти в 0, если от всех дат вычесть Tmin, как бы нормировать.
2. Что Вы понимаете под весом, и почему решили, что он взялся? Количество штук в партии при кластеризации не учитывается.
так это 2 разные ситуации. Они никак не связаны. В первой ситуации, только на 4 группы можно, а во воторой на 3. Или я Вас не так понял?
по всем пунктам отвечать не буду, но по главному поясню. В статье было написано, что разделение партий по ячейкам происходит по причине специфики укладки и хранения товаров. Здесь все просто. Подавляющее большинство кранов имеют рядный способ укладки, то есть 1 ряд, потом другой и так далее. 1 на 1 не поставишь, это я писал в комменте. Положить ряд новых кранов на старые? Но тогда как вы по FIFO старый из под нового вытащите? Перекладывать? Краны встречаются достаточно тяжелые. Я ответил на Ваш вопрос про священную корову?
здесь 4 отрезка с длиной С (прошу прощения, обозначить забыл). Ну а разница дат партий в этих группах менее С, даже визуально. Или Вы другое имели ввиду?
да, Ваш алгоритм очень похож на алгоритм в комментарии. По поводу его я ответил. Да, конечно, этот алгоритм более общий чем решаемая задача.
коммент интересный, спасибо, но вы немного не правы :) Поясню.
1. Если взять такую ситуацию, что промежутков больше C нет, то как вы выражаетесь "]T/С[" является верхней оценкой величины минимального числа партий. То есть больше быть не может, а вот меньше да ]T/С[ — 1. Например, вот рисунок. Здесь Т делится нацело на С.

то есть экономим 1 «кластер», ну и чем больше таких островков будет, тем больше Ваш алгоритм будет ошибаться. Кстати, такую идею мы самую первую и рассмотрели, но отказались :)
2. По месяцу я писал уже в других комментариях, да сейчас они так и делают (если есть существующая партия и разница дней приемлемая, то присваивают не новую, а существующую). Да, это снижает бедствие, но кладовщики не всегда это делают и присваивают новую партию. Иногда случается, что выпускается отдельная партия для клиента, но он не забирает ее всю. Вот и остатки образуются.
3. Да, решение таких задач вместе было бы более интересным и эффективным. Но, увы, там алгоритмы были бы сложнее, а бюджет был ограничен. Решили сделать все проще и прозрачнее.
С точки зрения фарм склада Вы, возможно, правы, с точки зрения специфики склада шаровых кранов — нет. С Warhammer_iii согласен.

Перечислю по пунктам почему не правы:
1. Укладка товаров. Специфика укладки в ячейки у каждого крана разная. Довольно много с горизонтальной укладкой, то есть сначала кладется ряд, а потом на него следующий. Причем 1 на 1 краны редко когда более менее устойчиво поставить можно — упадут (и перегородку, тем более картонную, сломают, так как вес крана небольшого 2-3 кг, а есть и побольше). Для фарм склада такого нет очевидно, там 99% прямоугольники и вес маленький.
2. Логика WMS-систем. Почти во всех WMS системах задаются фиксированное, конечное множество ячеек, а потом программа с ними уже работает. При необходимости ячейки могут добавляться или убавляться или редактироваться их параметры, если например подошел сезон и мы хотим переконфигурировать какую-то зону склада, чтобы, к примеру, увеличить «фронт отбора». НО, если мы используем перегородки, то сколько их может быть? 2,3, 5 или 15?! Что программа сама будет создавать эти ячейки в базе и присваивать им адреса? Кто потом будет клеить (а потом и сдирать) штрих-кода с адресом на такие «картонные ячейки»? Тоже программа? :) По мне так картонная технология какая-то оторванная от реалий WMS-систем. При бумажном учете без системы WMS, такое наверное прокатило бы.
3. Здравый смысл. Вот представьте: товар с одной партией у Вас разместился в 3 разные ячейки, которые находятся на расстоянии 5-10 метров друг от друга. Товар в них практически закончился и в каждой остались мизерные остатки (отбирали каждый раз из разной, чтобы минимизировать пройденное расстояние, FIFO здесь нет, дата то партии одна). Потом приходят еще 2 палета точно такого же товара с другой партией, а других ячеек кроме этих нет. Внимание знатоки, какой вариант лучше?
  • Вариант перегородок. Программа начнет дробить товар в каждую ячейку с учетом ее заполненности, и кладовщик будет тратить уйму времени на перелапачивание этих 2-х палет, ну и, конечно же, ставить картонные перегородки :).
  • Вариант сжатия. Выполнить 1 раз сжатие остатков из 2-х ячеек в одну за 5 минут и потом просто поместить 2 палета в свободные ячейки.


P.S. Прежде чем комменты писать злобные и звонить по коллегам скайпу, вникните в тему :)
да, решений по прослеживаемости действительно много. Для тотальной прослежки можно ввести уникальные идентификаторы на каждую единицу упаковки товара, но это влечет трудности с выполнением складских операций (за прозрачность нужно платить). Если без партий вообще (все в общий котел), то там очень долго и трудно концы искать потом.
отслеживание нужно по большей части для санкций к конкретным сотрудникам, чтобы впредь этого не делали и репутацию компании не портили. А кто именно, определяется по операциям. Получается набор моментов времени, а там уже смотрят камеры если нужно :)
1

Information

Rating
Does not participate
Registered
Activity