Computer Chess Club Archives




Subject: Static Mate Detection

Author: Gerd Isenberg

Date: 16:03:51 01/22/02

Some notes on Static Mate Detection (excuse my bad english)

In December, when i entered CCT4, i was quite sure to have the
Winboard-Interface ready with the help of some free days around christmas and
new year. But instead i had to solve some problems with the engine itself. Some
bugs in my static mate detection made me crazy.

Mate detection is part of the kingsafety-routine after or during scanning all
adjacent king squares, contolled by enemy pieces, specially sliders. Before,
during Piece evaluation, sevaral BitBoards got prepared with informations like
priorised square controls for both sides (tabu for kings, semitabu for queens
and rooks), squares, at least controlled twice (but no batteries), squares,
controlled by Sliders, RookMover and so on. Detection of pinned pieces and pawns
was also done. During "adjacent king squares controlled by slide"-scan, few more
BitBoards, indexed by direction (hor, ver, a1h8, h1a8) from one exclusive
sliding attacker, are evaluated to determine possible x-ray interrupts of the
potential mater, giving the king a possible escape square.

Mate detection is tried in following order:

1.supported queen mates adjacend to king (during the scan)
2.queen mates with straight distance two
3.mates with sliding pieces, if king can only move/capture in one or no
direction and no intermove (mate in one), or only worthless, mate delaying
intermoves are possible (determing them was the main problem) (mate in N; N>1).
Special care if distance to king is one or two (must be bishop or rook)
4.mates with knights
5.mates with pawns

Discoverd mate detection is not implemented, even if the information, a
discovered check is possible, is present. No mate detection if discovered slider
controls an exclusive escape square - and no mate detection if my statements are
too safe (hopefully not so often).

In my debug version, everery time a static mate is detected, a confirmation
search is done. If the search doesn't confirm the mate in one or N, i had an
error in my detection routine, the program aborts with a FEN-String in the
Clipboard. Shocked how often it occures.

Some examples:

Rd8+ mate in 2 ??

[D] 6k1/rq3pp1/p7/3R1NPQ/1p2r2P/8/PR4K1/8 w - -

Qc8+ mate in 2 ??

[D] 7k/4R2p/pp2Q3/3r2P1/P4p2/8/q7/2B2K2 w - -

one of the early ones:
Bf3+ mate ?? (h3 was controlled twice before, stil assumed as tabu)

[D] 1N4k1/P4p1p/8/4p3/4ppbb/4q3/2Q3KP/5B2 b - -

If the eval detects a mate for the side to move, it directly returns true mate
scores. If the side to move is forced to get mated, the search may get extended
by some fractional plies, specially by one ply if leave node and greater alpha.
Nullmove makes not much sence here.

I'm not quite sure whether a static mate evaluator pays off. It helps of course
in many tactical positions. With BitBoard-power it's rather loopless and not so
expensive as you may think - but there are a lot positions where many conditions
hit, but the final not. First the cheap one and later the one, which require
further calculation. On the other hand the whole thing is also used to get
positional values for the king or involved pieces (possibly huge, for example
only a heavy piece can "safe" intermove a check by a bishop, or an important
defending piece is attacked by a pawn).

It's very fascinating to look for safe boolean statements, which simply say
"mate". But it prevents me from doing more important, such as Winboard support.
I hope my C++ classes are well prepared for winboard. I deriver CSearchTree from
CNode (may be not a good idea to deriver from an instanciable class). After some
initialisations like setting up a Position, a CSearchTree-Object is able to
perform a search thread, expanding itselfs as a rootnode and CNodes as childs on
its stack.

cheers Gerd

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