Author: Andreas Herrmann
Date: 05:06:31 01/23/02
Go up one level in this thread
On January 22, 2002 at 19:03:51, Gerd Isenberg wrote: >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 Hi Gerd, I don't know if it is possible to find all mates static without generating all moves. I hope for you that you find a way for all possibilities. Have your heard, that someone has implemented such a code or is it only an idea from you? meet you in some weeks in Paderborn Andreas
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.