Сделайте некоторую бухгалтерию о уже принятых вызовах и рассчитайте их распределение по n строкам. Это дает вам n процентных значений (ваше уже достигнутое распределение), которые можно сравнить с n процентами, которые вы хотите достичь. Каждый раз, когда поступает новый вызов, назначьте этот вызов на линию с наибольшим отклонением от целевого значения (обратите внимание, что, если вы не попали точно в данное распределение, всегда есть линия, на которой пока слишком мало вызовов, по сравнению с целевым распределением).
Например: после назначения первого вызова на линию 1:
total calls line1 total calls line2 perc.line 1 perc. line 2
1 0 100% 0%
*above 60% *below 40% <- next call to 2
1 1 50% 50%
* below 60%: *above40% next to line1
2 1 66% 33%
*above 60% *below 40% <- next to line 2
2 2 50% 50%
* below 60%: *above40% next to line1
3 2 60% 40%
* both hit the mark: next call arbitrary
4 2 66% 33%
*above 60% *below 40% <- next to line 2
4 3 57.1% 42.85%
*below 60% *above 40% <- next to line 1
...
РЕДАКТИРОВАТЬ: этот подход может быть улучшен не путем использования абсолютной разницы, а путем выбора линии, которая минимизирует сумму квадратов всех отклонений. Это также даст вам лучший результат, если вы точно достигнете целевых значений.