Добрый день, коллеги!
Вопрос к сожалению, вчера был удален по причине тэг спама, потому публикую его заново.
Итак, прежде чем задать вопрос расскажу задачу, которую необходимо решить.
Есть n работ, которые нужно оптимально распределить между сотрудниками. Притом есть другие входные параметры, которые накладывают доп. ограничения.
Например, каждый сотрудник может выполнить min & max количество работ в день. Соответственно, при распределении работ нужно это учесть. Также есть рабочий график сотрудника (например, 8 часовой рабочий день + 1 час время на обед). Есть также другие входные параметры, которые могут накладывать доп. ограничения. Например, время необходимое, чтобы достичь места проведения конкретной работы.
Нечто похожее используется в либе jsprit (Java) для решения задачи коммивояжера (принцип ruin and recreate).
Соответственно, вопросы:
- какой алгоритм можно использовать для оптимального распределения задач?
- какие алгоритмы оптимизации лучше подойдут для решения этой задачи? Например, simulated annealing, ruin and recreate и др.
Некий псевдокод:
void optimize(List<Work> works, List<Empolyee> employees, Setting setting) {
}
Setting {
int minWorksNum;
int maxWorksNum;
int workSchedule;
int lunchTime;
}
Empolyee {
List<Work> works;
}
Work {
int arrivalTime;
int workTime;
int priority;
}
К слову, нашел интересные либы, которые потенциально могут помочь решить данную задачу. Буду их пробовать.
Либа -
https://github.com/cicirello/Chips-n-Salsa
Примеры -
https://github.com/cicirello/chips-n-salsa-examples
Еще одна либа -
https://github.com/nsadawi/simulated-annealing