James McCool commited on
Commit
8e112a6
·
1 Parent(s): 47189b9
Files changed (2) hide show
  1. app.py +0 -6
  2. global_func/optimize_lineup.py +7 -8
app.py CHANGED
@@ -2908,10 +2908,8 @@ if selected_tab == 'Manage Portfolio':
2908
  stacking_sports
2909
  )
2910
 
2911
- # Update the original dataframe with the modified rows
2912
  parsed_frame.loc[containing_mask] = modified_rows.values
2913
 
2914
- # Use consolidated calculation function for export
2915
  parsed_frame = calculate_lineup_metrics(
2916
  parsed_frame,
2917
  st.session_state['player_columns'],
@@ -2960,9 +2958,6 @@ if selected_tab == 'Manage Portfolio':
2960
  )
2961
 
2962
  st.session_state['working_frame'] = parsed_frame.reset_index(drop=True)
2963
-
2964
- # st.session_state['working_frame'] = predict_dupes(st.session_state['working_frame'], st.session_state['map_dict'], site_var, type_var, Contest_Size, strength_var, sport_var)
2965
- # Load Default base from compressed storage for reassess_edge
2966
  default_base = load_base_frame('Default')
2967
  st.session_state['working_frame'] = reassess_edge(st.session_state['working_frame'], default_base, st.session_state['map_dict'], site_var, type_var, Contest_Size, strength_var, sport_var, salary_max)
2968
  team_dict = dict(zip(st.session_state['portfolio_inc_proj']['player_names'], st.session_state['portfolio_inc_proj']['team']))
@@ -2997,7 +2992,6 @@ if selected_tab == 'Manage Portfolio':
2997
  st.session_state['portfolio_inc_proj']
2998
  )
2999
 
3000
-
3001
  st.session_state['export_base'] = parsed_frame.reset_index(drop=True)
3002
  default_base = load_base_frame('Default')
3003
  st.session_state['export_base'] = reassess_edge(st.session_state['export_base'], default_base, st.session_state['map_dict'], site_var, type_var, Contest_Size, strength_var, sport_var, salary_max)
 
2908
  stacking_sports
2909
  )
2910
 
 
2911
  parsed_frame.loc[containing_mask] = modified_rows.values
2912
 
 
2913
  parsed_frame = calculate_lineup_metrics(
2914
  parsed_frame,
2915
  st.session_state['player_columns'],
 
2958
  )
2959
 
2960
  st.session_state['working_frame'] = parsed_frame.reset_index(drop=True)
 
 
 
2961
  default_base = load_base_frame('Default')
2962
  st.session_state['working_frame'] = reassess_edge(st.session_state['working_frame'], default_base, st.session_state['map_dict'], site_var, type_var, Contest_Size, strength_var, sport_var, salary_max)
2963
  team_dict = dict(zip(st.session_state['portfolio_inc_proj']['player_names'], st.session_state['portfolio_inc_proj']['team']))
 
2992
  st.session_state['portfolio_inc_proj']
2993
  )
2994
 
 
2995
  st.session_state['export_base'] = parsed_frame.reset_index(drop=True)
2996
  default_base = load_base_frame('Default')
2997
  st.session_state['export_base'] = reassess_edge(st.session_state['export_base'], default_base, st.session_state['map_dict'], site_var, type_var, Contest_Size, strength_var, sport_var, salary_max)
global_func/optimize_lineup.py CHANGED
@@ -103,20 +103,19 @@ def optimize_single_lineup(
103
  # Constraint 1: Each open column gets exactly one player
104
  for j in range(num_open_cols):
105
  solver.Add(sum(x[i, j] for i in range(num_players)) == 1)
106
-
107
- # Constraint 2: Each player can only be used once across all open columns
108
  for i in range(num_players):
109
- solver.Add(sum(x[i, j] for j in range(num_player_columns)) <= 1)
110
 
111
- # Constraint 3: Players already in ANY position in the row cannot be selected again
112
- all_players_in_row = set(row[col] for col in player_columns) # Get ALL players in row
113
  for i, player in enumerate(player_list):
114
  player_name = player['player_names']
115
- if player_name in all_players_in_row:
116
- # This player is already somewhere in the row, can't use them again
117
  for j in range(num_open_cols):
118
  solver.Add(x[i, j] == 0)
119
-
120
  # Constraint 4: Position eligibility
121
  for i, player in enumerate(player_list):
122
  player_positions = player['position'].split('/')
 
103
  # Constraint 1: Each open column gets exactly one player
104
  for j in range(num_open_cols):
105
  solver.Add(sum(x[i, j] for i in range(num_players)) == 1)
106
+
107
+ # Constraint 2: Each player can only be used AT MOST once across all open columns
108
  for i in range(num_players):
109
+ solver.Add(sum(x[i, j] for j in range(num_open_cols)) <= 1)
110
 
111
+ # Constraint 3: Players already LOCKED in the row cannot be selected again
112
+ # (only check locked_player_names, not all players in row)
113
  for i, player in enumerate(player_list):
114
  player_name = player['player_names']
115
+ if player_name in locked_player_names: # ✅ Only check locked players
 
116
  for j in range(num_open_cols):
117
  solver.Add(x[i, j] == 0)
118
+
119
  # Constraint 4: Position eligibility
120
  for i, player in enumerate(player_list):
121
  player_positions = player['position'].split('/')