Я думаю об использовании целочисленного программирования для создания оптимальной комбинации футболистов, составляющих команду.
Хотя сама проблема проста, мне сложно сформулировать эффективное ограничение для получения права на должность.
Я искал в stackoverflow варианты классических задач целочисленного программирования и нашел временное решение, но хочу проверить, эффективно ли текущее.
Задача
Выберите 11 игроков для футбольной (футбольной) команды из конечного набора потенциальных игроков.
Команда состоит из 11 слотов: 5 атакующих, 5 защитников и 1 вратарь. .
Каждая роль имеет свой собственный пул подходящих игроков.
(например, вратарей можно выбрать только из группы игроков, у которых есть перчатки)
Каждому игроку назначается «оценка навыков», которая отражает их навыки
Целевая функция
Максимизация: сумма всех 11 очков навыков игроков.
Ограничения
- Все 11 слотов должны быть заполнены хотя бы одним игроком.
- 1 игрок может занимать только 1 слот
- Каждый слот должен быть заполнен игроком, имеющим право на эту роль.
Мое временное решение
Let xij: player i in consideration for slot j (j=1, 2,..., 11, 1 <= i <= n)
and w: n x 1 weight matrix representing skill score for player i
1. sum_j(xij) == 1 for each slot j
2. 0 <= sum_i(xij) <= 1 for each player i
3. 0 <= xij <= 1 if player i is eligible for slot j, == 0 otherwise
maximize sum(wTx)
Я еще не мог придумать элегантный способ ввести в действие 3, поэтому сейчас мой ответ - жестко закодировать каждую ячейку как 0.
Я планирую использовать библиотеку целочисленного программирования на Python (cvxpy или PuLP).
Приведет ли текущий дизайн к каким-либо проблемам с конвергенцией или временем вычислений?
Есть ли более эффективный способ смоделировать проблему?
Примечания
- Для простоты предположим, что, хотя игрок может быть кандидатом на несколько ролей, его очки навыков не меняются в зависимости от роли.
- Изменится ли формулировка задачи, если очки навыков игроков изменятся в зависимости от их взаимодействия с другими игроками? Я думаю, что простое расширение матрицы x на nC2 возможных взаимодействий могло бы сработать, но мне любопытно, есть ли лучшие решения.