azerphoenix
@azerphoenix
Java Software Engineer

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

Добрый день, коллеги!
Вопрос к сожалению, вчера был удален по причине тэг спама, потому публикую его заново.
Итак, прежде чем задать вопрос расскажу задачу, которую необходимо решить.
Есть 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
  • Вопрос задан
  • 315 просмотров
Решения вопроса 1
azerphoenix
@azerphoenix Автор вопроса
Java Software Engineer
В качестве решения данной задачи была выбрана библиотека OptaPlanner.
https://www.optaplanner.org/
Позволяет решать проблемы оптимизации
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы