[Freeciv] formula idea for ally counting
[Top] [All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
Hi!
I have a proposal for the ally count. A short description:
Currently the ranking points are calculated as it's described at
http://civserver.freeciv.org/~micha/ranking/ . This sytem works as to
assign a defautl rating to a new player, then modify it as he plays and
the system has more information about him. The less data we have about
a player, the less reliable the info we have about him. So the the less
he played, the less his points should influence when we count an ally.
The problem with this system that it doesn't handle alliances. Now let's
see what we need to know to mesure alliances:
some constants:
C1: see s(r), indicicates how we 'normalize' the strength of players.
it's between 0 and 1. All the players who has lower r(p) than C1
will
be counted in alliances as strength C2. It should be around 0.5.
C2: default strength for weak players in alliances. Weak is determined
by C1. it should be a small number, like 0.05 or 0.1.
N: a constant which represent how much game we need to say
we have enough sample about a player to use his ranking
with full weight
and now the values:
i: the (internal) ID of a player
p(i): the actual ranking points of the player w/ ID=i
r(p): the rate of how much percent of players have less points than p
divided by 100.
In other words, it represents how much of the players are
weaker than the player who has p points, it's a factor between 0
0 and
1, 1 for tops, 0.5 for average players, and 0 for the weakest ones.
s(r): max(r(p)-C1,C2), to normalize. See C1&C2 description.
n(i): the number of games a player played in the system.
w(i): min(n(i)/N,1)
v(i): the virtual points calculated in the currrent game for player with
ID=i.
T: the highest point currently in the ranking system.
I suggest the following formula for v(i):
v(i)=p(i) + T*(w(ally1)*s(ally1) + w(ally2)*s(ally2) +...)
And when counting the new p(i)'s, use v(i) instead of old p(i).
Let's see an example (i show the points due to the old system so it will
be familiar...in fact it need to be reworked too):
A: 1400, and w/ it he's better than 80 percent of players, and he played
60 games.
B: 1200, and w/ it he's better than 62 percent of players, and he played
20 games.
C: 1000, and w/ it he's better than 50 percent of players, and he played
1 games (he might be either a newbie or a God who just lost his first
game in a close duel againts JB, we don't know yet! :)
D: 1100, and w/ it he's better than 56 percent of players, and he played
20 games.
E: 940, and w/ it he's better than 45 percent of players, and he played
10 games (he seems to be a real newbie, he lost some games but that's ok
from a newbie :)
Now in the game B and C forms an alliance, and D and E an other. A
fights alone. We use N=20, C1=0.4, C2=0.05 in this system, and the #1
player has 1460 pts. At the end we use then the following virtual points
for the players:
v(i)=p(i) + T*(w(ally1)*s(ally1) + w(ally2)*s(ally2) +...)
v(A)=1400
v(B)=1200 + 1460*(1/20*0.1) = 1214.6
v(C)=1000 + 1460*(1*0.22) = 1321.2
v(D)=1100 + 1460*(0.66*0.05) = 1148.18
v(E)=940 + 1460*(1*0.16) = 1173.6
So we can see B's strength just increased a bit, as he allied w/ a
player who we know almos nothing about, and he has low points. C benefit
more, as a much better player joined to him. Note, we have almost no
info about C yet. so all data in which he's a parameter (including
himself) isn't much reliable. Similar for D/E, They're about the same
virtual power, but E benefit more as he got a stronger ally than
himself, unlike D.
So what u think about this formula? I'm sure it's not perfect yet, but
might be a basis for more thinking.
bye, hirisov
- [Freeciv] formula idea for ally counting,
Horn Gábor <=
|
|