Ce projet utilise la programmation en nombres entiers pour résoudre les défis de création d'équipes (SBC). Le problème d'optimisation est résolu à l'aide du solveur Google CP-SAT. Cette approche offre des capacités de personnalisation étendues, ainsi que la possibilité de déterminer l'optimalité de la solution.
The goal is to obtain the squad with the minimum total cost.
Pour télécharger le jeu de données du club, utilisez l'extension (version >= 1.1.0.3).
Les entrées des différentes contraintes peuvent être trouvées dans input.py
. Configurez les entrées appropriées pour chaque contrainte SBC dans input.py
( L43-77
et L28-30
), puis accédez à optimize.py (L581-615)
et décommentez la ligne appropriée en fonction des exigences SBC. N'oubliez pas non plus de définir la formation
dans input.py
!
Par exemple, si l'exigence est Same League Count: Max 5
ou Max 5 Players from the Same League
, définissez MAX_NUM_LEAGUE = 5
( L53
dans input.py
), puis décommentez model = create_max_league_constraint(df, model, player, map_idx, players_grouped, num_cnts)
( L589
dans optimize.py
).
Si l'exigence est Nations: Max 2
, définissez NUM_UNIQUE_COUNTRY = [2, "Max"]
( L62
dans input.py
), puis décommentez model = create_unique_country_constraint(df, model, player, map_idx, players_grouped, num_cnts)
( L598
dans optimize.py
).
Si vous donnez la priorité aux doublons en définissant ( L28-L30
) dans input.py
alors model = prioritize_duplicates(df, model, player)
dans optimize.py
( L615
) ne doit pas être commenté.
Si par exemple, le SBC veut at least 3 players from Real Madrid and Arsenal combined
et at least 2 players from Bayern Munich
, alors définissez CLUB = [["Real Madrid", "Arsenal"], ["FC Bayern"]]
et NUM_CLUB = [3, 2]
( L43-44
dans input.py
) puis décommentez model = create_club_constraint(df, model, player, map_idx, players_grouped, num_cnts)
( L581
dans optimize.py
).
Si le SBC nécessite au moins 6 Rare
et 8 Gold
, définissez RARITY_2 = ["Rare", "Gold"]
et NUM_RARITY_2 = [6, 8]
dans input.py (L71-72)
, puis décommentez model = create_rarity_2_constraint(df, model, player, map_idx, players_grouped, num_cnts)
( L603
dans optimize.py
).
Les contraintes telles que Chemistry
( optimize.py
, L620
) ou FIX_PLAYERS
( optimize.py
, L623
) ne nécessitent pas d'activation explicite. Si vous n'avez pas besoin de Chemistry
, définissez-le sur 0
dans input.py (L79)
. De même, si aucun joueur n'a besoin d'être réparé, laissez FIX_PLAYERS
vide dans input.py (L12)
.
L' objective
est défini dans optimize.py
( L626
). La nature de l' objective
peut être modifiée dans input.py
( L20-21
). Actuellement, l'objectif est de minimize
le total cost
.
Les paramètres supplémentaires dans input.py
doivent être examinés pour plus d'informations.
Dans main.py
, spécifiez le nom de l' club dataset
dans L57
. L'ensemble de données est prétraité dans preprocess_data_2
dans main.py
. Des filtres supplémentaires peuvent être ajoutés d'une manière similaire à ceux existants.
Actuellement, les contributions sont définies pour résoudre ce défi SBC. La liste finale des joueurs est écrite dans le fichier output.xlsx
. Pour exécuter le programme, exécutez simplement py main.py
après avoir installé les dépendances requises. Remarque : cela semble être un SBC très difficile et il a donc fallu activer le filtre sur la notation dans main.py (L41)
.
Exécutez pip3 install -r requirements.txt
pour installer les dépendances requises.
Google OR-Tools v9.8
Python3.9
pandas et openpyxl
https://github.com/ThomasSteere/Auto-SBC
https://github.com/bartlomiej-niemiec/eafc-sbc-solver
https://github.com/kosciukiewicz/sbc-solver
Merci GregoryWullimann
d'avoir rendu le processus de création de modèle incroyablement plus rapide.
Merci Jacobi from EasySBC
pour votre aide avec squad_rating_constraint
.
Merci GeekFiro
d'avoir testé le solveur et d'avoir fourni de précieux commentaires et discussions.
Merci fifagamer#1515
et Frederik
d'avoir fourni vos ensembles de données de club ( Real_Madrid_FC_24.csv
et Frederik FC_24.csv
) et vos commentaires.
Merci ckalgos
d'avoir créé l'extension pour télécharger l'ensemble de données du club.
Merci drRobertDev
d'avoir fourni l'ensemble de données Fc25Players.csv
.
Merci à tous ceux qui ont ouvert des problèmes sur le dépôt et fourni leurs commentaires.
Merci à toutes les personnes qui ont commenté la publication sur Reddit.
Merci FutDB d'avoir fourni l'API qui m'a permis de tester le solveur à l'origine sur 10k joueurs ( input.csv
)