示例#1
0
        public (DriversRating newSimulatorRating, DriversRating newClassRating, DriversRating newDifficultyRating) UpdateRatingsAsLoss(Dictionary <string, DriversRating> ratings, DriversRating difficultyRating, DriversRating simulatorRating, int difficulty, Driver player, string trackName)
        {
            DriverFinishState playerFinishState = new DriverFinishState(true, player.DriverName, player.CarName, player.ClassName, ratings.Count);
            GlickoPlayer      newClassRating    = CalculateNewAsLoss(ratings, ratings[player.DriverName], player);
            GlickoPlayer      newSimRating      = CalculateNewAsLoss(ratings, simulatorRating, player);

            ComputeNewRatingsAndNotify(newClassRating.FromGlicko(), difficultyRating, newSimRating.FromGlicko(), difficulty, playerFinishState, trackName);
            return(newSimRating.FromGlicko(), newClassRating.FromGlicko(), difficultyRating);
        }
 public static DriversRating FromGlicko(this GlickoPlayer glickoRating)
 {
     return(new DriversRating()
     {
         Rating = (int)glickoRating.Rating,
         Deviation = (int)glickoRating.RatingDeviation,
         Volatility = glickoRating.Volatility,
         CreationTime = DateTime.Now,
     });
 }
示例#3
0
        public void GlickoUpdateRatingDeviationNoOpponents()
        {
            var expectedValue = 200.27;

            var player1Opponents = new List <GlickoOpponent>();

            player1 = GlickoCalculator.CalculateRanking(player1, player1Opponents);
            var actualValue = Math.Round(player1.RatingDeviation, 2);

            Assert.Equal(expectedValue, actualValue);
        }
示例#4
0
        public void GlickoUpdateNoOpponents()
        {
            var expectedValue = 0.06;

            var player1Opponents = new List <GlickoOpponent>();

            player1 = GlickoCalculator.CalculateRanking(player1, player1Opponents);
            var actualValue = player1.Volatility;

            Assert.Equal(expectedValue, actualValue);
        }
示例#5
0
 public Persoon(int id, string naam, int positie, int stijging, int gespeeld, int gewonnen, int verloren, int gelijkspel, double score, bool aanwezig, GlickoPlayer glicko)
 {
     Id          = id;
     Naam        = naam;
     Positie     = positie;
     Stijging    = stijging;
     Gespeeld    = gespeeld;
     Gewonnen    = gewonnen;
     Verloren    = verloren;
     Gelijkspel  = gelijkspel;
     Score       = score;
     Aanwezig    = aanwezig;
     this.glicko = glicko;
 }
示例#6
0
        public void GlickoUpdateRatingDeviationCorrect()
        {
            var expectedValue = 151.52;

            var player1Opponents = new List <GlickoOpponent>
            {
                new GlickoOpponent(player2, 1),
                new GlickoOpponent(player3, 0),
                new GlickoOpponent(player4, 0)
            };

            player1 = GlickoCalculator.CalculateRanking(player1, player1Opponents);
            var actualValue = Math.Round(player1.RatingDeviation, 2);

            Assert.Equal(expectedValue, actualValue);
        }
示例#7
0
        public void GlickoUpdateCorrect()
        {
            var expectedValue = 0.059995984286488495;

            var player1Opponents = new List <GlickoOpponent>
            {
                new GlickoOpponent(player2, 1),
                new GlickoOpponent(player3, 0),
                new GlickoOpponent(player4, 0)
            };

            player1 = GlickoCalculator.CalculateRanking(player1, player1Opponents);
            var actualValue = player1.Volatility;

            Assert.Equal(expectedValue, actualValue);
        }
示例#8
0
        public (DriversRating newSimulatorRating, DriversRating newClassRating, DriversRating newDifficultyRating) UpdateRatingsByResults(Dictionary <string, DriversRating> ratings, DriversRating difficultyRating, DriversRating simulatorRating, SessionFinishState sessionFinishState, int difficulty)
        {
            DriverFinishState player = sessionFinishState.DriverFinishStates.First(x => x.IsPlayer);

            Logger.Info("---- CALCULATING NEW CLASS RATINGS ---");
            GlickoPlayer newClassRating = CalculateNewRatingByResult(ratings, ratings[player.Name], sessionFinishState, player);

            Logger.Info("---- CALCULATING NEW SIM RATINGS ---");
            GlickoPlayer newSimRating = CalculateNewRatingByResult(ratings, simulatorRating, sessionFinishState, player);

            Logger.Info("---- CALCULATING NEW DIFFICULTY RATINGS ---");
            GlickoPlayer newDifficultyRating = CalculateNewRatingByResult(ratings, difficultyRating, sessionFinishState, player);

            ComputeNewRatingsAndNotify(newClassRating.FromGlicko(), newDifficultyRating.FromGlicko(), newSimRating.FromGlicko(), difficulty, player, sessionFinishState.TrackName);
            return(newSimRating.FromGlicko(), newClassRating.FromGlicko(), newDifficultyRating.FromGlicko());
        }
示例#9
0
        static void Main(string[] args)
        {
            var player1 = new GlickoPlayer(ratingDeviation: 200);
            var player2 = new GlickoPlayer(1400, 30);
            var player3 = new GlickoPlayer(1550, 100);
            var player4 = new GlickoPlayer(1700, 300);

            var player1Opponents = new List <GlickoOpponent>
            {
                new GlickoOpponent(player2, 1),
                new GlickoOpponent(player3, 0),
                new GlickoOpponent(player4, 0)
            };

            Console.WriteLine(String.Format("Player ranking: {0}", player1.Rating));
            Console.WriteLine(String.Format("Player ranking deviation: {0}", player1.RatingDeviation));

            player1 = GlickoCalculator.CalculateRanking(player1, player1Opponents);

            Console.WriteLine(String.Format("Player ranking: {0}", player1.Rating));
            Console.WriteLine(String.Format("Player ranking deviation: {0}", player1.RatingDeviation));

            Console.ReadKey();
        }
示例#10
0
 public GlickoOpponent(GlickoPlayer opponent, double result) : base(opponent.Rating, opponent.RatingDeviation, opponent.Volatility)
 {
     Result = result;
 }
示例#11
0
 public GlickoOpponent(GlickoPlayer opponent, double result) : base(opponent.Rating, opponent.RatingDeviation, opponent.Volatility)
 {
     Result = result;
 }
示例#12
0
 private GlickoPlayer CalculateNewRating(GlickoPlayer player, List <GlickoOpponent> opponents)
 {
     return(GlickoCalculator.CalculateRanking(player, opponents));
 }