private void FindTrades(ref List <Trade> allTrades, LeagueData leagueData, TeamPlayerPool myTeamPlayerPool, TeamPlayerPool theirTeamPlayerPool, HashSet <PlayerList> myTradePool, HashSet <PlayerList> theirTradePool) { IEnumerable <Trade> trades = from mySideOfTrade in myTradePool from theirSideOfTrade in theirTradePool select(new Trade(myTeamPlayerPool.Team.Name, theirTeamPlayerPool.Team.Name, mySideOfTrade, theirSideOfTrade)); HashSet <Trade> uniqueTrades = new HashSet <Trade>(); foreach (Trade trade in trades) { if (Math.Abs(trade.Fairness) <= 5) { uniqueTrades.Add(trade); } } //get required players and excluded players List <Player> myRequiredPlayers = myTeamPlayerPool.TradablePlayers.Where(p => p.Required).ToList <Player>(); List <Player> myExcludedPlayers = myTeamPlayerPool.TradablePlayers.Where(p => p.Excluded).ToList <Player>(); List <Player> theirRequiredPlayers = theirTeamPlayerPool.TradablePlayers.Where(p => p.Required).ToList <Player>(); List <Player> theirExcludedPlayers = theirTeamPlayerPool.TradablePlayers.Where(p => p.Excluded).ToList <Player>(); foreach (Trade trade in uniqueTrades) { //if (Math.Abs(trade.Fairness) <= 5) //{ if (trade.CalculateDifferentials(leagueData, myTeamPlayerPool, theirTeamPlayerPool) && trade.MyDifferential > 0 && trade.TheirDifferential > 0) { bool isValidTrade = HasRequiredPlayers(trade.MyPlayers, myRequiredPlayers) && HasRequiredPlayers(trade.TheirPlayers, theirRequiredPlayers) && HasExcludedPlayers(trade.MyPlayers, myExcludedPlayers) && HasExcludedPlayers(trade.TheirPlayers, theirExcludedPlayers); if (isValidTrade) { allTrades.Add(trade); } } //} } }
public List <Trade> Post(LeagueData leagueData) { //create table list to store each trade List <Trade> trades = new List <Trade>(); //create my team player pool TeamPlayerPool myTeamPlayerPool = new TeamPlayerPool(leagueData.MyTeam); //create other team list List <Team> theirTeams = new List <Team>(); if (!leagueData.UseAllTeams) { theirTeams.Add(leagueData.TheirTeam); } else { theirTeams = leagueData.Teams; theirTeams.Remove(leagueData.Teams.Where(t => t.Id == leagueData.MyTeam.Id).FirstOrDefault <Team>()); } //for each other team, find trades foreach (Team theirTeam in theirTeams) { //load team player pool for this team TeamPlayerPool otherTeamPlayerPool = new TeamPlayerPool(theirTeam); //find trades with this team FindTrades(ref trades, leagueData, myTeamPlayerPool, otherTeamPlayerPool, myTeamPlayerPool.OnePlayerTradePool, otherTeamPlayerPool.OnePlayerTradePool); //1 for 1 FindTrades(ref trades, leagueData, myTeamPlayerPool, otherTeamPlayerPool, myTeamPlayerPool.OnePlayerTradePool, otherTeamPlayerPool.TwoPlayerTradePool); //1 for 2 FindTrades(ref trades, leagueData, myTeamPlayerPool, otherTeamPlayerPool, myTeamPlayerPool.OnePlayerTradePool, otherTeamPlayerPool.ThreePlayerTradePool); //1 for 3 FindTrades(ref trades, leagueData, myTeamPlayerPool, otherTeamPlayerPool, myTeamPlayerPool.TwoPlayerTradePool, otherTeamPlayerPool.OnePlayerTradePool); //2 for 1 FindTrades(ref trades, leagueData, myTeamPlayerPool, otherTeamPlayerPool, myTeamPlayerPool.TwoPlayerTradePool, otherTeamPlayerPool.TwoPlayerTradePool); //2 for 2 FindTrades(ref trades, leagueData, myTeamPlayerPool, otherTeamPlayerPool, myTeamPlayerPool.TwoPlayerTradePool, otherTeamPlayerPool.ThreePlayerTradePool); //2 for 3 FindTrades(ref trades, leagueData, myTeamPlayerPool, otherTeamPlayerPool, myTeamPlayerPool.ThreePlayerTradePool, otherTeamPlayerPool.OnePlayerTradePool); //3 for 1 FindTrades(ref trades, leagueData, myTeamPlayerPool, otherTeamPlayerPool, myTeamPlayerPool.ThreePlayerTradePool, otherTeamPlayerPool.TwoPlayerTradePool); //3 for 2 FindTrades(ref trades, leagueData, myTeamPlayerPool, otherTeamPlayerPool, myTeamPlayerPool.ThreePlayerTradePool, otherTeamPlayerPool.ThreePlayerTradePool); //3 for 3 } return(trades.OrderByDescending(t => ((t.MyDifferential + leagueData.Fairness) * (t.TheirDifferential - leagueData.Fairness))).Distinct().ToList()); }
public bool CalculateDifferentials(LeagueData leagueData, TeamPlayerPool myTeamPlayerPool, TeamPlayerPool theirTeamPlayerPool) { //get new original rosters MyOldStartingRoster = myTeamPlayerPool.OptimalLineUp(leagueData, MyPlayers); TheirOldStartingRoster = theirTeamPlayerPool.OptimalLineUp(leagueData, TheirPlayers); //get new starting rosters MyNewStartingRoster = myTeamPlayerPool.OptimalLineUp(leagueData, TheirPlayers, MyPlayers); TheirNewStartingRoster = theirTeamPlayerPool.OptimalLineUp(leagueData, MyPlayers, TheirPlayers); //calculate differentials MyDifferential = MyNewStartingRoster.Points - MyOldStartingRoster.Points; TheirDifferential = TheirNewStartingRoster.Points - TheirOldStartingRoster.Points; CompositeDifferential = MyDifferential + TheirDifferential; //my positional differentials decimal myQbDifferential = MyNewStartingRoster.QbPoints - MyOldStartingRoster.QbPoints; decimal myRbDifferential = MyNewStartingRoster.RbPoints - MyOldStartingRoster.RbPoints; decimal myWrDifferential = MyNewStartingRoster.WrPoints - MyOldStartingRoster.WrPoints; decimal myTeDifferential = MyNewStartingRoster.TePoints - MyOldStartingRoster.TePoints; decimal myFlexDifferential = MyNewStartingRoster.FlexPoints - MyOldStartingRoster.FlexPoints; //their positional differentials decimal theirQbDifferential = TheirNewStartingRoster.QbPoints - TheirOldStartingRoster.QbPoints; decimal theirRbDifferential = TheirNewStartingRoster.RbPoints - TheirOldStartingRoster.RbPoints; decimal theirWrDifferential = TheirNewStartingRoster.WrPoints - TheirOldStartingRoster.WrPoints; decimal theirTeDifferential = TheirNewStartingRoster.TePoints - TheirOldStartingRoster.TePoints; decimal theirFlexDifferential = TheirNewStartingRoster.FlexPoints - TheirOldStartingRoster.FlexPoints; foreach (Player player in TheirPlayers) { if (player.Position == "QB" && myQbDifferential < 10) { return(false); } else if (player.Position == "RB" && myRbDifferential > 0 && myRbDifferential < 10) { return(false); } else if (player.Position == "WR" && myWrDifferential > 0 && myWrDifferential < 10) { return(false); } else if (player.Position == "TE" && myTeDifferential < 10) { return(false); } } foreach (Player player in MyPlayers) { if (player.Position == "QB" && theirQbDifferential > 0 && theirQbDifferential < 10) { return(false); } else if (player.Position == "RB" && theirRbDifferential > 0 && theirRbDifferential < 10) { return(false); } else if (player.Position == "WR" && theirWrDifferential > 0 && theirWrDifferential < 10) { return(false); } else if (player.Position == "TE" && theirTeDifferential > 0 && theirTeDifferential < 10) { return(false); } } //calculate my positional differentials and add them to the proper change string AddMyChange("QB", MyNewStartingRoster.QbPoints - MyOldStartingRoster.QbPoints); AddMyChange("RB", MyNewStartingRoster.RbPoints - MyOldStartingRoster.RbPoints); AddMyChange("WR", MyNewStartingRoster.WrPoints - MyOldStartingRoster.WrPoints); AddMyChange("TE", MyNewStartingRoster.TePoints - MyOldStartingRoster.TePoints); AddMyChange("FLEX", MyNewStartingRoster.FlexPoints - MyOldStartingRoster.FlexPoints); //calculate their positional differentials and add them to the proper change string AddTheirChange("QB", TheirNewStartingRoster.QbPoints - TheirOldStartingRoster.QbPoints); AddTheirChange("RB", TheirNewStartingRoster.RbPoints - TheirOldStartingRoster.RbPoints); AddTheirChange("WR", TheirNewStartingRoster.WrPoints - TheirOldStartingRoster.WrPoints); AddTheirChange("TE", TheirNewStartingRoster.TePoints - TheirOldStartingRoster.TePoints); AddTheirChange("FLEX", TheirNewStartingRoster.FlexPoints - TheirOldStartingRoster.FlexPoints); //set differentials back in rosters MyNewStartingRoster.Differential = "+" + MyDifferential; MyOldStartingRoster.Differential = "-" + MyDifferential; TheirNewStartingRoster.Differential = "+" + TheirDifferential; TheirOldStartingRoster.Differential = "-" + TheirDifferential; return(true); }