Есть много грузов разных весов от 1 до 1E7. Большинство ближе к 1Е3.
И есть N одинаковых вагонов, по которым эти грузы надо распределить так, чтобы загрузка вагонов по массе
варьировалась минимально.
Думал, надо стремиться к среднему арифметическому (суммарная масса/N) для каждого вагона. Но насколько близко реально приблизиться с имеющимся набором – тут я приехал в тупик.
Похоже на одномерную
задачу об упаковке. Грузы/вагоны – просто для иллюстрации. На самом деле задачи и потоки. Помогите с алгоритмом.
Upd. уточнение/усложнение, которое не есть путь к истине. Суть моего вопроса – выше. Но в целом задача немного иная. Эта задача в моей системе встречается дважды:
- первый – это разовый запуск многопоточного исполнителя. Тут желательно его загрузить так, чтобы все потоки закончились как можно раньше – для этого нужно раскидать грузы по потокам как можно равномернее, без отдельных «хвостов» в одном потоке и простаивающими остальными.
- второй – общее расписание. Эти «вагоны» – регулярные запуски исполнителя из предыдущего пункта на оси времени. Весь поезд – цикл, в течение которого каждый «груз» должен быть отправлен. Тут преследую две цели: соблюдать примерно регулярный интервал в запуске каждого груза, и равномерно распределить нагрузку по всему составу.
По второму пункту подробнее. У груза есть три параметра: уже упомянутая масса; старт – время («номер вагона»), когда его уже можно отправлять; и цель – время («номер вагона»), когда его в идеале нужно отправить.
Отправленный груз обновляет своё расписание: через T часов его нужно отправлять снова.
В ряд грузов иногда «подбрасывают дров»: возникают пики нагрузки, которые со временем должны размазаться по времени, чтобы вагоны опять становились равномерно загруженными. Такая «живая» автобалансирующая система.
Наверняка задача относительно типичная, я просто не знаю, где искать описание такого алгоритма.