Я пытаюсь найти лучшие методы или ресурсы, которые помогут мне решить проблему оптимизации. Проблема состоит в том, чтобы оптимально подобрать участников встречи с предопределенными ролями. Перед собранием участник решает для каждой роли, будет ли он или она:
- активно стремится исполнить роль, если это возможно («А»)
- хочет исполнить эту роль, но не очень к этому относится ("W")
- не желает исполнять роль ("U").
Например, возможная входная матрица будет следующей:
Цель состоит в том, чтобы максимально увеличить количество совпадений для участников с ролями, для которых они отметили «A», при следующих ограничениях:
- Все роли заняты ровно одним участником
- Матчи, в которых участник отмечен знаком «U», запрещены.
Для этого примера оптимальным решением будет следующее, где 4/5 ролей заполняются с использованием совпадений «А».
Кто-нибудь знает, есть ли лучший способ решить такую проблему, чем грубая сила (которая может очень быстро стать невыполнимой для больших матриц)? Я открыт для общих предложений по алгоритмам оптимизации, которые я бы реализовал сам (например, запретный поиск, генетические алгоритмы, метод ветвей и границ и т. д.), или даже для указателей на функциональность в существующем пакете, таком как OptaPlanner.
Спасибо!