How does an engine with 0 ELO play ?
Moderators: hgm, Rebel, chrisw
-
- Posts: 7220
- Joined: Mon May 27, 2013 10:31 am
Re: How does an engine with 0 ELO play ?
Huh is negative ELO possible? Didn't know that.
-
- Posts: 266
- Joined: Fri Jul 10, 2015 9:23 pm
- Location: Russia
Re: How does an engine with 0 ELO play ?
It depends on null in measuring system.velmarin wrote:And the opposite, what would be the "elo" of a perfect engine?
5000, 10000,
What strength will be taken as null?
Last edited by Kotlov on Mon Apr 16, 2018 3:14 pm, edited 1 time in total.
Eugene Kotlov
Hedgehog 2.1 64-bit coming soon...
Hedgehog 2.1 64-bit coming soon...
-
- Posts: 266
- Joined: Fri Jul 10, 2015 9:23 pm
- Location: Russia
Re: How does an engine with 0 ELO play ?
Why not?Henk wrote:Huh is negative ELO possible? Didn't know that.
Eugene Kotlov
Hedgehog 2.1 64-bit coming soon...
Hedgehog 2.1 64-bit coming soon...
-
- Posts: 7220
- Joined: Mon May 27, 2013 10:31 am
Re: How does an engine with 0 ELO play ?
Because lowest class J was 0-199. See Wikipedia. Haven't found time to read it carefully.
-
- Posts: 266
- Joined: Fri Jul 10, 2015 9:23 pm
- Location: Russia
Re: How does an engine with 0 ELO play ?
United States Chess Federation classification of players?Henk wrote:Because lowest class J was 0-199. See Wikipedia. Haven't found time to read it carefully.
Who cares?...
Eugene Kotlov
Hedgehog 2.1 64-bit coming soon...
Hedgehog 2.1 64-bit coming soon...
-
- Posts: 27809
- Joined: Fri Mar 10, 2006 10:06 am
- Location: Amsterdam
- Full name: H G Muller
Re: How does an engine with 0 ELO play ?
We might very well discover that even Elo differences are not an absolute measure, but are relative to the pool of players that you use to determine the Elo. E.g. that when let two players of vast strength difference play in one pool of 1000 players, all playing enough games against each other so that statistical errors become completely insignificant, an you etermine an Elo from that.... That you get a very different resullt when you repeat that experiment with a ifferent group of 1000 players. In fact we alreay know this: if the pool of players are all versions of the same engine ('self play'), the Elo differences come out much larger than when you use unrelated engine opponents.
-
- Posts: 12541
- Joined: Wed Mar 08, 2006 8:57 pm
- Location: Redmond, WA USA
Re: How does an engine with 0 ELO play ?
A zero Elo engine must lose every single game, assuming that it plays against an engine with 1 Elo or more (negative bias is also possible).
So, for instance, an engine that is actively trying to lose with incredible ability against an engine that is actively trying to win with incredible ability (consider SF playing loser's chess against SF playing normal chess) could possibly achieve 0 Elo.
But you have to be careful to avoid book lines that cause a draw. Also, the strong engine might force a draw because it does not know the opponent is trying to lose.
So, for instance, an engine that is actively trying to lose with incredible ability against an engine that is actively trying to win with incredible ability (consider SF playing loser's chess against SF playing normal chess) could possibly achieve 0 Elo.
But you have to be careful to avoid book lines that cause a draw. Also, the strong engine might force a draw because it does not know the opponent is trying to lose.
Taking ideas is not a vice, it is a virtue. We have another word for this. It is called learning.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.
-
- Posts: 266
- Joined: Fri Jul 10, 2015 9:23 pm
- Location: Russia
Re: How does an engine with 0 ELO play ?
Why?Dann Corbit wrote:A zero Elo engine must lose every single game,
Eugene Kotlov
Hedgehog 2.1 64-bit coming soon...
Hedgehog 2.1 64-bit coming soon...
-
- Posts: 12541
- Joined: Wed Mar 08, 2006 8:57 pm
- Location: Redmond, WA USA
Re: How does an engine with 0 ELO play ?
He was describing USCF.Kotlov wrote:Why?Dann Corbit wrote:A zero Elo engine must lose every single game,
Use these equations for Elo, and solve for zero:
Code: Select all
#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 rating_difference;
for (rating_difference = 0; rating_difference <= 3000; rating_difference += 100) {
printf("Win expectency for a difference of %.0f points is %g\n", rating_difference,
win_expectancy(rating_difference));
}
printf("%.15g\n", win_expectancy(60.0));
puts("Elo difference:");
fgets(string, sizeof string, stdin);
rating_difference = atof(string);
printf("Win expectency for a difference of %.0f points is %g\n", rating_difference,
win_expectancy(rating_difference));
return 0;
}
Taking ideas is not a vice, it is a virtue. We have another word for this. It is called learning.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.
-
- Posts: 1535
- Joined: Sun Oct 25, 2009 2:30 am
Re: How does an engine with 0 ELO play ?
That's the obvious question to ask when reading something like the thread title, but when we looked at random movers a while back, it became apparent that they did not fit very well into the definition of "player", as assumed here:Kotlov wrote:What is 0 Elo?
.The Elo rating system is a method for calculating the relative skill levels of players
A "0 Elo player" may just make as little sense, after all, when someone is learning the rules of chess, he goes from a point where he breaks them too often, to be able to finish a legal game, to another where he actually can "play" a full game. By that time,they're far from 0, although they may still make the occasional illegal move (I've seen a federated player winning an official game by moving his rook to a different row and column in just one move, try getting that one past even a random mover).