Example #1
0
        private void PermutationReady(GameList allGames, List <int> allWinners, List <TeamResult> teamResults, int completedPermutations, double totalPermutations)
        {
            TotalCalculations = totalPermutations;

            mUpdateCounter++;
            if (mUpdateCounter > totalPermutations / 100)
            {
                Console.WriteLine($"{(int)Math.Round(completedPermutations / totalPermutations * 100)}% done permuting");
                mUpdateCounter = 0;
            }

            //Check for final callback (signaled by homeWinners == null)
            if (allWinners == null)
            {
                //Wait for the judge to catch up
                if (mJudge != null)
                {
                    mJudge.FinishSession((a, b) => { Finish(mFinishedCallback); });
                }
                else
                {
                    Finish(mFinishedCallback);
                }

                return;
            }

            if (mJudge != null)
            {
                //Throttle so we don't overload the judge
                while (mJudge.Backlog > 1000000)
                {
                    Thread.Sleep(TimeSpan.FromMilliseconds(100));
                }

                //Determine who won the permutation (async)
                mJudge.Judge(allWinners, teamResults);
            }
            else
            {
                DivisionResult result = DivisionWinnerCalculator.JudgeSync(mGames, mDivision, TeamIds, allWinners, teamResults);
                JudgmentReady(result.WinnerId, result.DivisionFinalistIds, result.Milliseconds, allWinners);
            }
        }
Example #2
0
        private DivisionScenarioAnalyzer(League league, string conferenceName, string divisionName, string teamName, bool fastMode, Action <long, double, TimeSpan> progressCallback, Action <List <string>, TimeSpan> finishedCallback)
        {
            mLeague = league;
            mTeam   = teamName != null?league.FindTeam(teamName) : null;

            mProgressCallback = progressCallback;
            mFinishedCallback = finishedCallback;

            ScenariosCalculated = new List <int> {
                0, 0, 0
            };
            ScenarioTimes = new List <double> {
                0, 0, 0
            };

            mDivision = league.FindDivision(conferenceName, divisionName);

            //Prepare the list of team Ids and division winner counts
            TeamIds      = Team.GetTeamIds(mDivision.Teams);
            WinnerCounts = new Dictionary <int, int>();
            TieCounts    = new Dictionary <int, int>();
            lock (WinnerCounts)
            {
                foreach (int teamId in TeamIds)
                {
                    //Entries for outright winner, 1/2/3/etc.-way tie-breakers, and no-win ties
                    WinnerCounts.Add(teamId, 0);
                    TieCounts.Add(teamId, 0);
                }
            }

            //Get all games involving division teams
            mGames = mDivision.AllGames;

            if (fastMode)
            {
                mJudge = new DivisionWinnerCalculator(league, mDivision, mGames, JudgmentReady);
            }

            //Explore every permutation of game scenarios
            GamePermutator.PermutateGames(mGames, PermutationReady);
        }