Issues known and planned for upcoming releases.
This is the TODO.md file for belofte, a promising chess program released under GNU - GPL v2.0. This list is what we call, a TODO list.
UI improvements
- Command line input does not support key-up (history) and sometimes inserts characters when editing input line (use of del/backspace). Evaluate using readline
- If
go is being run from a script, still allow ? break. Useful for benchmarking tests;
- Allow to pass commands with parameters on the command line;
- Running
@script file inside instance when having started with @script file is not possible;
- During
load, also fill in PGN tags;
UCI interface improvements
- Be able to resign, maybe by annotating the move score when returning move;
- Feedback to interface on
info command. Options to be added: refutation (UCI_ShowRefutations=true) currline (UCI_ShowCurrLine=true), cpuload, sbhits, tbhits, hashfull, multipv, ...
- Implement
UCI_Analyze;
- Fix
UCI_ShowCurrLine, if not set, only show new best line;
Xboard interface improvements
- Act on
otim command to change playing style in case of time pressure;
- Take into account next time control using remaining moves;
undo command does break game history (eg. game or save commands);
- No documented way to undo
sd command, (sd 50 undoes, undocumented);
- Be able to resign;
- Support
draw command;
- Implement
result command;
- Implement
option command;
Testing improvements
- Implement CECP
devide command;
- Allow to break perft test suites;
ls command allows pattern or wildcard;
- Add resetsettings so multiple testcases can be run one after another;
Engine improvements
- AB search - cut off at certain depth if score does not improve;
- Do consider a single possible move as not influencing depth, increasing search depth of AB search;
- Split initial move evaluation from real evaluation, reuse initial evaluation to moderate real evaluation (allowing to score moves instead of resulting position);
- Threefold repetition is not looking at variations during search and is only looking at game history;
- Keep best move of previous variation until score gets increased or refuted;
- Null-move pruning;
Position evaluation improvements
- Take into account space occupation;
- Take into account mobility (number of moves when not considering check);
- Take into account king safety (number of checks possible, number of empty fields that can lead to check with available material, open or semi open line to king or adjacent, mate on last line possible;
- Attacks on weak pawn;
- Defended and attacked pieces;
- In endgame, take into account mating material;
- Force develop pieces from their initial position;
- Take into account Bishops positional info:
- Bishop pair;
- Bishops in open positions;
- Bishops outside chain;
- Dynamic bishop evaluation (pair vs knight, single vs knight)
- Bad and good bishops (also in endgame);
Speed-ups
- Instead of calculating rook/queen/bishop looking at king, invert by king looking at those;
- Implement stand-pat in QS search;
- During move generation, no need to keep all the board statistics;
- During move generation, keep flags for presence of pieces, use these to speed-up isAttacked by;
- Board as [144] instead as [64] array;
- Use makeMove/unmakeMove instead of copying board in search algorithm;
- Calculate pawn-columns when calculating pieces;
- Use
__builtin_clzll and __builtin_ctzll for bit field operations to find possible moves (or use BLSI);
- Only do material evaluation when playing move, make sure static score does not create cut-off on positional score;
- Use separate thread to check for time passed instead of checking elapsed time in search loop, this thread can be paused;
- Promotion move move-value can be improved;
- If king in check before evaluation, consider piece attacking king to order moves according to relevance, e.g. if knight gives check, only king move or capture move should be considered, and check for removal of check should be done with that piece in mind first;
- Keep track of position static value instead of calculating each time;
- MiniMax bench total node count is different, this is caused by the fact that the bench itself is incorrect in case of forced draw (repetition, no moves, no mate possible). In case of forced draw, perf counts the node and so does bench. The optimisations done in MiniMax and BF do not fully follow the perft specification and do more respect the actual chess rules. Fully fixing would come as a performance hit;
Platform specific improvements or bugs
Windows
- The source does not cater for the CR LF line termination;
- Unicode result strings on windows (compile flag with Unicode?);
- Add version info to codeblocks generated executable;
Mac OS X
- Support for Mac OS X Power-PC and Apple Silicon (M1), multi-architecture binaries (Fat binaries) for PPC / x86 / ARM has not been tested;
- Debugging is currently not possible in NetBeans. Needs configuration of the debugger by signing it so it can attach to a process. (Sandboxing issue!)
- App().bout << std::endl creates segfault, App().bout.endl() is ok;
Other enhancements
Code purity
- Use stream operator for thinking output instead of
sendInfo* functions;
- Allow to change
App().bout(-1) << belofte::to_string(n); App().bout.endl() into App().bout << outputWriter::verbose(-1) << n << std::endl;
- Inherit levels instead of global level class;
- Make beloftemode the default engineinterface instead of specific sub-mode, implement unused methods in baseclass as xboard v1 or v2;
- Review implementation of
expect;
More platforms
- Version for iOS;
- Support for AnBox (Android on Linux) and darling (Mac OS on Linux);
- Create WebAssembly version and integrate in WebAssembly UI;
- Compilation for Solaris Sparc and x86, 32 and 64 bit;
- More testing required with ICS servers;
- Create project for Eclipse environment;
- Support for CMake;
Various
- Other chess variants. Chess 960, ...;
- Create installer (possibly with integration in xboard/... etc.);
- Add locale for game save. Will allow for loading and saving games with different piece letters;
- Add continuous integration scripts;
- Create version bundled with existing UI application;
- Support for OpenBench (https://github.com/AndyGrant/OpenBench);
eof