Я работаю в издательстве, и я настраиваю одну из наших прессов для "гашения", другими словами, одновременно печатать несколько заданий. Учитывая, что разные задания на печать могут иметь разные количества, и где-то от 1 до 20 рабочих мест, возможно, потребуется рассмотреть одновременно, проблема будет заключаться в том, чтобы определить, какие рабочие места объединяться вместе, чтобы свести к минимуму количество отходов (отходы, количество заданий в заданном наборе, то есть).
Учитывая следующие стабильные данные:
- Все задания равны по размеру - размещение на бумаге не учитывается.
- Существует три "полосы", что означает, что одновременно можно печатать три задания.
- В идеале каждая полоса имеет одно задание. Часть проблемы сводится к минимуму того, сколько полос проходит каждое задание.
- При необходимости одно задание может выполняться на двух дорожках, второе задание на третьей полосе.
- Отходы группировки из заданного набора заданий (пусть, величины из них - x, y и z) будут наивысшим числом за вычетом двух меньших чисел. Поэтому, если x - большее число, отходы группировки будут (x - y) + (x - z). В противном случае отходы производятся путем печати заданий Y и Z (превышение их количества) вплоть до количества X. Отходы группировки будут квалификатором для данного набора, то есть он не может превышать определенное количество, или работа будет просто печатайте в одиночку.
Итак, задан вопрос: как определить, какие наборы заданий сгруппированы вместе, из любого заданного количества заданий, на основе квалификаторов 1) Три одинаковых количества OR 2) Два количества, где один примерно вдвое больше другого, И с целью минимального суммарного сбора отходов по различным наборам.
(Изменить) Информация о количестве: Типичные рабочие места могут составлять от 150 до 350 на иностранных языках или от 500 до 1000 на английских тиражах. Эти данные могут использоваться для настройки некоторых сценариев для алгоритма. Например, допустим, у вас было 5 заданий:
1000, 500, 500, 450, 250
Посмотрев на это, я вижу пару ответов. Очевидно, что (1000/500/500) неэффективен, так как у вас будет отгрузка группы 1000. (500/500/450) лучше, так как у вас будет пустая трата 50, но тогда вы запустите (1000) и ( 250). Но вы также можете запустить (1000/500) с 1000 на двух полосах (500/250) с 500 на двух дорожках, а затем (450).
Что касается компромиссов для минимизации полосы и потерь, мы можем сказать, что любые отходы группы более 200 являются чрезмерными.
(Редактирование конца)
... Само собой разумеется, довольно проблема. (Для меня.)
Я умеренно квалифицированный программист, но у меня мало знакомы с алгоритмами, и я не полностью изучен в математике области. Я I/P пишу какую-то программу грубой силы, которая просто пробует все варианты, пренебрегая любым деревом вариантов, которое, похоже, имеет излишнюю группировку отходов. Однако я не могу не надеяться на более простой и эффективный метод.
Я просмотрел различные веб-сайты, пытаясь узнать больше об алгоритмах в целом и пробив себе путь через символику, но это медленное движение. К сожалению, статьи в Википедии по этому вопросу очень кросс-зависимы, и трудно найти "в". Единственное, что мне удалось найти, это, по-видимому, определение грубого типа алгоритма, который мне нужен: "Эксклюзивная дистанционная кластеризация", одномерная.
Я посмотрел, что, по-видимому, является общепринятым алгоритмом на этом сайте, Bin Packing, но я не смог точно определить, как он будет работать с моей проблемой.