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