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; }
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); }