Author: Stuart Cracraft
Date: 10:30:13 07/15/04
Go up one level in this thread
On July 14, 2004 at 14:01:31, Brian Richardson wrote: >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. Yes -- a fine point. Thanks. Due to a very peculiar bug (also related to hashing), the hash code is now in a state of flux prior to being able to implement the above. > >> 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.