Hello Kai:
Laskos wrote:Ajedrecista wrote:
The following thread is probably related to that:
1 draw=1 win + 1 loss (always!)
It is a little long but worthwhile.
Regards from Spain.
Ajedrecista.
I think I missed this thread, thanks Jesus.
I fried my main quad desktop, so on a crappy notebook I did a simple test. With Cutechess-Cli, I played a gauntlet against Houdini 4 at 10,000 nodes per move, with Stockfish at 1250, 2500, 5000, 10,000, 20,000, 40,000, 80,000 nodes per move, 1000 games each match. Daniel and Adam used much more data points from rating lists databases to show how the draw rate behaves, but my test, with few points, is more clinical, more games per data-point.
w and
d are win and draw rates:
Rao-Kupper:
Code: Select all
1 draw = 1 win + 1 loss
d = C1*w*(1 - w - d)
Solution: d -> (C1 w - C1 w^2)/(1 + C1 w)
Fitting to data points (least squares): C1 = 1.6821
Davidson:
Code: Select all
2 draws = 1 win + 1 loss
C2*d^2 == w*(1 - w - d)
Solution: d -> (-w + Sqrt[4 C2 w + w^2 - 4 C2 w^2])/(2 C2)
Fitting to data points (least sqaures): C2 = 3.4133
Empirical comparison of the two models with the data (SF vs H 1,000 games matches):
It seems Davidson model fits better the data points than Rao-Kupper. The standard deviation in draw rate for Davidson model is 0.8%, for Rao-Kupper 2.1%.
Conclusion: from my small sample, it seems that 2 draws = 1 win + 1 loss fits better data than 1 draw = 1 win + 1 loss (which BayesElo uses).
Thank you very much for your effort!
I think I did not understand the concept, but it could be D^
a = C*W*L with something like
a draws = 1 win + 1 lose? My common sense says that the logical values of
a are between 1 and 2. I took seven pairs of (W, D) values from your graph: (0.05, 0.1), (0.07, 0.13), (0.19, 0.19), (0.35, 0.21), (0.62, 0.19), (0.81, 0.14) and (0.89, 0.08). I did C = (D^
a)/(W*L) with each value and I did some computations with many values of
a and C, just searching the minimum of SUM{[(C*W_i*L_i)^(1/
a) - D_i]²; i = 1, ..., 7} and the minimum of that sum happens in
a > 2. Here is my initial Fortran code:
Code: Select all
program b
implicit none
integer,parameter::imax=7,pasos_a=1000,pasos_c=1000
integer::i,a0,c0
real(2)::w(imax),d(imax),l(imax),a,c,ci(imax),cimedio,cimin,cimax,k,s(imax),suma,suma2(0:pasos_a,-pasos_c/2:pasos_c/2)
w(1)=5d-2;w(2)=7d-2;w(3)=1.9d-1;w(4)=3.5d-1;w(5)=6.2d-1;w(6)=8.1d-1;w(7)=8.9d-1
d(1)=1d-1;d(2)=1.3d-1;d(3)=1.9d-1;d(4)=2.1d-1;d(5)=1.9d-1;d(6)=1.4d-1;d(7)=8d-2
l=1d0-w-d
open(unit=10,file='a_c_suma.txt',status='unknown',action='write')
do a0=0,pasos_a
a=1d0+2d0*a0/pasos_a
do i=1,imax
ci(i)=(d(i)**a)/(w(i)*l(i))
end do
cimedio=sum(ci)/(1d0*imax)
cimin=min(ci(1),ci(2),ci(3),ci(4),ci(5),ci(6),ci(7))
cimax=max(ci(1),ci(2),ci(3),ci(4),ci(5),ci(6),ci(7))
k=max(cimedio-cimin,cimax-cimedio)
do c0=-pasos_c/2,pasos_c/2
c=cimedio+c0*k/pasos_c
do i=1,imax
s(i)=(((c*w(i)*l(i))**(1d0/a))-d(i))*(((c*w(i)*l(i))**(1d0/a))-d(i))
end do
suma=0d0
do i=1,imax
suma=suma+s(i)
end do
write(10,*) a,c,suma
suma2(a0,c0)=suma
end do
write(10,*)
end do
close(10)
write(*,*) 'Min.: ',minval(suma2)
end program b
Then I narrowed the bounds of
a for get a better resolution, from 2.05 to 2.1 because my first try indicated that the minimum is close to
a = 2.075. Later I tried
a between 2.075 and 2.076 because my second run indicated a minimum near
a = 2.07555. I finally got:
Code: Select all
a = 2.07555700000 C ~ 0.264418857063 sum ~ 1.156193741653E-03
This sum must be understood like a kind of error, that is why I searched the minimum.
Does a > 2 have sense?
------------------------
Just for verificate the correctness of my results, my minimum error for
a = 2 (Davidson) is for C ~ 0.302587148790. With your notation: C2 = 1/C ~ 3.3048 while you got 3.4133... this difference should be explained as I took approximated pairs of values from the graph and not the exact ones. I do not know how did you compute the standard deviation. For
a = 1 (Rao-Kupper), I got C ~ 1.64111427372 while you got C1 ~ 1.6821, with the same explanation as before. This time, I only computed numbers with
a = 1 and
a = 2 but with many more possible C values.
I plotted errors in a 3D graph using Derive 6 (axis:
a, C, sum) for
a between 1 and 2, and it looked like a smoothed surface with decreasing values of the error (a better fit) with raising values of
a and decreasing values of C. I hope I am right.
Of course my calculations should be valid only for these pairs of values. I am clueless in a more general scenario.
Regards from Spain.
Ajedrecista.