Доброго времени суток всем! Столкнулся с комбинаторной задачей и сижу над ней уже 3 дня. Задача в следующем: Из заданного списка продуктов разных категорий нужно разложить количество этих продуктов в варианты пакетов. В каждом варианте должно быть по 6 категорий равного количества продуктов. Цель: Собрать заданное количество пакетов в ячейке L1. Вариантов может быть много, главное разложить все продукты в пакеты. При сборке следующего варианта должен учитываться остаток с предыдущего варианта сборки. Ниже описываю пример предварительно отфильтровав продукты по категориям: Дано: Как должно быть: Вручную собирать варианты занимает около двух дней, поэтому возникла необходимость написать макрос который при нажатии кнопки автоматизирует процесс. Думаю как это все сделать но пока в голову ничего не приходит. Буду очень признателен если кто-нибудь откликнется.
Доброго времени суток всем! Столкнулся с комбинаторной задачей и сижу над ней уже 3 дня. Задача в следующем: Из заданного списка продуктов разных категорий нужно разложить количество этих продуктов в варианты пакетов. В каждом варианте должно быть по 6 категорий равного количества продуктов. Цель: Собрать заданное количество пакетов в ячейке L1. Вариантов может быть много, главное разложить все продукты в пакеты. При сборке следующего варианта должен учитываться остаток с предыдущего варианта сборки. Ниже описываю пример предварительно отфильтровав продукты по категориям: Дано: Как должно быть: Вручную собирать варианты занимает около двух дней, поэтому возникла необходимость написать макрос который при нажатии кнопки автоматизирует процесс. Думаю как это все сделать но пока в голову ничего не приходит. Буду очень признателен если кто-нибудь откликнется.audrey
Как вы предполагаете выполнить это требование, если Product3 = 78318. Если вы его разложите в любые комбинации, то всё равно ближайший меньший остаток от Product1 будет 5 681, так как оговаривается одинаковое количество. Тут уже пробегал, видимо ваш коллега по учёбе. Так и не смог детализировать - что такое вариант пакета. Пусть в пакете по 1 штуке каждого из продуктов, тогда условие выполняется
Как вы предполагаете выполнить это требование, если Product3 = 78318. Если вы его разложите в любые комбинации, то всё равно ближайший меньший остаток от Product1 будет 5 681, так как оговаривается одинаковое количество. Тут уже пробегал, видимо ваш коллега по учёбе. Так и не смог детализировать - что такое вариант пакета. Пусть в пакете по 1 штуке каждого из продуктов, тогда условие выполняется
anvg, Добрый день. Изначально задача поставлена так: избавиться от товара посредством сюрприз-пакетов, в котором может быть все что угодно но 6 штук из каждой категории (продукты я пометил Кодами, а Категории - Product1...Product6). Это своего рода "кот в мешке" - мы не знаем что может быть внутри но знаем, что в каждом пакете может быть суммарно 6 категорий продуктов (например, в одном пакете уместили 1 хлеб, 1 яблоко, 1 банан, 1 кружку, 1 компас, 1 наручные часы и таких пактов несколько тысяч). Мы смотрим на объем товара и прикидываем что всего товара хватит на например 70 000 пакетов. И эти пакеты мы раскидываем по вариантам. Почему по вариантам? потому что одного варианта пакета может не хватить так как каждого товара разное количество. Почему файл сделан таким образом? - потому что сборочная линия видит сколько нужно пакетов и сколько в тот или иной вариант положить продуктов разных кодов. Пример: в файле 9501 продуктов с кодом 4065 категории Product1, 9382 продуктов с кодом 5454 категории Product2, 9319 продуктов с кодом 7462 категории Product3, 9643 продуктов с кодом 2950 категории Product4, 9966 продуктов с кодом 9171 категории Product5 и 9584 продуктов с кодом 8504 категории Product6. Я беру минимум из этих цифр - 9319 штук кода 7462 (в файле округлял до 9000) и начинаю формировать первый вариант пакета в котором будет 9319 продуктов из каждой категории. Ага, код с продуктом 7462 закончился, но вот продуктов с другими кодами остались остатки, например продукта с кодом 5454 осталось 9382 - 9319 = 63 штуки. Так вот из этих 63 штук я ищу другие продукты с таким же количеством, но опять же из разных категорий, и формирую следующий вариант пакета. И так далее пока не кончится товар, понятное дело что останутся излишки которые в равных долях не уместить в пакет, но в реальности куда больше объема товара и важно начинать с больших объемов а излишки из десятков штук можно сформировать вручную или дождаться пополнения товара. Важно чтобы в каждом пакете, повторюсь их может быть несколько тысяч, было по одной штуке продукта из каждой категории, то есть как в примере приведенном выше - 1 хлеб, 1 яблоко, 1 банан, 1 кружку, 1 компас, 1 наручные часы). Надеюсь теперь все стало понятно ))
anvg, Добрый день. Изначально задача поставлена так: избавиться от товара посредством сюрприз-пакетов, в котором может быть все что угодно но 6 штук из каждой категории (продукты я пометил Кодами, а Категории - Product1...Product6). Это своего рода "кот в мешке" - мы не знаем что может быть внутри но знаем, что в каждом пакете может быть суммарно 6 категорий продуктов (например, в одном пакете уместили 1 хлеб, 1 яблоко, 1 банан, 1 кружку, 1 компас, 1 наручные часы и таких пактов несколько тысяч). Мы смотрим на объем товара и прикидываем что всего товара хватит на например 70 000 пакетов. И эти пакеты мы раскидываем по вариантам. Почему по вариантам? потому что одного варианта пакета может не хватить так как каждого товара разное количество. Почему файл сделан таким образом? - потому что сборочная линия видит сколько нужно пакетов и сколько в тот или иной вариант положить продуктов разных кодов. Пример: в файле 9501 продуктов с кодом 4065 категории Product1, 9382 продуктов с кодом 5454 категории Product2, 9319 продуктов с кодом 7462 категории Product3, 9643 продуктов с кодом 2950 категории Product4, 9966 продуктов с кодом 9171 категории Product5 и 9584 продуктов с кодом 8504 категории Product6. Я беру минимум из этих цифр - 9319 штук кода 7462 (в файле округлял до 9000) и начинаю формировать первый вариант пакета в котором будет 9319 продуктов из каждой категории. Ага, код с продуктом 7462 закончился, но вот продуктов с другими кодами остались остатки, например продукта с кодом 5454 осталось 9382 - 9319 = 63 штуки. Так вот из этих 63 штук я ищу другие продукты с таким же количеством, но опять же из разных категорий, и формирую следующий вариант пакета. И так далее пока не кончится товар, понятное дело что останутся излишки которые в равных долях не уместить в пакет, но в реальности куда больше объема товара и важно начинать с больших объемов а излишки из десятков штук можно сформировать вручную или дождаться пополнения товара. Важно чтобы в каждом пакете, повторюсь их может быть несколько тысяч, было по одной штуке продукта из каждой категории, то есть как в примере приведенном выше - 1 хлеб, 1 яблоко, 1 банан, 1 кружку, 1 компас, 1 наручные часы). Надеюсь теперь все стало понятно ))audrey
Несколько стало по понятнее, только тогда зачем количество по категориям а не количество по кодам упомянуто в стартовом сообщении, плюс, не очень удобная структура? Версия на Power Query - устроит?
Несколько стало по понятнее, только тогда зачем количество по категориям а не количество по кодам упомянуто в стартовом сообщении, плюс, не очень удобная структура? Версия на Power Query - устроит?anvg
anvg, К сожалению Power Query не подойдет. Компания придерживается стандартных средств, то есть Microsoft Office. А установить что-то дополнительно уйдет год-два, а сроки очень сжатые (( Разрешается стандартный VBA с исходными данными на листе.
anvg, К сожалению Power Query не подойдет. Компания придерживается стандартных средств, то есть Microsoft Office. А установить что-то дополнительно уйдет год-два, а сроки очень сжатые (( Разрешается стандартный VBA с исходными данными на листе.audrey
на VBA не интересно, только время терять. Вот тут ваш коллега тоже по 6 расскладывает
Цитата
задачи об упаковке рюкзака
тут и жадного алгоритма достаточно. Выложу всё же вариант на Power Query. Несколько лобовой. На VBA можно было бы сделать и поменьше вариантов пакетов. P. S. А у ТС заявлена версия в профиле 2016. Power Query в нём уже часть Excel
на VBA не интересно, только время терять. Вот тут ваш коллега тоже по 6 расскладывает
Цитата
задачи об упаковке рюкзака
тут и жадного алгоритма достаточно. Выложу всё же вариант на Power Query. Несколько лобовой. На VBA можно было бы сделать и поменьше вариантов пакетов. P. S. А у ТС заявлена версия в профиле 2016. Power Query в нём уже часть Excel anvg