Sven Schüle wrote:Daniel Shawul wrote:Two points to consider.
a) The extension/reductions are not necessarily done at the root. Program B's N+1 th iteration
will be same as A's Nth below the node where selectivity is applied. When B does its N+1 th iteration
it spends more work on other parts of the tree first, then when it reaches that node where selectivity is
applied everything below will be similar. B's N+1 th iteration is D + 1 _everywhere_ and D at reduced moves,
and A's Nth iteration D everywhere, and D + 1 only at the check move.I think A's way of doing it is more aggressive and hence why
it sometimes leads to tree explosions.
b) As I tried to point out with the specific case of single reply to check, if we simplify Program A and B's behaviour to the
absurd, Program A's behaviour will be to extend single replies, and Program B's is to do nothing. We already
know that Program A will have higher BF with the extension (at least for me). The reason why we been doing it is that
the selectivity will result in a better search overall. Note here that if the single reply extension was done only at the
root, the behaviour would have been the same.Taking this further, where the good moves take a lot more nodes than the bad ones (which is usually the case),
similar behaviour could be found.
Maybe you misread or misunderstood Bob's example:
Bob wrote:Here's a question to ponder. Program A extends checks by 1 ply. And nothing else. Program B reduces everything but checks by 1 ply. How do they compare?
So iteration N of program A does depth N+1 if there is one check on the move path, and depth N everywhere else (I don't care about move paths with more than one check here). Iteration N+1 of program B does depth N+1 for the non-reduced checks, and depth N everywhere else. I can only see a difference for some leaf nodes where the last move gives check but program B does not extend checks. This should not make a huge difference - but o.k., it is not 100% perfectly the same search. At least the overall number of nodes searched by A and B would be very close, so A would finish N roughly when B finishes N+1.
@Bob: I hope I have interpreted your example correctly.
Sven
No, I don't think so. Let's regard a four-ply search and a move sequence of four plies without any checks first:
Program A will search the move sequence to a depth of four plies + qsearch.
Program B, however, will NOT search the move sequence to a depth of three plies, but only to a depth of two plies.
Why?
Given a Search() function which has the remaining depth to horizon as only parameter,
program A searches: RootSearch() calls (move 1) Search(3) calls (move 2) Search(2) calls (move 3) Search(1) calls (move 4) Search(0) which immediately returns Qsearch().
Program B searches: RootSearch calls (move 1) Search(2) calls (move 2) Search(0) which immediately returns Qsearch().
So Program B will search only HALF of the search depth of Program A.
However, Program B will reach the double nominal depth of program A. So PV and evaluation of Program B and A after a certain time _are_ equivalent.
Program B actually _has_ a lower branching factor than program A (EBF(B) = sqrt(EBF(A))) and can thus finish two _nominal_ plies when program A searches only one. _However_, this has no consequences for the difference of playing strength between B and A because two _nominal_ plies of program B are equivalent to _one_ ply of Program A.
Conclusion: Program B searches to a nominal depth which is twice as much as the one of program A. However, playing strength, PV and evaluation are exactly the same.