Quiescence Search Performance

Discussion of chess software programming and technical issues.

Moderators: hgm, Rebel, chrisw

User avatar
cdani
Posts: 2204
Joined: Sat Jan 18, 2014 10:24 am
Location: Andorra

Re: Quiescence Search Performance

Post by cdani »

cdani wrote:Will be interesting at least to do some findings on what is happening, when those quiet moves are being accepted and what are they contributing.
From the start position, the first quiet move accepted in quiescence in Andscacs is 3.Nd2 after the line 1.e3 e6 2.d4 Bb4+. So an answer to a check, check that is done in the first level of quiescence.

And the first quiet move that is not an answer to a check that is accepted in quiescence is 2.Nc3 after 1.e3 d6.
Maarten Claessens
Posts: 106
Joined: Mon May 12, 2014 10:08 am
Location: Near Nijmegen

Re: Quiescence Search Performance

Post by Maarten Claessens »

brtzsnr wrote:And another one. Feel free to check if these are pathological cases for your QS, too.

[d] r1bq1rk1/1p1n1pp1/2pb3p/p1Npp3/1PPPn3/P3PN2/3BBPPP/R2Q1RK1 b - - 1 13
This seems indeed a tough one:

Code: Select all

WaDuuttie> sb r1bq1rk1/1p1n1pp1/2pb3p/p1Npp3/1PPPn3/P3PN2/3BBPPP/R2Q1RK1 b - - 1 13

WaDuuttie> qs
e4d2 -8 (176)
e4c5 -46 (9)
d7c5 20 (50)
d6c5 -32 (13)
a5b4 42 (207)
e5d4 36 (1)
d5c4 -98 (1)
e4f2 bad
Quiesce: 42 / 13 (458 nodes)

WaDuuttie>
Please note that for this debug-output qs is called with boundaries (-infinite, +infinite). In real search most of the time a more narrow window will be used, resulting in a smaller number of nodes.
Nothing is unstable (Lawrence Krauss)
Maarten Claessens
Posts: 106
Joined: Mon May 12, 2014 10:08 am
Location: Near Nijmegen

Re: Quiescence Search Performance

Post by Maarten Claessens »

Another way of looking at these "problem-positions" is calculating their capture-perfts for different depths. For this I replaced in the perft-routine the funcion generate() by generate_captures() as used in qs (only captures and promotions to a queen are generated).

[d] rr4k1/bb2q3/p1n1p3/3p3p/1P1PnppN/P1NQ3P/3B1PP1/2RBR1K1 w - - 2 28

Code: Select all

 1 8
 2 66
 3 521
 4 3,619
 5 26,816
 6 167,455
 7 1,101,130
 8 6,223,305
 9 34,612,088
 0 173,570,758
11 792,938,194
[d] 3rnbk1/2q5/p2r1ppp/1p3pP1/PP1n3P/2NB4/2PB1R1Q/4R1K1 b - - 1 28

Code: Select all

 1 5
 2 45
 3 283
 4 2,385
 5 15,795
 6 120,904
 7 745,102
 8 4,995,007
 9 26,091,105
10 146,935,384
11 597,170,806
[d] r1bq1rk1/1p1n1pp1/2pb3p/p1Npp3/1PPPn3/P3PN2/3BBPPP/R2Q1RK1 b - - 1 13

Code: Select all

 1 8
 2 56
 3 376
 4 2,316
 5 14,085
 6 79,134
 7 432,137
 8 2,242,959
 9 10,894,645
10 51,925,039
11 222,211,044
When you perft deeper the numbers eventually stop growing, because the position runs out of captures.
Nothing is unstable (Lawrence Krauss)
theturk1234
Posts: 52
Joined: Tue Jul 12, 2016 5:28 am

Re: Quiescence Search Performance

Post by theturk1234 »

I wonder if null move pruning could be used in QS... I think I'll try it.
brtzsnr
Posts: 433
Joined: Fri Jan 16, 2015 4:02 pm

Re: Quiescence Search Performance

Post by brtzsnr »

Stand-pat is the null move equivalent in QS. You are already doing it, afaiu.