Есть 3 секции, в каждой 10 ячеек из которых товар вкладывается в заказы. Товар вкладывается в заказы неравномерно, какой товар вкладывают чаще чем другой. В примере, "вкладываемость" товаров в заказы между секциями почти равна, однако Секция 1 вкладывает больше товаров, чем другие.
Необходимо уравнять показатель с остальными секциями путем перемещения товара из ячейки одной секции в ячейку другой секции. В примере мы можем переместить товар только один раз и у нас есть пустые ячейки, куда мы можем переместить. Есть ли какой-либо алгоритм, позволяющий найти оптимальный вариант перемещения? Формула, VBA, надстройка "Поиск решения" и т.д.?
В примере привожу оптимальные варианты решения (перенесены товары вручную)
+ есть ограничение на перемещения, за раз можем совершить не более 1-10 перемещений, в рамках которых нужно найти наиболее оптимальный вариант, при котором нагрузка на секции будет наиболее равномерной. Если 2 товара меняются местами - считается за 2 перемещения.
Товарищи, очень надеюсь на Вашу помощь, т.к. наш IT отдел не шибко расторопный (на эту задачу у них в лучшем случае, без преувеличений, уйдет 6-7 месяцев) и загружен кучей других задач, подобные вещи приходится делать на коленках в Excel'е. Спасибо всем, кто сможет помочь.
Указано недостаточно ограничений для подбора оптимального варианта. Есть ли условия для количества занятых ячеек по секциям? Есть ли ограничения на одну ячейку? Нужно ли перемещать только заданные значения в ячейках? Должны ли соблюдаться условия приблизительной равномерности в одной ячейке по разным секциям? В общем, задача пока слишком расплывчата.
Одна ячейка - один товар, не более. (имеется ввиду артикул товара)
Цитата
Влад написал: Нужно ли перемещать только заданные значения в ячейках?
Да, нужно перемещать значения (значения - это уходимость товара, лежащего в ячейке. Уходимость - число раз, которое этот товар вкладывают в заказ за 1 час)
Цитата
Влад написал: Должны ли соблюдаться условия приблизительной равномерности в одной ячейке по разным секциям?
Не совсем понял вопрос, но постараюсь ответить: товар может лежать в любой ячейке на секции.
Поясню, т.к. криво объяснил: Если визуально - в каждой секции есть стеллаж, на стеллаже есть ячейки, в каждой ячейке лежит один вид товара (если он заканчивается - его пополняют). Сотрудник секции получает заказ, берет коробку и вкладывает туда товар, который относится к его секции и передает коробку дальше на другую секцию. Значения в ячейках таблицы Excel - это то, как часто мы вкладываем этот товар в заказ. (какой-то товар мы будем вкладывать в 1 из 1000 заказов, а другой товар мы можем вкладывать в каждый заказ, т.е. 1000 из 1000) Соответственно, если в первой секции в ячейках лежат товары, которые вкладываются часто, а во второй секции редко, то сотрудник, который работает на первой секции будет впахивать, пока сотрудник второй секции - отдыхать. Чтобы все было по честному, мы можем переместить часть товаров таким образом, чтобы среднее число вложений товара в заказ на каждой из секций было более-менее одинаковым. В реальности на секции более 100 артикулов и перемещать их все мы просто не можем, но каждый час мы можем перемещать по 1-10 артикулов и понемногу выравнивать нагрузку.
Такая несправедливость между секциями не выгодна ни нам, ни сотрудникам, т.к. тот, кто больше работает - быстрее устает и чаще косячит, а тот кто отдыхает - получает меньшую премию за выполненные заказы (рассчитывается по кол-ву вложений в заказ с его секции)
Вы объясняете задачу с точки зрения функциональной целесообразности, а вот как с математическим принципом... Из всех имеющихся индивидуальных значений по товарам (кол-во вложений) необходимо подобрать сумму, близкую к средней по секциям - такова задача? Какие-то математические ограничения по секциям, рядам, ячейкам имеются?
Влад написал: Какие-то математические ограничения по секциям, рядам, ячейкам имеются?
В одной секции не может быть больше 10 ячеек. Необходимо предоставить вариант перемещения значений при заданном максимальном количестве перемещений так, чтобы разница между суммой по каждой секции была минимально возможной.
А формировать наборы по ячейкам до 10 можно всегда произвольно? Или получается, есть привязка к предыдущему распределению, от которого нельзя отступить более чем на заданное максимальное кол-во перемещений?
Да, по Вашему алгоритму можно сделать, не проблема. Вопрос насколько точным будет такой алгоритм... Есть другой готовый код для поиска суммы, но если у Вас наборы уже заданы вручную, то подбор под сумму с ограничениями по слагаемым сложновато будет из него сделать. Поэтому наверно попробуем сначала Ваш способ...
Каков масштаб реальной задачи? сколько секций и сколько ячеек? От этого зависит какой алгоритм можно/нужно применять
Есть ли разумные ограничения на "равномерность" и количество перемещений. Например можно сделать не более 10 перемещений и какова будет наилучшее распределение по ячейкам. Либо нужно сделать самое оптимальное распределение (наиболее равномерное) и сколько для этого перемещений нужно сделать. Либо какой то средний вариант.
Ситуация такова, что без остановки процесса, мы зачастую не можем перераспределить более 5-20 позиций. Делаем это в 15-минутные перерывы, которые бывают каждые 2 часа, т.е. 12 раз в сутки. Какой-то склад может позволить себе успеть в перерыв перераспределить 20 артикулов между секциями, какой-то успеет только 5 артикулов. Поэтому необходимо ограничить кол-во перемещений.
Количество секций разнится, на нашем основном складе 20 секций, на самых малых - 5-6 секций. Количество артикулов в каждой секции может быть 500-1500. Количество вложений одного артикула может быть от 1-500 в час. (сколько раз товар заданного артикула вкладывается в заказ)
Поэтому необходимо найти вариант, при котором бригадир сможет каждые 2 часа проверять нагрузку и делать перераспределение товара в пределах установленных ограничений. Делать он это, скорее всего, будет задавая кол-во перемещений от большего к меньшему методом перебора и выбирать подходящий вариант.