Я пытаюсь создать скрипт R для фэнтези-футбола (правильный футбол в Великобритании, а не рука яйцо :-)), где я могу ввести список игроков в csv и он будет плевать из каждой комбинации из 11 игроков, которые отвечают различным ограничениям.R - Сочетания кадра данных с ограничениями
Вот мой пример dataframe:
df <- read.csv("Filename.csv",
header = TRUE)
> print(df)
Name Positon Team Salary
1 Eric Dier D TOT 9300000
2 Erik Pieters D STO 9200000
3 Christian Fuchs D LEI 9100000
4 Héctor Bellerín D ARS 9000000
5 Charlie Daniels D BOU 9000000
6 Ben Davies D TOT 8900000
7 Federico Fernández D SWA 8800000
8 Per Mertesacker D ARS 8800000
9 Alberto Moreno D LIV 8700000
10 Chris Smalling D MUN 8700000
11 Seamus Coleman D EVE 8700000
12 Jan Vertonghen D TOT 8700000
13 Romelu Lukaku F EVE 12700000
14 Harry Kane F TOT 12500000
15 Max Gradel F BOU 11900000
16 Alexis Sánchez F ARS 11300000
17 Jamie Vardy F LEI 11200000
18 Theo Walcott F ARS 10700000
19 Olivier Giroud F ARS 10700000
20 Wilfried Bony F MCI 10000000
21 Kristoffer Nordfeldt G SWA 7000000
22 Joe Hart G MCI 6800000
23 Jack Rose G WBA 6600000
24 Asmir Begovic G CHE 6600000
25 Mesut Özil M ARS 15600000
26 Riyad Mahrez M LEI 15200000
27 Ross Barkley M EVE 13300000
28 Dimitri Payet M WHM 12800000
29 Willian M CHE 12500000
30 Bertrand Traore M CHE 12500000
31 Kevin De Bruyne M MCI 12400000
И ограничения заключаются в следующем:
1) Общая зарплата каждого 11 игроков очереди не может превышать 100000000
2) Там может только быть максимум четырьмя игроками из одной команды. Например. четыре игрока из «CHE» («Челси»).
3) Существует ограничение на количество игроков в каждой линейке из 11 игроков из каждой позиции. Там может быть:
1 G (вратарь), от 3 до 4 D (защитник), от 3 до 5 М (полузащитник), от 1 до 3 F (вперед)
я хотел каждую комбинацию 11 игрока, который соответствует вышеуказанным противопоказаниям, которые должны быть возвращены. Заказ не важен (например, 1,2,3 считается таким же, как 2,1,3, и его нельзя дублировать), и игрок может появиться в нескольких списках.
Я провел немало исследований и поиграл, но, похоже, с этим не может быть. Я новичок в Р. Я не ожидаю, что кто-нибудь приглушит это для меня, но если кто-то может указать новичку, как я, в правильном направлении, это будет очень признательно.
Спасибо.
Что вы пробовали для каждого ограничения? где код? – dickoa
Я не знаю, сколько у вас игроков в вашем CSV-файле, но, надеюсь, вы поймете, что выбор __all possible__ наборов из 11 вещей из 31, невзирая на порядок, дает вам 84 672 315 комбинаций для тестирования. Здесь нет простого выхода. Вы должны построить алгоритм, который строит ваши команды в соответствии с вашими спецификациями, и я не думаю, что какая-либо библиотека будет особенно полезной здесь. – kliron
@kliron: проблема, описанная автором, является классической проблемой удовлетворения ограничений. Эти проблемы распространены в ИИ. Первая часть вашего ответа предполагает, что проблема решена с использованием методов силы бит. Вторая часть указывает на правильное направление. Фактически, они могут быть решены с использованием любого решателя CSP, который делает какую-то конструкцию умного решения. К счастью, существует множество алгоритмов и библиотек. Во-первых: на основе поиска, которые я бы не реализовал/не ожидал в R. Вторичные алгоритмы, которые превращают проблему в задачу оптимизации, в основном набор линейных уравнений. – CAFEBABE