コード例 #1
0
 public EloResult(EloFixtureCompetitor <T> player1, EloFixtureCompetitor <T> player2, int kFactor, ContestResult contestResult)
     : base(player1.Player, player2.Player, player1.StartRating, player2.StartRating, kFactor)
 {
     Player1 = new EloResultCompetitor <T>(player1, contestResult);
     Player2 = new EloResultCompetitor <T>(player2, contestResult);
     KFactor = kFactor;
     Result  = contestResult;
 }
コード例 #2
0
        public List <KFactorResult> GetResults(int startValue = 1, int endValue = 100)
        {
            var accuracyResults = new List <KFactorResult>();

            for (int i = startValue; i <= endValue; i++)
            {
                KFactorResult kFactorResult = new KFactorResult()
                {
                    KFactor = i,
                    Results = new List <double>()
                };
                foreach (var fixture in _fixtures)
                {
                    T player1 = fixture.Player1;
                    InitializePlayerCounter(player1);
                    T player2 = fixture.Player2;
                    InitializePlayerCounter(player2);

                    var player1NoOfGames = _playerCounter[player1].NumberOfContests;
                    var player2NoOfGames = _playerCounter[player2].NumberOfContests;

                    _playerCounter[player1].NumberOfContests++;
                    _playerCounter[player2].NumberOfContests++;

                    var setup  = new EloFixture <T>(player1, player2, _playerCounter[player1].EloScore, _playerCounter[player2].EloScore, i);
                    var result = setup.ToResult(fixture.Result);
                    EloResultCompetitor <T> player1result = ((EloResultCompetitor <T>)result.Player1);
                    _playerCounter[player1].EloScore = player1result.EndRating;
                    EloResultCompetitor <T> player2result = ((EloResultCompetitor <T>)result.Player2);
                    _playerCounter[player2].EloScore = player2result.EndRating;

                    if (player1NoOfGames < _ignoreFirstXContests || player2NoOfGames < _ignoreFirstXContests)
                    {
                        continue;
                    }

                    var squaredError = Math.Pow((player1result.ExpectedScore - player1result.ActualScore), 2)
                                       + Math.Pow((player2result.ExpectedScore - player2result.ActualScore), 2);
                    kFactorResult.Results.Add(squaredError);
                }
                accuracyResults.Add(kFactorResult);
            }
            return(accuracyResults);
        }