Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Interpreting my analysis of the Fine 70 position.

Author: Brian Richardson

Date: 11:01:31 07/14/04

Go up one level in this thread


On July 14, 2004 at 13:24:53, Stuart Cracraft wrote:

>On July 12, 2004 at 18:40:24, Dieter Buerssner wrote:
>
>>On July 11, 2004 at 23:15:03, Stuart Cracraft wrote:
>>
>>>Regarding 26 ply in Fine 70, my problem is simply that my code with
>>>my hardware can't get there in a reasonable period of time. 4 1/2
>>>seconds for 21 ply won't give an answer for 26 ply for quite a long
>>>time in my case. (22 ply = 55 seconds), 23 = 100 seconds, 24 = 123 seconds,
>>>25 ply = 297 seconds, 26 ply = 780 seconds. And it sees the two pawns
>>>there as you predicted. But later at the 30th ply it sees only one
>>>pawn advantage.
>>>
>>>So my code must be non-optimal or the hardware is too slow or a combination.
>>
>>I would fear, it is the code. Many engines will solve this in a fraction of a
>>second on modest hardware. I would suspect a (serious) problem with hashing,
>>when seeing the times you give. There are so few pieces on the board, and much
>>is blocked. You must get very many transpositions, and because there are few
>>moves possible anyway (for a long time - until one pawn queens), typically
>>engines reach depth 30 or more here extremely fast.
>>
>>Regards,
>>Dieter
>
>Hi Dieter,
>
>Please see if you see anything obvious with my basic search.
>Any comment you make is welcome.
>
>search(depth,alpha,beta)
>   if draw-rules-met return draw
>   if extensions-met depth+=1
>   if depth <= 0 return quiesce()
>   try to retrieve hash position of current position
>     if length retrieved >= depth then
>       if flag is VALID, return score from hash table for position
>       if flag is LOWERBOUND, set alpha to MAX(score-from-table,alpha)
>       if flag is UPPERBOUND, set beta to MIN(score-from-table,beta)
>       if alpha>=beta return score
>       set flag meaning hashed
>     endif
>    if null-move-ok, do it (not endgame, not incheck, not 2 in a row already)
>    if hashed flag above is set, add a value to make hashed move be searched 1st

Try searching the hash move _before_ generating the others since
you may never need to generate them.

>    generate moves
>    if hashed flag was set add value to make hashed move 1st
>    make & search 1st move with best = search(depth-1,-beta,-alpha)
>    unmake
>    while (best < beta)
>       if best > alpha
>          alpha = best
>          set best move to current move if top of tree
>           :
>        endif
>       if search timed out, return(best)
>       if end of move list, break from while-loop
>       make next move
>       value = -search(depth-1,-alpha-1,-alpha)
>       if (value > alpha && value < beta)
>          best = -search(depth-1,-beta,-value)
>       else if (value > best)
>          best = value
>          set best move to current move if top of tree
>       unmake
>    end
>    if no legal moves found
>      if incheck
>        best = -MATE+depth
>      else
>        best = STALEMATE
>    endif
>    flag = VALID
>    if (best <= alpha) flag = UBOUND
>    if (best >= beta) flag = LBOUND
>    if (length <= depth and there is a best move to store)
>       store(depth, best, flag, move)
>    endif
>    return(best)
>
>Greetings,
>
>Stuart



This page took 0 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.