Dieses Projekt nutzt Integer-Programmierung, um Squad Building Challenges (SBCs) zu lösen. Das Optimierungsproblem wird mit dem Google CP-SAT-Solver gelöst. Dieser Ansatz bietet umfangreiche Anpassungsmöglichkeiten sowie die Möglichkeit, die Lösungsoptimalität zu bestimmen.
The goal is to obtain the squad with the minimum total cost.
Um den Clubdatensatz herunterzuladen, verwenden Sie die Erweiterung (Version >= 1.1.0.3).
Die Eingaben zu den verschiedenen Einschränkungen finden Sie in der input.py
. Konfigurieren Sie die entsprechenden Eingaben für jede SBC-Einschränkung in input.py
( L43-77
und L28-30
), navigieren Sie dann zu optimize.py (L581-615)
und kommentieren Sie die entsprechende Zeile basierend auf den SBC-Anforderungen aus. Vergessen Sie auch nicht, die formation
in input.py
festzulegen!
Wenn die Anforderung beispielsweise Same League Count: Max 5
oder Max 5 Players from the Same League
lautet, dann setzen Sie MAX_NUM_LEAGUE = 5
( L53
in input.py
) und kommentieren Sie dann model = create_max_league_constraint(df, model, player, map_idx, players_grouped, num_cnts)
( L589
in optimize.py
).
Wenn die Anforderung Nations: Max 2
lautet, setzen Sie NUM_UNIQUE_COUNTRY = [2, "Max"]
( L62
in input.py
) und kommentieren Sie dann model = create_unique_country_constraint(df, model, player, map_idx, players_grouped, num_cnts)
( L598
in „ optimize.py
).
Wenn Sie Duplikate priorisieren, indem Sie ( L28-L30
) in input.py
festlegen, sollte model = prioritize_duplicates(df, model, player)
in optimize.py
( L615
) unkommentiert sein.
Wenn der SBC beispielsweise at least 3 players from Real Madrid and Arsenal combined
und at least 2 players from Bayern Munich
haben möchte, dann setzen Sie CLUB = [["Real Madrid", "Arsenal"], ["FC Bayern"]]
und NUM_CLUB = [3, 2]
( L43-44
in input.py
) und dann auskommentieren model = create_club_constraint(df, model, player, map_idx, players_grouped, num_cnts)
( L581
in optimize.py
).
Wenn der SBC mindestens 6 Rare
und 8 Gold
erfordert, setzen Sie RARITY_2 = ["Rare", "Gold"]
und NUM_RARITY_2 = [6, 8]
in input.py (L71-72)
und kommentieren Sie dann model = create_rarity_2_constraint(df, model, player, map_idx, players_grouped, num_cnts)
( L603
in optimize.py
).
Einschränkungen wie Chemistry
( optimize.py
, L620
) oder FIX_PLAYERS
( optimize.py
, L623
) erfordern keine explizite Aktivierung. Wenn Chemistry
nicht erforderlich ist, setzen Sie es in input.py (L79)
auf 0
. Wenn kein Player repariert werden muss, lassen Sie FIX_PLAYERS
in input.py (L12)
leer.
Das objective
wird in optimize.py
( L626
) festgelegt. Die Art des objective
kann in input.py
( L20-21
) geändert werden. Derzeit besteht das Ziel darin, die total cost
zu minimize
.
Für weitere Informationen sollten zusätzliche Parameter in input.py
überprüft werden.
Geben Sie in main.py
den Namen des club dataset
in L57
an. Der Datensatz wird in preprocess_data_2
innerhalb von main.py
vorverarbeitet. Zusätzliche Filter können auf ähnliche Weise wie die vorhandenen hinzugefügt werden.
Derzeit sind die Eingaben zur Lösung dieser SBC-Herausforderung vorgesehen. Die endgültige Spielerliste wird in die Datei output.xlsx
geschrieben. Um das Programm auszuführen, führen Sie einfach py main.py
aus, nachdem Sie die erforderlichen Abhängigkeiten installiert haben. Hinweis: Dies scheint ein sehr schwieriger SBC zu sein und daher musste der Bewertungsfilter in main.py (L41)
aktiviert werden.
Führen Sie pip3 install -r requirements.txt
aus, um die erforderlichen Abhängigkeiten zu installieren.
Google OR-Tools v9.8
Python 3.9
Pandas und openpyxl
https://github.com/ThomasSteere/Auto-SBC
https://github.com/bartlomiej-niemiec/eafc-sbc-solver
https://github.com/kosciukiewicz/sbc-solver
Vielen Dank GregoryWullimann
dass Sie den Modellerstellungsprozess wahnsinnig beschleunigt haben.
Vielen Dank, Jacobi from EasySBC
für deine Hilfe bei der squad_rating_constraint
.
Vielen Dank GeekFiro
, dass Sie den Solver getestet und wertvolles Feedback und Diskussionen gegeben haben.
Vielen Dank an fifagamer#1515
und Frederik
für die Bereitstellung Ihrer Vereinsdatensätze ( Real_Madrid_FC_24.csv
und Frederik FC_24.csv
) und Ihr Feedback.
Vielen Dank, ckalgos
, dass Sie die Erweiterung zum Herunterladen des Clubdatensatzes erstellt haben.
Vielen Dank drRobertDev
für die Bereitstellung des Datensatzes Fc25Players.csv
.
Vielen Dank an alle, die Probleme im Repo geöffnet und ihr Feedback gegeben haben.
Vielen Dank an alle Leute, die den Reddit-Beitrag kommentiert haben.
Vielen Dank an FutDB für die Bereitstellung der API, die es mir ermöglichte, den Solver ursprünglich auf 10.000 Spielern zu testen ( input.csv
).