Created
October 25, 2023 17:41
-
-
Save alpaylan/e53758c53ce5f3d70991723dc69c55ca to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| def get_all_possible_roasters(roaster): | |
| # Rules | |
| # Players: 1 PG | 1 SG | 1 G | 1 SF | 1 PF | 1 F | 3 C | 3 Util | 4 BN | |
| # Roaster: 1 PG | 1 SG | 1 G | 1 SF | 1 PF | 1 F | 3 C | 3 Util | |
| # The task is to create all possible roasters from the given roaster | |
| roles = { | |
| "PG": 0, | |
| "SG": 1, | |
| "G": 2, | |
| "SF": 3, | |
| "PF": 4, | |
| "F": 5, | |
| "C": 6, | |
| "Util": 7, | |
| "BN": 8, | |
| } | |
| role_set = set(roles.keys()) | |
| from ortools.sat.python import cp_model | |
| model = cp_model.CpModel() | |
| solver = cp_model.CpSolver() | |
| players = {} | |
| for player in roaster: | |
| for role in role_set: | |
| players[f"{player['name']}_{role}"] = model.NewBoolVar(f"{player['name']}_{role}") | |
| for role in role_set.difference(player['eligible_positions']): | |
| print(players[f"{player['name']}_{role}"], 0) | |
| model.Add(players[f"{player['name']}_{role}"] == 0) | |
| role_expect = { | |
| "PG": 1, | |
| "SG": 1, | |
| "G": 1, | |
| "SF": 1, | |
| "PF": 1, | |
| "F": 1, | |
| "C": 3, | |
| "Util": 3, | |
| "BN": 4, | |
| } | |
| role_num = {} | |
| for role in role_set: | |
| role_num[role] = sum([players[f"{player['name']}_{role}"] for player in roaster]) | |
| print(role_num[role], role_expect[role]) | |
| model.Add(role_num[role] == role_expect[role]) | |
| result = solver.Solve(model) | |
| if result == cp_model.FEASIBLE: | |
| print("Feasible") | |
| else: | |
| print("Not feasible") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment