このプロジェクトは整数計画法を利用して分隊構築課題 (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)
(optimize の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
Python 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
)