Кстати, выше я, видимо, ошибочно говорил о минимизации дисперсии значений не для сотрудников (
значений), а для цехов (
значений).
Угу. Таким образом, минимизации подлежит следующая величина:
где
Посмотрим, как изменится величина
при переходе
рабочих из цеха номер
в цех номер
, если я нигде не наврал, то
Есть оптимальное значение количества переходящих рабочих (в смысле максимального уменьшения дисперсии при переходе рабочих из цеха
в
), снова, если не наврано:
Оно не обязано быть целым и в поисках оптимума имеет смысл проверить округленные в обе стороны значения.
Дальше я бы как-то так действовал:
1. В качестве начального приближения раскидал бы
рабочих по цехам по описанному в предыдущих сообщениях методу;
2. Повычислял бы значений
и соответствующих
для пар соседних по величине нагрузки
цехов (а может быть, для верности, для всех пар цехов; их явно немного, можно себе позволить);
3. Произвел бы перевод рабочих из цеха в цех, начиная с самых больших по модулю
и контролируя, что один и тот же цех не подвергается миграции более одного раза;
4. Верил бы, что процесс сойдется к глобальному минимуму
и возвращался на шаг 2 до тех пор, пока возможность оптимизации есть; вера-верой, но для избегания бесконечного цикла поставил бы максимально допустимое количество возвращений на шаг 2;
5. Отлаживал бы алгоритм на каверзных примерах и размышлял как его улучшить.