Author: Robert Hyatt
Date: 18:35:46 08/08/99
Go up one level in this thread
On August 08, 1999 at 20:00:45, Vincent Diepeveen wrote: >On August 07, 1999 at 17:58:55, Robert Hyatt wrote: > >>On August 07, 1999 at 08:17:49, Vincent Diepeveen wrote: >> >>>On August 05, 1999 at 22:43:29, Robert Hyatt wrote: >>> >>>>On August 05, 1999 at 17:13:28, Tom King wrote: >>>> >>>>>On August 04, 1999 at 20:00:49, Robert Hyatt wrote: >>>>> >>>>>[snip] >>>>>> >>>>>> >>>>>>I find the following: >>>>>> >>>>>>using SEE to order captures in the q-search, without eliminating any, will >>>>>>shrink the tree about 10% over using something simple like MVV/LVA. But the >>>>>>SEE code will likely cost you more than 10% (unless you are a bitmap program >>>>>>where this can be done fairly efficiently). >>>>>> >>>>>>using SEE to eliminate losing captures can speed you up another 50%, or a factor >>>>>>of two, which is very significant. And no matter how slow your SEE code is, >>>>>>that become a 'winner' of an idea. >>>>> >>>>>I'm seeing a big speedup - it's just the (possible) loss of accuracy which >>>>>concerns me. Having said that, my Q search is pretty "quick and nasty" anyway, >>>>>although I do still do things like probe the hash tables. >>>> >>>> >>>>This is only my opinion, but I spend my time working on the full-width part of >>>>the search (extensions, etc.). The q-search already has _so many_ errors in it >>>>(it is highly selective since throwing out everything but captures is a drastic >>>>step, of course) that I don't trust it at all. I just want it to handle simple >>>>hung pieces and not much else... I'll trust my extensions to find the deep >>>>tactical tricks since then I won't be overlooking pins, forks, skewers, etc. >>>> >>>>When you think about it like that, shrink the q-search and use those nodes in >>>>places where they are more useful. >>>> >>>>Just an opinion, of course... >>> >>>Right, my opinion is different. A good qsearch will give more accurate >>>scores for leafs, so in a set of leafs X, for all leafs x in X we will have >>>a more reliable score. >>> >>>So whatever plydepth we get, we will get a positional more trustworthy score, >>>which with backtracking will result in a better and more reliable score. >>> >>>Greetings, >>>Vincent >> >> >>Most searches have three parts: (1)full width to depth=N; (2) highly selective >>until a terminal position is reached; (3) static evaluation. >> >>I tend to put my faith in (1)... you want to put yours in (2). I think it is >>nothing more than a tradeoff... If your (2) is a lot bigger than mine (and it >>is if you do checks/out-of-check moves there) then your (1) is smaller than >>mine. In some positions, you will do better. In others, I will do better. >> >>The real question is, in real games, which works better? The jury is still >>out, but not doing checks is not getting me killed... I did checks in the >>q-search many versions ago. I'm going to test them again pretty soon. But >>the real question is which plays better? >> >>I don't think that is anywhere near a "resolved issue"... > >We agree here that this is not a resolved issue, as so many things >depend upon it. > >The only thing that is sure is that pruning on alpha in the qsearch is >dubious (assuming you have a static evaluation which can produce some >real scores). > >The only thing we can do to reduce overhead is pruning on beta. > >so basically: > if( !check ) { > if( score >= beta ) > return score; > else for all interesting moves: > try move. > } > else { > for all moves: > try move. > } > >Now what i personally think is that >the influence of TRYING a move in qsearch is huge >on the hashtable. > Note that it isn't a factor for me.. I don't store any q-search nodes in the hash table at all... >It has of course great relation with evaluation. >Suppose evaluation evaluates pieces that can be captured, so >evaluation more or less evaluates using SEE. > >That definitely removes the need for the number of >tried captures. > >Just exchanging is simply not needed. > >In diep i'm not having recapture extensions, but i do >capture usual equal pieces, even when there is big suspicion >that it can be captured back by the other side. > >I prefer to do as much as possible within mainsearch, as >i can use there my hashtables better. Therefore i limit >the number of moves tried in qsearch drastically. > my feeling exactly, so far... >First thing to do is introduce 2 new node counts; >node counts that measures number of nodes done in > > a) qsearch > b) brute force part > >Some 5 years ago when the first versions of DIEP >were made i already figured out the more moves i >tried in a, the less nodes i needed in b. > >So first word i thought of: "trade-off". > >However total node count could drastically increase >at smaller depths when doing more moves in a. At >bigger depths influence was harder to define, as >branching factor got slightly better. > >Later analysis were that some real silly moves in >qsearch, like some silly checks and queen captures >covered pawns, wasted bunches of nodes. > >So some knowledge in move selection >improved this, still keeping the good branching factor. > >Yet this 'trade-off' we will keep of course. > >It's very important to realize *what* nodes in b >get influenced by a. > >I'm using nullmove R=3. So this means that i nullmove >last 4 ply using the qsearch. I've been doing a 'hybrid' for nearly a year... R=3 fairly close to the root, R=2 beyond some threshold that I don't remember what it is... > >In fact this way of nullmoving is only detecting whether >there are threats against the position. The better i see >the threats in qsearch, the more reliable nullmove will be >the last 4 ply. It's not difficult to imagine a position >where just using qsearch to nullmove misses positional things. > >Of course you search so much deeper because of nullmove that you >identify those positions anyway, but then the unreliable score here >causes the hashtables to get bad scores. Now those scores won't >be backtracked to the root. They will however influence the >search tree considerable in move choices next iteration. > >Now every iteration there are exponentially more nodes that >have this phenomena. > >So in short a better qsearch gives my program in big amounts >of positions a more reliable score which >takes care for a smaller branching factor. > >However there are clearly tradeoffs, you cannot do *all checks*. >You cannot do *all captures*. You cannot do *all* interesting moves. > >Vincent
This page took 0.02 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.