예제 #1
0
        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);
                    }
                }
                //}
            }
        }
예제 #2
0
        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());
        }
예제 #3
0
        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);
        }