이 프로젝트는 정수 프로그래밍을 활용하여 SBC(분대 구성 문제)를 해결합니다. 최적화 문제는 Google CP-SAT 솔버를 사용하여 해결됩니다. 이 접근 방식은 솔루션 최적성을 결정하는 기능과 함께 광범위한 사용자 정의 기능을 제공합니다.
The goal is to obtain the squad with the minimum total cost.
클럽 데이터세트를 다운로드하려면 확장 프로그램(버전 >= 1.1.0.3)을 사용하세요.
다양한 제약 조건에 대한 입력은 input.py
에서 찾을 수 있습니다. input.py
( L43-77
및 L28-30
)에서 각 SBC 제약 조건에 대한 적절한 입력을 구성한 다음 optimize.py (L581-615)
로 이동하여 SBC 요구 사항에 따라 관련 줄의 주석 처리를 제거합니다. 또한 input.py
에서 formation
설정하는 것을 잊지 마세요!
예를 들어, 요구 사항이 Same League Count: Max 5
Max 5 Players from the Same League
경우 MAX_NUM_LEAGUE = 5
( input.py
의 L53
)를 설정한 다음 model = create_max_league_constraint(df, model, player, map_idx, players_grouped, num_cnts)
( optimize.py
의 L589
).
요구 사항이 Nations: Max 2
인 경우 NUM_UNIQUE_COUNTRY = [2, "Max"]
( input.py
의 L62
)를 설정한 다음 최적화에서 model = create_unique_country_constraint(df, model, player, map_idx, players_grouped, num_cnts)
( L598
)의 주석 처리를 제거합니다 optimize.py
).
input.py
에서 ( L28-L30
)을 설정하여 중복의 우선순위를 지정하는 경우 optimize.py
( L615
)에서 model = prioritize_duplicates(df, model, player)
의 주석 처리를 제거해야 합니다.
예를 들어, SBC가 at least 3 players from Real Madrid and Arsenal combined
와 at least 2 players from Bayern Munich
원할 경우 CLUB = [["Real Madrid", "Arsenal"], ["FC Bayern"]]
설정하고 NUM_CLUB = [3, 2]
( input.py
의 L43-44
) 그런 다음 주석 처리를 해제합니다 model = create_club_constraint(df, model, player, map_idx, players_grouped, num_cnts)
( optimize.py
의 L581
).
SBC에 최소 6 Rare
와 8 Gold
필요한 경우 input.py (L71-72)
에서 RARITY_2 = ["Rare", "Gold"]
및 NUM_RARITY_2 = [6, 8]
설정한 다음 model = create_rarity_2_constraint(df, model, player, map_idx, players_grouped, num_cnts)
( optimize.py
의 L603
).
Chemistry
( optimize.py
, L620
) 또는 FIX_PLAYERS
( optimize.py
, L623
)와 같은 제약 조건에는 명시적인 활성화가 필요하지 않습니다. Chemistry
가 필요하지 않으면 input.py (L79)
에서 0
으로 설정하세요. 마찬가지로 수정이 필요한 플레이어가 없으면 input.py (L12)
에서 FIX_PLAYERS
비워 두세요.
objective
optimize.py
( L626
)에 설정됩니다. objective
의 성격은 input.py
( L20-21
)에서 변경할 수 있습니다. 현재 목표는 total cost
minimize
것입니다.
자세한 내용은 input.py
의 추가 매개변수를 검토해야 합니다.
main.py
에서 L57
에 club dataset
의 이름을 지정합니다. 데이터 세트는 main.py
내의 preprocess_data_2
에서 전처리됩니다. 추가 필터는 기존 필터와 유사한 방식으로 추가할 수 있습니다.
현재 이 SBC 문제를 해결하기 위한 입력이 설정되어 있습니다. 최종 플레이어 목록은 output.xlsx
파일에 기록됩니다. 프로그램을 실행하려면 필요한 종속성을 설치한 후 py main.py
실행하기만 하면 됩니다. 참고: 이는 매우 어려운 SBC인 것으로 보이므로 main.py (L41)
에서 등급에 대한 필터를 활성화해야 했습니다.
pip3 install -r requirements.txt
실행하여 필요한 종속성을 설치합니다.
Google OR-도구 v9.8
파이썬 3.9
팬더와 openpyxl
https://github.com/ThomasSteere/Auto-SBC
https://github.com/bartlomiej-niemiec/eafc-sbc-solver
https://github.com/kosciukiewicz/sbc-solver
모델 생성 프로세스를 엄청나게 빠르게 만들어준 GregoryWullimann
감사드립니다.
squad_rating_constraint
에 도움을 주신 Jacobi from EasySBC
감사드립니다.
솔버를 테스트하고 귀중한 피드백과 토론을 제공해 주신 GeekFiro
감사드립니다.
클럽 데이터세트( Real_Madrid_FC_24.csv
및 Frederik FC_24.csv
)와 피드백을 제공해 주신 fifagamer#1515
와 Frederik
에게 감사드립니다.
클럽 데이터 세트를 다운로드할 수 있는 확장 프로그램을 만들어주신 ckalgos
에게 감사드립니다.
Fc25Players.csv
데이터세트를 제공해 주신 drRobertDev
에게 감사드립니다.
리포지토리에 이슈를 개설하고 피드백을 제공해 주신 모든 분들께 감사드립니다.
Reddit 게시물에 댓글을 달아주신 모든 분들께 감사드립니다.
원래 10,000명의 플레이어에서 솔버를 테스트할 수 있는 API를 제공한 FutDB에 감사드립니다( input.csv
).