Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Why GM Ashley was picked.

Author: Dann Corbit

Date: 12:23:56 06/20/01

Go up one level in this thread


On June 20, 2001 at 15:06:51, Côme wrote:

>On June 20, 2001 at 13:38:23, Dann Corbit wrote:
>
>>On June 20, 2001 at 13:08:10, Mark Young wrote:
>>[snip]
>>>Not by me, I don't have a problem with him being a GM, He teaches me chess on
>>>chess wise. I am not the one who has a problem with a 2484 elo GM, It was not I
>>>that suggest GM's are not GM's because they don't have a super high rating or
>>>because they are old.
>>
>>However, when they are old, it really does become more and more of a "paper
>>title" -- let's admit it.  There is a huge inertia in ELO calculations.  If you
>>play ten years, starting when you are ten years old, even if you are a prodigy,
>>it is doubtful you will start out above 1800.  So, over a broad span of time,
>>your ELO figures in thousands of games at below (say) 2200.  Imagine the
>>incredible performance you must achieve to pull the ELO over 2500!  You must
>>play tremendous chess for a very long time to do it.  Now, examine the reverse
>>side of the coin.  Suppose you are a super GM who has played for decades.  Maybe
>>for 20 years your ELO was over 2600.  If your ELO is now at 2495, it means you
>>are playing 1800 chess.
>
>Hello !
>That is nonsense Dann and I hope you realise. A past 2600 player who have now
>2495 doesn't play 1800 chess.All your paragraphe is nonsense may be you should
>play chess before talking about it.

Sorry, but those are the facts.  Suppose a super GM of 2600 ELO plays in a big
tournament and scores just 1% of the points.  That's a rating difference of 800
ELO.  2600-800 = 1800.  Here are the computations:

#include <stdio.h>
#include <math.h>
#include "uscf.h"

double          provisional_rating(
                                             double opponent_average_rating,
                                                   unsigned wins,
                                                   unsigned draws,
                                                   unsigned losses
)
{
    double          new_rating;
    if (wins + draws + losses == 0)
        new_rating = 0.;
    else
        new_rating = opponent_average_rating +
            (400.0 * ((wins + 0.5 * draws) - (0.5 * draws + losses)) /
             (wins + draws + losses));
    return (double) (unsigned) (new_rating + 0.5);
}
double          established_rating(
                                                   double old_rating,
                                                   double event_score,
                                                   double rating_difference,
                                                   char half_k_event,
                                                   double prize_amount,
                                                   unsigned event_level
)
{
    double          rating;
    double          k = old_rating >= 2400.0 ? 16.0 : old_rating >= 2100.0 ?
24.0 : 32.0;
    if (half_k_event)
        k *= 0.5;
    rating = old_rating + k * (event_score - win_expectancy(rating_difference));
    if (old_rating <= 2099.0 &&
        rating >= 2100.0 &&
        rating <= 2399.0)
        rating = 2100.0 + (rating - 2100.0) * 0.75;
    else if (old_rating >= 2100.0 &&
             old_rating <= 2399.0 &&
             rating <= 2099.0)
        rating = 2100.0 * (rating - 2100.0) * 1.33;
    else if (old_rating >= 2100.0 &&
             old_rating <= 2399.0 &&
             rating >= 2400.0 &&
             rating <= 3000.0)
        rating = 2400.0 * (rating - 2400.0) * 0.66;
    else if (old_rating >= 2400.0 &&
             old_rating <= 3000.0 &&
             rating >= 2100.0 &&
             rating <= 2399.0)
        rating = 2400.0 * (rating - 2400.0) * 1.50;
    return rating_floor_adj(old_rating, rating, prize_amount, event_level);
}
double          win_expectancy(
                                               double rating_difference
)
{
    return 1.0 / (pow(10.0, (rating_difference / 400.0)) + 1.);
}
double          rating_floor_adj(
                                                 double old_rating,
                                                 double new_rating,
                                                 double prize_amount,
                                                 unsigned event_level
)
{
    char            large_cash_prize = 0;
    double          temp_floor = old_rating - 200.0;
    unsigned        ltf = ((unsigned) (temp_floor)) % 100UL * 100UL;
    if (old_rating >= 2400 || old_rating <= 100)
        return new_rating;
    if (old_rating < 1600)
        ltf = 100;
    if (old_rating < 2200 && prize_amount >= 1000)
        large_cash_prize = 1;
    else if (old_rating < 2300 && prize_amount >= 1500)
        large_cash_prize = 1;
    else if (old_rating < 2400 && prize_amount >= 2000)
        large_cash_prize = 1;
    if (large_cash_prize)
        ltf = event_level;
    return ltf > new_rating ? (double) ltf : new_rating;
}
unsigned long   rating_floor(
                                             double old_rating,
                                             double new_rating,
                                             double prize_amount,
                                             unsigned event_level
)
{
    char            large_cash_prize = 0;
    unsigned        floor_value = (((unsigned) (old_rating - 200)) % 100U) *
100U;
    if (old_rating >= 2400 || old_rating <= 100)
        return (unsigned long) (new_rating + 0.5);
    if (old_rating < 1600)
        floor_value = 100;
    if (old_rating < 2200 && prize_amount >= 1000)
        large_cash_prize = 1;
    else if (old_rating < 2300 && prize_amount >= 1500)
        large_cash_prize = 1;
    else if (old_rating < 2400 && prize_amount >= 2000)
        large_cash_prize = 1;
    if (large_cash_prize)
        floor_value = event_level;
    return floor_value;
}
const char     *
                describe_uscf_rating(
                                                     unsigned rating
)
{
    char           *rating_name;
    if (rating > 2399)
        rating_name = "Senior Master";
    else if (rating >= 2200)
        rating_name = "Master";
    else if (rating >= 2000)
        rating_name = "Expert";
    else if (rating >= 1800)
        rating_name = "Class A";
    else if (rating >= 1600)
        rating_name = "Class B";
    else if (rating >= 1400)
        rating_name = "Class C";
    else if (rating >= 1200)
        rating_name = "Class D";
    else if (rating >= 1000)
        rating_name = "Class E";
    else if (rating >= 800)
        rating_name = "Class F";
    else if (rating >= 600)
        rating_name = "Class G";
    else if (rating >= 400)
        rating_name = "Class H";
    else if (rating >= 200)
        rating_name = "Class I";
    else
        rating_name = "Class J";
    return rating_name;
}
char            string[32767];
int             main(void)
{
    double          old_rating = 2600;
    double          event_score = .01;
    double          rating_difference = 100;
    char            half_k_event = 0;
    double          prize_amount = 100000;
    unsigned        event_level = 2500;
    printf("%f\n", established_rating(
                                      old_rating,
                                      event_score,
                                      rating_difference,
                                      half_k_event,
                                      prize_amount,
                                      event_level));
    return 0;
}

C:\tmp>uscf
2594.401040

His ELO has now dropped to 2594 from 1600.  Can you see how badly he'd have to
tank it to drop to 2490?  It would take a terrific number of tournaments getting
slaughtered every time.



This page took 0.01 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.