Advertisement
Guest User

Untitled

a guest
Aug 21st, 2019
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.86 KB | None | 0 0
  1. def select_team(expected_scores, prices, positions, clubs):
  2. num_players = len(expected_scores)
  3. model = pulp.LpProblem("Constrained value maximisation", pulp.LpMaximize)
  4. decisions = [
  5. pulp.LpVariable("x{}".format(i), lowBound=0, upBound=1, cat='Integer')
  6. for i in range(num_players)
  7. ]
  8. captain_decisions = [
  9. pulp.LpVariable("y{}".format(i), lowBound=0, upBound=1, cat='Integer')
  10. for i in range(num_players)
  11. ]
  12.  
  13. # objective function:
  14. model += sum((captain_decisions[i] + decisions[i]) * expected_scores[i]
  15. for i in range(num_players)), "Objective"
  16.  
  17. # cost constraint
  18. model += sum(decisions[i] * prices[i] for i in range(num_players)) <= 100 # total cost
  19. model += sum(decisions) == 11 # total team size
  20.  
  21. # position constraints
  22. # 1 goalkeeper
  23. model += sum(decisions[i] for i in range(num_players) if positions[i] == 1) == 1
  24. # 3-5 defenders
  25. model += sum(decisions[i] for i in range(num_players) if positions[i] == 2) >= 3
  26. model += sum(decisions[i] for i in range(num_players) if positions[i] == 2) <= 5
  27. # 3-5 midfielders
  28. model += sum(decisions[i] for i in range(num_players) if positions[i] == 3) >= 3
  29. model += sum(decisions[i] for i in range(num_players) if positions[i] == 3) <= 5
  30. # 1-3 attackers
  31. model += sum(decisions[i] for i in range(num_players) if positions[i] == 4) >= 1
  32. model += sum(decisions[i] for i in range(num_players) if positions[i] == 4) <= 3
  33.  
  34. # club constraint
  35. for club_id in np.unique(clubs):
  36. model += sum(decisions[i] for i in range(num_players) if clubs[i] == club_id) <= 3 # max 3 players
  37.  
  38. model += sum(captain_decisions) == 1 # 1 captain
  39.  
  40. for i in range(num_players): # captain must also be on team
  41. model += (decisions[i] - captain_decisions[i]) >= 0
  42.  
  43. model.solve()
  44. return decisions, captain_decisions
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement