Newsgroup: it.hobby.scacchi
Titolo: Formula Elo

La formula approssimata per calcolare il risultato atteso in base alla
differenza di rating č 1/(1+10^(-diff/400)) mentre quella "normale" č qui:
http://www.vogclub.com/ratings/Image11.gif
Siccome non sono un matematico e mi serve implementarla (quella precisa),
c'č un algoritmo o una "traduzione" in funzioni piů comprensibili? Il
calcolo integrale che studiai nel corso di Analisi 1 mi č entrato da un
orecchio e uscito dall'altro :)
Alex

 ha scritto nel messaggio
news:qiw19.158175$vm5.5...@news2.tin.it...

Non capisco cosa tu voglia dire.
Devi calcolare l'integrale, ovviamente con metodi numerici. Ti conviene
farlo fare a qualche apposito programma, vedi Derive, o simili.
CIao,
Francesco

 farlo fare a qualche apposito programma, vedi Derive, o simili.
Voglio dire che non so come calcolarlo, e non posso utilizzare Derive o
simili perché devo implementare il calcolo in un programma. Quindi cerco un
algoritmo, una serie di calcoli da compiere, per poterlo tradurre in
software. Siccome non sono capace di calcolare l'integrale, chiedo aiuto a
chi lo sa fare :)
Alex

 ha scritto nel messaggio
news:Z%w19.158465$vm5.5...@news2.tin.it...

Beh, se vuoi ti posso indicare anche io qualche algoritmo, che comunque
sara' sempre approssimato. Perche' non inserisci nel programma la tabella
delle percentuali attese per differenza elo, che tra parentesi e' ricava
dalla solita formula per approssimazione ?
Ciao,
Francesco

 dalla solita formula per approssimazione ?
Se mi indichi tu gli algoritmi mi fai un grosso piacere; la tabella FIDE
http://handbook.fide.com/handbook.cgi?level=B&level=02&level=10
 purtroppo
(per modo di dire) utilizza il calcolo esatto, e confrontandola con quella
approssimata (se vuoi la metto in rete, ma penso che tu possa calcolarla in
un attimo), presenta delle differenze. Necessitando di calcoli precisi
preferirei la soluzione dell'algoritmo per la formula esatta, anche se è
vero che l'errore commesso con l'approssimata, ricorretta con i valori della
tabella, sarebbe minimo. Al tuo buon cuore :)
Alex

 calcolo integrale che studiai nel corso di Analisi 1 mi è entrato da un


 ha scritto nel messaggio
news:nkx19.158606$vm5.5...@news2.tin.it...

Mi sa che nel mio primo post non mi ero spiegato.
Il mio suggerimento era di implementare nel tuo programma pari pari la
tabella FIDE, cosi il programma non deve rifare ogni volta i calcoli, e hai
le differenze elo esatte (dal punto di vista della FIDE)
Francesco

 Francesco
