@lordycreator

Как автоматически распределить нагрузку на сотрудников в каждый конкретный день?

Привет! Очень хотелось бы попросить помощи у знающих с решением такой непростой задачи:

Есть определённое количество сотрудников, у каждого сотрудника свой график работы (либо 5/2, либо 2/2). В разные смены работает разное количество людей. У каждого человека на смену определяется нагрузка (условно, кто-то принимает звонки, кто-то совершает звонки). Хочется, чтобы отталкиваясь от нужных значений в количестве необходимых людей на каждой из нагрузок в день, Excel проставлял в пустые ячейки (дни) значение, которое соответствовало бы нагрузке на конкретный день.

Условно, мы сообщаем Экселю, что 01.01.2022 нам нужно, чтобы 10 человек принимало звонки, а 7 совершало.
Эксель видит, что в этот день у нас работает всего 12 человек, это количество мы посчитали на другом листе.
Эксель автоматически проставляет всем 12 людям нагрузки рандомно, но пытается сделать это равномерно и максимально приближенно к заданным пропорциям.
При всём этом хотелось бы учитывать, что каждый сотрудник не может быть на одной и той же нагрузке в месяце больше какого-то количества раз.

Например:

Нам нужно, чтобы каждый день 25 человек совершало звонки и 15 принимало входящие.

Мы задаём эти значения, как целевые

Excel проставляет отталкиваясь от целевых значений в каждую дату месяца нагрузку на каждого сотрудника, при этом максимально равномерно.

Например, если в какой-то день сотрудников не 25+15, а 20+10, то Excel распределит нагрузку в этот день исходя из таких ресурсов, но максимально приближенно к цели, в приближенных пропорциях.

Таким образом каждый месяц мы автоматически назначаем для каждого сотрудника нагрузку на каждую конкретную смену, при этом пытаемся соответствовать целевым значениям и делаем так, чтобы количество смен одного типа за месяц у каждого сотрудника не превышало определенного количества

Понимаю, что задача очень непростая и возможно даже нереализуема, но попытаю счастье (:
Спасибо!
  • Вопрос задан
  • 494 просмотра
Решения вопроса 1
hint000
@hint000
у админа три руки
Непонятны только входные данные насчёт 5/2 и 2/2 - это ведь разное количество часов за смену.
Есть ли какая-то связь между длительностью смены и видом работы (давайте не будем называть это "нагрузкой", потому что такой термин создаёт путаницу смыслов)? Во всем вопросе ни разу не упомянуто количество рабочих часов, поэтому создаётся впечатление, что в рассматриваемом случае 25+15 не важно, 25 человек совершают звонки 8-часовую смену, или 25 человек совершают звонки 12-часовую смену, или любой промежуточный вариант.

Если отвлечься от разных рабочих смен (только учитывать разное количесво работников на день), то алгоритм очень простой Мозг понадобится лишь в коротенькие периоды, остальное - тупой кодинг.
k = количество видов работ
i=1..k
A = доступное количесво работников на день
W[i] это желаемая цель на день по видам работ
B = sum W[i]
V[i] это реализуемая цель
грубо V[i] = W[i] * A / B; тут важно: не спешить округлять "полтора землекопа" до int(W[i] * A / B); нужно напрячь мозг не более, чем на полторы минуты и более правильный способ округления станет очевиден (но поля этой книги слишком малы, чтоб его описать. Хе-хе).
Следующий этап.
Для каждого работника P[j] (j=1..A) считаем статистику за предыдущий период (с начала месяца или как захотим), сколько он занимался i-й работой. Получаем S[i,j].
Создаём k списков L работников, в каждом A работников. Сортируем каждый список L[i] по возрастанию S [i,j] (возможно, тут нужно на несколько минут включить мозг просто для повышения внимательности, т.к. сортировка выглядит чуточку необычно).
Последний этап.
Дёргаем из начала списка работника и назначаем на соответствующий вид работы (поскольку список уже отсортирован, то человек занимался этой работой меньше других). При этом удаляем этого работника из всех k списков. И уменьшаем W[i]. Повторяем, пока списки не пустые и пока W[i]>0. Для ещё более "гладкого" распределения последний раз на сегодня включаем мозг и перед каждым назначением сравнимаем отношения S[i,j] для элементов из начала и из конца каждого списка; в зависимости от результата сравнения выбираем, какой из списков будем дёргать на этом шаге (конкретную формулу не пишу, т.к. у мозга законный выходной).
Готово.
Возвращась к разным сменам: их учёт может усложнить алгоритм в полтора-два раза. Но сильно зависит от точных формулировок хотелок по этим сменам.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы