An alternative to IID

Discussion of chess software programming and technical issues.

Moderators: hgm, Rebel, chrisw

User avatar
Rebel
Posts: 6993
Joined: Thu Aug 18, 2011 12:04 pm

Re: An alternative to IID

Post by Rebel »

Terje wrote: Mon Aug 17, 2020 12:16 am Replacing IID with this gains 3-8 elo in Weiss, lower with higher TC / threadcount.
Not bad for changing 2 lines of code :wink:
90% of coding is debugging, the other 10% is writing bugs.
Terje
Posts: 347
Joined: Tue Nov 19, 2019 4:34 am
Location: https://github.com/TerjeKir/weiss
Full name: Terje Kirstihagen

Re: An alternative to IID

Post by Terje »

Rebel wrote: Mon Aug 17, 2020 12:21 am
Terje wrote: Mon Aug 17, 2020 12:16 am Replacing IID with this gains 3-8 elo in Weiss, lower with higher TC / threadcount.
Not bad for changing 2 lines of code :wink:
Only a slight worry that it's negative at very long time controls, but aside from that quite awesome. Simplification with elo!
OliverBr
Posts: 725
Joined: Tue Dec 18, 2007 9:38 pm
Location: Munich, Germany
Full name: Dr. Oliver Brausch

Re: An alternative to IID

Post by OliverBr »

Terje wrote: Mon Aug 17, 2020 12:16 am Replacing IID with this gains 3-8 elo in Weiss, lower with higher TC / threadcount.
I am still wondering: How do you get this "elo-gain"?
By just playing your engine against each other oder by playing against other engines?
Chess Engine OliThink: http://brausch.org/home/chess
OliThink GitHub:https://github.com/olithink
Terje
Posts: 347
Joined: Tue Nov 19, 2019 4:34 am
Location: https://github.com/TerjeKir/weiss
Full name: Terje Kirstihagen

Re: An alternative to IID

Post by Terje »

OliverBr wrote: Mon Aug 17, 2020 12:56 am
Terje wrote: Mon Aug 17, 2020 12:16 am Replacing IID with this gains 3-8 elo in Weiss, lower with higher TC / threadcount.
I am still wondering: How do you get this "elo-gain"?
By just playing your engine against each other oder by playing against other engines?
Playing itself, just like stockfish tests.
OliverBr
Posts: 725
Joined: Tue Dec 18, 2007 9:38 pm
Location: Munich, Germany
Full name: Dr. Oliver Brausch

Re: An alternative to IID

Post by OliverBr »

Terje wrote: Mon Aug 17, 2020 1:00 am
OliverBr wrote: Mon Aug 17, 2020 12:56 am I am still wondering: How do you get this "elo-gain"?
By just playing your engine against each other oder by playing against other engines?
Playing itself, just like stockfish tests.
I see, but... since I have 32-core server to test, I can verify, that a greater ELO against itself does not automatically mean greater ELO against other opponents.
Chess Engine OliThink: http://brausch.org/home/chess
OliThink GitHub:https://github.com/olithink
Terje
Posts: 347
Joined: Tue Nov 19, 2019 4:34 am
Location: https://github.com/TerjeKir/weiss
Full name: Terje Kirstihagen

Re: An alternative to IID

Post by Terje »

OliverBr wrote: Mon Aug 17, 2020 1:45 am
Terje wrote: Mon Aug 17, 2020 1:00 am
OliverBr wrote: Mon Aug 17, 2020 12:56 am I am still wondering: How do you get this "elo-gain"?
By just playing your engine against each other oder by playing against other engines?
Playing itself, just like stockfish tests.
I see, but... since I have 32-core server to test, I can verify, that a greater ELO against itself does not automatically mean greater ELO against other opponents.
Not necessarily, but generally it holds :)
Kieren Pearson
Posts: 70
Joined: Tue Dec 31, 2019 2:52 am
Full name: Kieren Pearson

Re: An alternative to IID

Post by Kieren Pearson »

Adds

Code: Select all

ELO | 1.67 +- 5.05 (95%)
To Halogen. I'm going to merge it anyways because it simplifies IID and removes a lot of the complexity even if it wasn't an elo gainer for me
User avatar
Deberger
Posts: 91
Joined: Sat Nov 02, 2019 6:42 pm
Full name: ɹǝƃɹǝqǝᗡ ǝɔnɹꓭ

Re: An alternative to IID

Post by Deberger »

Committed today in Stockfish: Simplify Away Internal Iterative Deepening
OliverBr
Posts: 725
Joined: Tue Dec 18, 2007 9:38 pm
Location: Munich, Germany
Full name: Dr. Oliver Brausch

Re: An alternative to IID

Post by OliverBr »

This is a complete game-changer and very dangerous to evaluate:
On tactical positions (with empty hash) it doesn't look good, but for normal game play (with constantly filling hash) it looks promising.

Against its former version, it's increasing ELO. The more time, the more gain.
But, I guess, against stronger opponents it's not that good because the surprising effect of super-tactical-position will get lost.

Code: Select all

   # PLAYER             :  RATING  ERROR  POINTS  PLAYED   (%)    W    D    L  D(%)  CFS(%)
   1 OliThink 5.6.5a    :      19     24   263.0     499  52.7  160  206  133  41.3      94
   2 OliThink 5.6.5     :       0   ----   236.0     499  47.3  133  206  160  41.3     ---

White advantage = 33.25 +/- 11.54
Draw rate (equal opponents) = 41.71 % +/- 2.24
later:

Code: Select all

   # PLAYER             :  RATING  ERROR  POINTS  PLAYED   (%)    W    D    L  D(%)  CFS(%)
   1 OliThink 5.6.5a    :      29     17   518.0     957  54.1  324  388  245  40.5     100
   2 OliThink 5.6.5     :       0   ----   439.0     957  45.9  245  388  324  40.5     ---

White advantage = 22.56 +/- 7.89
Draw rate (equal opponents) = 40.92 % +/- 1.50
not much later:

Code: Select all

   # PLAYER             :  RATING  ERROR  POINTS  PLAYED   (%)    W    D    L  D(%)  CFS(%)
   1 OliThink 5.6.5a    :      33     16   547.0    1001  54.6  347  400  254  40.0     100
   2 OliThink 5.6.5     :       0   ----   454.0    1001  45.4  254  400  347  40.0     ---

White advantage = 23.02 +/- 8.06
Draw rate (equal opponents) = 40.40 % +/- 1.55
Very interesting, but:

A tactical endgame position with c5 being the winning move, was detected on ply 16 before,

Code: Select all

../../comp/565/olithink -sd 16 "8/5k1p/1p1pRp2/3P4/PpP3Pp/6bP/6K1/8 w - - 0 2 bm c4c5"
 1   159      0        38  g2f3 
 2   127      0       130  g2f3 b4b3 
 3   132      0       744  e6e3 g3e5 e3b3 
 4   123      0      1203  e6e3 g3e5 e3b3 e5c3 
 5   129      0      2748  e6e3 g3e5 e3b3 e5c3 g2f3 
 6   128      0      3603  e6e3 g3e5 e3b3 e5c3 g2f3 h7h6 
 7   132      0      5134  e6e3 g3e5 e3b3 e5c3 g2f3 h7h6 b3b1 
 8   129      0      7471  e6e3 g3e5 e3b3 e5c3 g2f3 h7h6 b3b1 c3d2 
 9   117      0     18805  e6e3 g3e5 e3b3 e5c3 g2f3 f7g6 f3f4 h7h5 b3b1 
10   121      1     27805  e6e3 g3e5 e3b3 e5c3 g2f3 f7g6 f3f4 h7h6 b3b1 c3e5 f4e3 
11   123      1     40883  e6e3 g3e5 e3b3 e5c3 g2f3 f7g6 f3f4 h7h6 b3b1 c3d2 f4e4 g6g5 
12   113      3     81929  e6e3 g3e5 e3b3 e5c3 g2f3 f7g6 f3f4 c3e5 f4e3 e5c3 e3e4 h7h5 e4f3 
13   113      4    132284  e6e3 g3e5 e3b3 e5c3 g2f3 f7g6 f3f4 c3e5 f4e3 e5c3 e3e4 h7h5 e4f3 h5g4 f3g4 
14   113      7    205042  e6e3 g3e5 e3b3 e5c3 g2f3 f7g6 f3f4 c3e5 f4e3 e5c3 e3e4 h7h5 e4f4 h5g4 f4g4 
15    93     17    536682  e6e3 g3e5 e3b3 e5c3 g2f3 f7g6 f3f4 c3e5 f4e4 e5c3 b3b1 g6g5 b1f1 b4b3 e4d3 c3e5 
16   215    308  12444096  c4c5 b4b3 e6e3 b6c5 e3b3 g3e1 b3b6 c5c4 b6d6 e1a5 d6c6 c4c3 c6c5 a5b4 c5c7 f7g6 g2f3 
move c4c5
will need 25 plies with this alteration:

Code: Select all

./olithink -sd 26 "8/5k1p/1p1pRp2/3P4/PpP3Pp/6bP/6K1/8 w - - 0 2 bm c4c5"
 1   159      0        38  g2f3 
 2   127      0       130  g2f3 b4b3 
 3   132      0       744  e6e3 g3e5 e3b3 
 4   123      0      1203  e6e3 g3e5 e3b3 e5c3 
 5   129      0      2746  e6e3 g3e5 e3b3 e5c3 g2f3 
 6   128      0      3563  e6e3 g3e5 e3b3 e5c3 g2f3 h7h6 
 7   132      0      4997  e6e3 g3e5 e3b3 e5c3 g2f3 h7h6 b3b1 
 8   129      0      6648  e6e3 g3e5 e3b3 e5c3 g2f3 h7h6 b3b1 c3d2 
 9   117      0     13797  e6e3 g3e5 e3b3 e5c3 g2f3 f7g6 f3f4 h7h5 b3b1 
10   122      1     24337  e6e3 g3e5 e3f3 e5d4 g2f1 f7g6 f1e1 d4c3 e1e2 h7h5 f3f4 
11   123      2     53035  e6e3 g3e5 e3b3 e5c3 g2f3 f7g6 f3f4 h7h6 b3b1 c3d2 f4e4 g6g5 
12   113      3     72304  e6e3 g3e5 e3b3 e5c3 g2f3 f7g6 f3f4 c3e5 f4e3 e5c3 e3e4 h7h5 e4f4 
13   115      3     92933  e6e3 g3e5 e3b3 e5c3 g2f3 f7g6 f3f4 c3e5 f4e3 e5c3 e3e4 g6g5 b3b1 h7h6 
14   114      4    121700  e6e3 g3e5 e3b3 e5c3 g2f3 f7g6 f3f4 c3e5 f4e3 e5c3 e3e4 g6g5 b3b1 h7h5 b1g1 
15    79     10    274667  e6e3 g3e5 e3b3 e5c3 g2f3 f7g6 f3f4 c3e5 f4e3 e5c3 e3e4 g6g5 b3b1 h7h5 g4h5 f6f5 e4f3 
16   109     17    485060  e6e3 g3e5 g2f3 f7g6 e3b3 e5c3 f3f4 c3e5 f4e4 e5c3 b3b1 g6g5 b1f1 b4b3 e4d3 c3e5 f1f5 g5g6 
17   109     21    609091  e6e3 g3e5 g2f3 f7g6 e3b3 e5c3 f3f4 c3e5 f4e4 e5c3 b3b1 g6g5 b1f1 b4b3 e4d3 c3e5 f1f5 g5g6 d3e3 
18    90     33    982539  e6e3 g3e5 g2f3 f7g6 f3e4 e5c3 e3f3 c3e5 e4d3 b4b3 d3e4 b3b2 f3b3 h7h5 g4h5 g6g5 e4d3 f6f5 d3c2 
19    93     47   1423662  e6e3 g3e5 g2f3 f7g6 f3e4 e5c3 e3f3 c3e5 e4d3 b4b3 d3e4 b3b2 f3b3 h7h5 g4h5 g6g5 b3b6 f6f5 e4d3 g5h5 a4a5 
20    88     79   2464628  e6e3 g3e5 g2f3 f7g6 f3e4 g6g5 e3f3 g5g6 e4d3 b4b3 d3e4 b3b2 f3b3 h7h5 g4h5 g6g5 b3b6 f6f5 e4d3 g5h5 a4a5 h5g6 
21   110    178   6060338  e6e3 f7g6 g2f3 f6f5 e3b3 g3e1 g4f5 g6f5 b3b1 e1c3 f3e3 f5g5 e3d3 g5f4 b1g1 h7h5 d3c2 c3d4 g1g6 d4e5 c2b3 f4f5 
22   120    299  10722736  e6e3 f7g6 g2f3 f6f5 e3b3 g3e1 g4f5 g6f5 b3b1 e1c3 f3e3 f5g5 b1g1 g5f5 e3d3 h7h5 g1f1 f5g6 d3c2 g6h6 c2b3 h6g5 f1f2 g5h6 f2f5 
23   116    442  16269882  e6e3 f7g6 g2f3 f6f5 e3b3 g3e1 g4f5 g6f5 b3b1 e1c3 f3e3 f5g5 b1g1 g5f5 e3d3 h7h5 g1f1 f5g6 d3c2 g6h6 c2b3 h6g5 f1f7 g5h6 
24   125    785  29501777  e6e3 f7g6 g2f3 f6f5 e3b3 g3e1 g4f5 g6f5 b3b1 e1c3 f3e3 f5e5 b1f1 c3d4 e3d3 d4c5 d3c2 e5e4 c2b3 e4e5 f1e1 e5f4 e1e7 h7h5 e7e6 
25   239   3442 147708818  c4c5 b4b3 e6e3 b6c5 e3b3 g3e1 b3b7 f7g6 b7d7 c5c4 d7d6 e1a5 d6c6 c4c3 g2f3 g6f7 f3e4 f7e7 e4f5 a5b4 g4g5 f6g5 f5g5 e7e8 
26   265   8898 411301300  c4c5 b4b3 e6e3 b6c5 e3b3 g3e1 b3b7 f7g6 b7d7 c5c4 d7d6 e1a5 d6c6 c4c3 c6c5 a5b4 c5c4 b4a5 d5d6 g6f7 d6d7 f7e7 c4c5 
move c4c5

Chess Engine OliThink: http://brausch.org/home/chess
OliThink GitHub:https://github.com/olithink
AndrewGrant
Posts: 1756
Joined: Tue Apr 19, 2016 6:08 am
Location: U.S.A
Full name: Andrew Grant

Re: An alternative to IID

Post by AndrewGrant »

Deberger wrote: Sat Aug 22, 2020 12:05 am Committed today in Stockfish: Simplify Away Internal Iterative Deepening
Hmm.. I would have liked to see SMP tests for that change. Multi-threaded has the possibility of giving you a TT hit you don't "expect", but also the chance to take away a TT hit that you "should" get, if you were in the single threaded world.

There is a parallel in this idea to something I talked to Mark L. about two years ago. Maybe it was an idea in Komodo -- maybe we were just spitballing. The idea was to simply chop a depth off after pruning if the node fell outside the bounds of (alpha, beta) by some margin. If you add the missing TT condition to this, the code presented here seems like a full-blown aggressive version of that idea.

I will try some tests with some variations. I think it can be better than a simplification (I already removed IID some years ago)
#WeAreAllDraude #JusticeForDraude #RememberDraude #LeptirBigUltra
"Those who can't do, clone instead" - Eduard ( A real life friend, not this forum's Eduard )