Recognizer Results

In order make recognizer results compatible with the results of probes from standard transposition tables, we compose them of bound and score information. Incorporating bounds into their results further increases the usefulness of recognizers because it enables them to return a meaning of the kind ``this is at least/at most a draw/loss/win for Black/White''. Furthermore, recognizer results may contain an expense indicator that tells the controlling search whether to store them directly into the standard transposition tables. For the sake of clarity, the following descriptions elaborate on each of the three proposed result items.

The bound information determines if the recognizer score is exact, a lower bound, or an upper bound. Because of the intended similarity we suggest to adopt the same values for identification of the different bounds as those already in place within the transposition tables. We introduce the special new bound value fail bound for the sole purpose of signalling unsuccessful recognitions.

In general the search does not store results of successful interior-node recognitions directly into the standard transposition tables because they do not have a best move associated with them. Moreover, recognizer calls are normally much cheaper than even pure quiescence searches such that it does not make much sense to clog precious transposition entries with them. In case of really expensive recognition results (e.g. external endgame database values), however, direct storing might be beneficial. To this end the recognizer supplies the expense information as part of its result. Based thereon, the controlling search decides if it deems direct storing of the recognition result worthwhile.

The score information features just the according numerical value.

Due to the diversity of information that our recognizer results contain, their handling after successful recognitions proves to be somewhat involved. Figure 1.3 provides the skeleton of a normal search function which outlines the necessary additions. Because of its verbose ANSI-C style and the numerous embedded comments, this search skeleton is quite self-explanatory. It assumes all not explicitly declared identifiers to be suitably defined and initialized. Please note how closely the actions resemble the handling of bounds and scores as read from standard transposition tables. Successful recognitions actually ``massage'' the search tree in a similar manner as successful accesses to transposition tables. Beside causing direct cutoffs by exact, fail-high, or fail-low scores, recognizer results may also shrink the alpha-beta window (raise alpha or lower beta) at the current node while the search still descends on its way down in the game tree. Upon lowering beta, the search skeleton carefully keeps track of the largest upper bound (denoted by upper) that it may return. It does so in the same way as it keeps track of the best score so far. Fail-high cutoffs respect this upper bound by returning the minimum of upper and the best score so far as their result. This works flawlessly because beta  <= upper always holds.

Figure 1.3: Search with Result Handling of Successful Recognitions.
\end{tt}\end{raggedright} \smallskip \smallskip}}}}\end{center}} %

Created by Ernst A. Heinz, Thu Dec 16 23:28:11 EST 1999