Мне неизвестна литература по таким проблемам. Я предполагаю, что есть некоторые, так как теория массового обслуживания - большая академическая область, и это не походит на смехотворно сложную ситуацию. Имейте в виду, тот факт, что вы заботитесь о средней задержке, а не о задержке в худшем случае или латентности N-го процентиля, может поставить вас в меньшинство.
Мой первый инстинкт заключается в том, что, поскольку кажется, что вокруг много рабочих мест, хорошее решение будет иметь несколько «гибких» работников, постоянно работающих. Это набор работников, которые между ними могут выполнять большинство типов общих заданий с приемлемой задержкой. Чем меньше задержка, тем больше ресурсов в этом наборе и тем больше времени они проводят в режиме ожидания. Кроме того, чем более «пакетным» будет ваш ввод (при условии, что пакеты непредсказуемы), тем больше времени простоя вам потребуется, чтобы предотвратить высокую задержку во время пакетов.
Затем в двух случаях вы нанимаете дополнительных «специализированных» работников:
1) Редкий тип работы, при которой ваш нынешний набор сотрудников может работать только при высоких затратах времени или нет вообще. Таким образом, вы нанимаете (грубо говоря) любого, кто может сдвинуть его, а затем максимально использовать оставшуюся часть своей очереди.
2) Нет такой работы, но вы найдете возможность нанять кого-то, кто, как оказалось, может взять какую-то комбинацию заданий из текущей очереди, и делать это дешевле, чем ваши текущие сотрудники, но не выходя из Текущие нанимает без дела. Таким образом, вы нанимаете этот ресурс.
Что касается фактического алгоритма: почти наверняка невозможно найти лучшее решение в вычислительном отношении, поэтому правильный ответ зависит от ресурсов обработки, а вы смотрите на эвристику и решение частичных задач. Пока все, кого вы нанимаете, заняты, и вы не можете нанимать кого-либо еще, не вызывая значительного простоя в какой-то момент в будущем, вы, вероятно, находитесь рядом с хорошим решением и где-то рядом с «наибольшим преимуществом за доллар» «точка компромисса между задержкой и стоимостью. Найм большего количества ресурсов после этого дает уменьшающуюся отдачу, но это не означает, что вы не готовы делать это за указанную задержку и / или указанный бюджет.
Но это зависит от того, как выглядят входящие вакансии: если у вас есть ресурс, который может выполнять только один тип работы, и эта работа выполняется только один раз в день / неделю / год, то, вероятно, лучше нанять их один раз в день, чем ждать, когда у вас будет достаточно этой работы, чтобы заполнить свой минимально возможный временной интервал (именно поэтому пожарные проводят большую часть своего времени, играя в карточные игры, тогда как машинистки проводят большую часть своего времени, печатая. Всегда достаточно набирать текст, чтобы сохранить хотя бы одну машинистку заняты, но пожары случаются редко. Кроме того, мы не хотим, чтобы при пожарах использовалось решение «большинство ударов за доллар», нам нужна более низкая задержка, чем это). Так что, возможно, есть возможность настроить алгоритм для вашего конкретного набора ресурсов и схемы входящих заданий, если вы решаете один конкретный случай проблемы, а не пишете общее программное обеспечение для планирования.
Плюс, предположительно, если ресурсы - люди, вы не можете гарантировать, что найм будет успешным. Они не будут сидеть без дела весь день, получая зарплату, когда случается, что работа идет поминутно, да?