Кстати, выше я, видимо, ошибочно говорил о минимизации дисперсии значений не для сотрудников (

значений), а для цехов (

значений).
Угу. Таким образом, минимизации подлежит следующая величина:

где

Посмотрим, как изменится величина

при переходе

рабочих из цеха номер

в цех номер

, если я нигде не наврал, то

Есть оптимальное значение количества переходящих рабочих (в смысле максимального уменьшения дисперсии при переходе рабочих из цеха

в

), снова, если не наврано:

Оно не обязано быть целым и в поисках оптимума имеет смысл проверить округленные в обе стороны значения.
Дальше я бы как-то так действовал:
1. В качестве начального приближения раскидал бы

рабочих по цехам по описанному в предыдущих сообщениях методу;
2. Повычислял бы значений

и соответствующих

для пар соседних по величине нагрузки

цехов (а может быть, для верности, для всех пар цехов; их явно немного, можно себе позволить);
3. Произвел бы перевод рабочих из цеха в цех, начиная с самых больших по модулю

и контролируя, что один и тот же цех не подвергается миграции более одного раза;
4. Верил бы, что процесс сойдется к глобальному минимуму

и возвращался на шаг 2 до тех пор, пока возможность оптимизации есть; вера-верой, но для избегания бесконечного цикла поставил бы максимально допустимое количество возвращений на шаг 2;
5. Отлаживал бы алгоритм на каверзных примерах и размышлял как его улучшить.