Update the changelog for the next release
[Sloppy.git] / TODO
blob34cdd2d2cbc15a744272eb8da737211e9d071853
1 Tasks in progress:
2    
3     - Implement the complete Winboard/Xboard protocol:
4       http://www.tim-mann.org/xboard/engine-intf.html
5     - Better evaluation function:
6       - more mobility evaluation
7       - Detect draws by material and likely draws by material (i.e. KR vs. KR).
8         This detection should happen in search() if possible.
9     - Full support for the PGN standard, including FEN strings
12 Deferred tasks:
13    
14     - Try returning alpha or beta even with mate scores
15     - Use a bitfield for move instead of an integer
16     - Use the BigTwo1 replacement scheme in hash table:
17       http://www.xs4all.nl/~breukerd/thesis/summary.html
18     - In critical parts use <unsigned> instead of <int> if possible
19     - Scale the 7th rank eval bonus with the opponent's pawn material (the more
20       pawns it has the bigger the bonus)
21     - make_move() should return a boolean value <is_check>.
22     - Add a command stack to struct Chess so that all the waiting non-urgent
23       commands can be executed when we're done searching.
24       UPDATE: turned out that no input ever needs to wait.
25     - Evaluation masks (passed pawns etc.) should be grouped in a struct
26     - Include ECO code and round number in the PGN log
27     - Use the "struct" keyword instead of the typedef name when declaring
28       variables in header files (eg. AvlNode *book in Chess).
29     - Use a lot more enums like Color, Square, Piece, etc. On the other hand,
30       enums aren't enforced so let's drop this plan.
31     - Add a global <notation> setting. It should accept values:
32       - NTN_SAN   - use SAN notation for moves everywhere
33       - NTN_COORD - use coordinate notation everywhere
34       - NTN_MIX   - use a mix of SAN and COORD, ie. Sloppy's current defaults
35     - Don't read the game log when writing to game.pgn. Instead backtrack to the
36       beginning and play the moves again.
37     - Add (static) function prototypes at the beginning of each source file.
38     - Don't try a null move if the side to move doesn't have any sliders.
39       UPDATE: this took away a lot of strength, can't use it.
40     - In Linux/Unix the default data folder is ~/.sloppy/ and in Windows it's
41       the same folder where the executable is. User should also be able to
42       choose the folder by running sloppy with -f <path> parameter.
43     - Always completing the search iteration after the first root move takes
44       about 5 - 8 % of the total search time, which is 5.3 - 8.7 % of the
45       allocated time. So cut about 7 % out of the allocated time.
46     - Use Verified Null-Move Pruning
47     - Extend 3 plies when the search transitions into a pawn endgame
48     - Generate (QUEEN) promotions in gen_qs_moves()
49     - Try storing 2 best moves in transposition table
50     - Order losing captures last
51     - Store 2 positions in each hash entry: always replace and depth preferred
52     - Try late move reductions in pv nodes
55 TODO:
57     - gen_pc_moves() should be able to work with a const board pointer
58     - Don't search the book if we're past X plies
59     - Don't respond to ping while searching, unless in analyze/pondering mode
60     - Support "avoid move" test positions
61     - Implement pondering mode
62     - If there's only one book move available and it has a score of 0, try to
63       avoid choosing that move in search.
64     - Use some more advanced source control system
65     - Try the hash move boldly without any validation (move generation).
66     - King safety extensions: extend all moves that significantly increase
67       pressure against the enemy king.
68     - Write a is_stalemate() function that can be called in sq_search() when
69       gen_qs_moves() creates 0 moves.
70     - Dismiss moves with a bad SEE value already in gen_qs_moves()
71     - Carefully test all the commands in input.c and xboard.c
72     - En passant captures should be handled in a cleaner way in move generation.
73       The use of ep_sq should be consistent. In <Board> it's the <to> square,
74       and in <Move> it's the square of the enemy pawn.
75     - Optimize or get rid of get_threat_mask(), at least for generating legal
76       king moves.
77     - Search all captures in QS (ignore SEE) if a double check or
78       discovered check is possible.
79     - Add support for the UCI protocol
80     - Special evals for endgames like KBNK
81     - Detect blockades in eval
82     - Get pointer arguments as constants if they're for reading only
83     - In make_move(): if the move captures a rook, make sure the opponent
84       loses castling rights in that corner. It's very unlikely that the other
85       rook would later move there without the king moving first, but
86       it's possible.
87     - Get rid of EPD test support. There are better ways to run the test suites
88       than having the engine support them.
89     - Order the root moves more carefully, perhaps based on the node counts of
90       previous searches.
91     - Write more sophisticated wrappers for the platform-dependent dynamic
92       library functions.