The rating system I use is a seed based rating system based on the ELO rating. It is a method of rating participants/group of participants in the individual competitions. Here I am implementing it on a group of participants which is Institute. To give you an insight on our ELO based rating system, I have described it below:

  • An institute will be rated (awarded rating points) in a contest if at least one participant belongs to this institute has made at least one submission in the contest. If it doesn't happen then institute's rating will not change after that contest. (note that it may bring down it's rating).
  • It will be a seed based rating system modeled on the ELO rating. Reference –Elo rating system.
  • The rating algorithm is a function which takes 2 inputs in the form of Ratings before this contest and Ranks in this contest(Codechef provide only ranks to participants after an event, So, I design the rank-list of an institute for an event.You can read about it in next section) and gives the final Rating as output. If an institute participates for the first time in a contest then it's the previous rating is taken as some default value (say 1000).

To design the rank-list for institutes from the rank-list of participants, I use this method-

Let's say, From a single institute, total N participants took part in the event and scored S1, S2, S3......Sn.
  • Total_Participants_Score = S1 + S2 + S3 + ......+ Sn
  • Average_Participants_Score = (S1 + S2 + S3 + ......+ Sn)/N
  • Max_participant_Score= Max(S1, S2 ,S3......Sn)
  • Total_Score_for_Institute= F(Average_Participants_Score, Max_participant_Score, Total_Participants_Score)
  • Here F is an function which return Total_Score_for_Institute.
  • In this way, I calculate Total_Score_for_Institute for each institute and then I get rank-list by simple sorting.

Mathematical details of the ELO algorithm are described here in brief:
First for each pair of institutes (A, B) we calculate the probability of A defeating B and vice versa based on the ELO formula. Then for every institute, we calculate the sum of the probability of defeating other institutes.

Let's say, There is two institute A and B
  • P[B, A(i)] = probability that B defeats A(i).
    total[B] = summation of P[B][A(i)] over all A(i).
    We can call total[B] as the expected rank of institute B in the event.
  • Rank[B] is the ranking of institute B in this event.
    Now we define S as
    S = n – Rank[B]
    n = number_of_participated_institutes.
  • We define regular factor for contestant B,
    Regular_factor[B] = S – Total[B].
  • Then for each participating institute, it's rating is modified as follows:
    New rating[B] = rating[B] + k * regular_factor[B]
  • Here k is constant to give appropriate weight to the institutes according to their previous rating.
For any query and suggestion, email me at jalesar.raju1@gmail.com