Chess engine coding: Tactics and Mates

Discussion of chess software programming and technical issues.

Moderator: Ras

rdhoffmann
Posts: 54
Joined: Fri Apr 21, 2023 3:46 pm
Full name: Richard Hoffmann

Chess engine coding: Tactics and Mates

Post by rdhoffmann »

Hi all,

new forum member here :) I'm a hobby chess engine developer, doing it for fun and as a learning experience in my spare time. My engine has roughly ELO 2500+ (CCRL), that is it can more often than not beat engines rated around 2500. This is due to solid positional play.

My engine has a massive achilles heel though, which is tactics and mates. It finds very little, because I haven't coded anything in that direction. Due to the shallow search depth of only 10 ply or so, it is inferior to almost any chess engine in that regard.

Now my question is simple. Do I need to find ways to search (much) deeper, or should I instead explore selective extensions? If it is the latter, how do I know whether a particular horizon node is promising enough to search deeply?

Any help would be much appreciated :)

Richard
User avatar
lithander
Posts: 915
Joined: Sun Dec 27, 2020 2:40 am
Location: Bremen, Germany
Full name: Thomas Jahn

Re: Chess engine coding: Tactics and Mates

Post by lithander »

Extensions and Reductions are complementary. When you extend a single move it just means you reduce all the rest. A way to extend a promising group of moves is to reduce quiet moves that haven't been very good in prior iterations, in sibling positions or similar positions. (PV, History-, Killer-Heuristic) One of the best ways to extend the search depth without losing much accuracy are null move reductions.

My engine is not doing any extensions at all and exclusively extends through reductions.
Minimal Chess (simple, open source, C#) - Youtube & Github
Leorik (competitive, in active development, C#) - Github & Lichess
rdhoffmann
Posts: 54
Joined: Fri Apr 21, 2023 3:46 pm
Full name: Richard Hoffmann

Re: Chess engine coding: Tactics and Mates

Post by rdhoffmann »

Thank you for your reply, that is a great idea using the results from previous iterations. While my engine does LMR it only uses the most basic ideas from the chess programming wiki, which are completely static and do not take into account any sort of history.