Skip to content

Instantly share code, notes, and snippets.

@alpaylan
Created October 25, 2023 17:41
Show Gist options
  • Select an option

  • Save alpaylan/e53758c53ce5f3d70991723dc69c55ca to your computer and use it in GitHub Desktop.

Select an option

Save alpaylan/e53758c53ce5f3d70991723dc69c55ca to your computer and use it in GitHub Desktop.
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