public static FantasyTeam RunOptimizer(Player playerUpForAuction) { FantasyTeam mock = new FantasyTeam("mock"); foreach(string key in Brain.MyDraft.MyTeam.PercentageBudgetsByPosition.Keys) { mock.PercentageBudgetsByPosition.Add(key, Brain.MyDraft.MyTeam.PercentageBudgetsByPosition[key]); } foreach (Player p in Brain.MyDraft.MyTeam.Roster) { mock.addMockPlayer(p); } if(playerUpForAuction != null) { mock.addMockPlayer(playerUpForAuction); } foreach (string position in new string[]{"K","DST","TE","QB","RB","WR"}) { int numberPositionRosterSpots = mock.Roster.Count(p => p.Position.Equals(position)); OptimizePosition(mock, position, numberPositionRosterSpots); } return mock; }
private static void OptimizePosition(FantasyTeam mockTeam, string position, int spotsAlreadyFilled) { int numberOfTotalSpots = Brain.MyDraft.RosterSpotsByPosition[position]; int percentageBudgetForPosition = mockTeam.PercentageBudgetsByPosition[position]; int percentageBudgetForBench = mockTeam.PercentageBudgetsByPosition["BENCH"]; List<Player> players = new List<Player>(); players.AddRange(Brain.MyDraft.PlayersByPosition[position]); while (spotsAlreadyFilled < numberOfTotalSpots) { int dollarBudgetForPosition = mockTeam.GetBudgetDollarForPosition(position); int numberOfSpotsAvailable = numberOfTotalSpots - spotsAlreadyFilled; int dollarBudgetForThisPlayer = numberOfSpotsAvailable > 1 ? (int)Math.Ceiling(dollarBudgetForPosition / 2.0) : dollarBudgetForPosition; Player bestPlayer = players.Where(p => p.Dollar <= dollarBudgetForThisPlayer && !mockTeam.Roster.Contains(p)) .OrderByDescending(s => s.Points).First(); mockTeam.addMockPlayer(bestPlayer); players.Remove(bestPlayer); spotsAlreadyFilled++; } if (mockTeam.PercentageBudgetsByPosition[position] > 0) { var increase = mockTeam.PercentageBudgetsByPosition[position] * Brain.MyDraft.LeagueSalarayCap / 100; mockTeam.AdjustedCap += increase; } }