Io penso invece che nell'era dei calcolatori non si debbano assolutamente
usare tabelle e interpolazioni. I calcolatori servono proprio per arrivare
al risultato nel modo piu' diretto possibile.
La formula che costituisce il risultato cui era pervenuto Arpal Elo e'
questa:
pa=1/2+ 1/sqrt(pigreco)* ((INTEGRALE da 0 a d/400) e^(-u^2) du)
(come scriverlo in altro modo senza usare i simboli matematici?)
dove
pa = probabilità attesa
d  = differenza di punteggio fra i due giocatori
da qui il calcolo del nuovo punteggio è
En = Ev + K (P-pa)
En = nuovo punteggio Elo
Ev = vecchio punteggio Elo
P = punti fatti
pa = percentuale d'attesa calcolata con l'integrale
K = coefficiente che vale 30 per CM, 1N, 2N; 20 per MF, M; 10 per GM, MI
L'integrale non e' difficilissimo da calcolare, se poniamo x=d/400 viene
x - x^3/3*1! + x^5/5*2! - x^7/7*3! + ... ecc. ecc.
dove il simbolo ! indica come al solito il fattoriale di un numero
( es.: 3! = 1*2*3 )
gia' calcolando pochi termini si ottiene una precisione sufficiente.
Ma per rendere le cose ancora piu' accessibili si puo' notare che esiste la
cosiddetta
"funzione degli errori" (che troviamo implementata in excel, mathematica,
derive ed in tutti
i programmi che trattano l'algebra:
erf(x)= 2/sqrt(pigreco) * ((INTEGRALE da 0 a x) e^(-u^2) du)
notata la somiglianza con la formula di Elo?
Quindi si può scrivere quest'ultima:
pa= 1/2 + 1/2 erf (0, d/400)
Se ad esempio si vuole implementare il calcolo in una cella di una tabella
Excel, basta
inserire la formula:
=ASS((G9<1)-(1/2+FUNZ.ERRORE(0;ASS(G9)/400)/2))
dove nella cella di riferimento G9 e' contenuta la differenza di punteggio
fra i due
avversari (due cosette circa questo esempio: 1. ASS indica il valore
assoluto della
differenza che puo' essere sia positiva che negativa e di questo tiene conto
la prima
condizione logica (G9<1) che da' il segno giusto alla formula; 2. La
FUNZ.ERRORE(), che credo
erf() o error_function() nella versione in lingua originale, non viene di
solito installata
nel setup standard di Excel, occorre completare l'istallazione). Si avra'
così la precentuale
di attesa con tutta la precisione voluta.
Ora una semplice implementazione BASIC, facilmente estendibile ad altri
programmi:
diff = (Elo1 - Elo2)
z = (diff / 400)
n = 0
FOR i = 1 TO 30 STEP 2
s = ((-1) ^ n * ((z) ^ i) / (i * FNFact#(n)))
su = su + s
n = n + 1
NEXT
Pa = su / SQR(3.14159) + 1 / 2
PRINT Pa
dove la funzione FNFact#(n) che calcola il fattoriale deve essere definita
da:
DEF FNFact# (x)
   STATIC Tmp#, i
   Tmp# = 1
   FOR i = 2 TO x
      Tmp# = Tmp# * i
   NEXT i
   FNFact# = Tmp#
END DEF
Spero di non averti confuso le idee ad Alex, ma e' piu' facile da fare che
da dire!
ciao,
Carlo
PS. il mio indirizzo email va letto da destra a sinistra

 x - x^3/3*1! + x^5/5*2! - x^7/7*3! + ... ecc. ecc.
Perfetto: chiedevo solo questo! Grazie!
Alex

 (...)
L'ho scritta in PHP: sono esattamente 4 righe e funziona perfettamente.
Ora, per la formula inversa ho utilizzato delle semplici approssimazioni
successive; funziona perfettamente e rapidamente, ma la soluzione non è
"moralmente" pulita; per caso, è possibile calcolare anche una formula
inversa, sempre con metodi numerici?
Alex

 inversa, sempre con metodi numerici?
scusami, non ho capito bene cosa intendi per "formula inversa" e per
"moralmente pulita". Mi puoi spiegare meglio?
Carlo

 "moralmente pulita". Mi puoi spiegare meglio?
Sì. La formula di cui abbiamo parlato è la P(D), che dà la probabilità di
vittoria in funzione della differenza rating.
A me serve anche la D(P).
Al momento la trovo con approssimazioni successive (esempio: mi serve la
D(121). Provo P(0,6), è maggiore, provo D(0,55) è minore, provo D(0,575) e
così via.) Questo lo chiamo moralmente poco pulito :) Se ci fosse una
formula inversa, pur ottenendo lo stesso risultato, sarebbe, come dire, un
metodo più pulito :)
Alex

metodo piů pulito :)
Scusa, evitami di scavare nella montagna di messaggi... Qual'č la
formula della quale vorresti l'inversa?
Ciao!
Marco
xprofx(AT)katamail_punto_com

 formula della quale vorresti l'inversa?
Questa (direttamente dalla tastiera di Carlo Mazzoni):
La formula che costituisce il risultato cui era pervenuto Arpal Elo e'
questa:
pa=1/2+ 1/sqrt(pigreco)* ((INTEGRALE da 0 a d/400) e^(-u^2) du)
(come scriverlo in altro modo senza usare i simboli matematici?)
dove
pa = probabilità attesa
d  = differenza di punteggio fra i due giocatori
Alex

In merito alla funzione inversa del calcolo dell'Elo richiesta da Alex, per
sapere a quale differenza di punteggio si riferisce una determinata
percentuale d'attesa, credo si possa trovare la soluzione...
soltanto che dovrei lavorarci su un po' e ora, con tutti i miei colleghi in
ferie, non ho nemmeno un minuto di tempo.
Alex, scusami, prometto di farlo per il fine settimana, fra sabato e
domenica, poi riferiro'.
ciao,
Carlo