SlowChess Blitz Created Date : July 29, 2019 Modified Date : Jul 5, 2022 Author : Jonathan Kreuzer Version 2.9 (+15 elo standard, +30 elo FRC compared to v2.8) - Some more training and optimizations and attempts to tweak search. Version 2.83 (+6 elo standard, +20 elo FRC) - Some fixes (eg. fix read en-passant square in FEN. Use left/right arrows to step through game.) - New nets but not big difference - Some search tweaks but maybe not better Version 2.8 (+30 elo) - More neural net training. - Updated endgame nets. (Training, more first layer weights, less second, more force symmetry.) - Larger general net. - Some search tweaking but probably only a few elo. Version 2.7 (+35 elo standard, +110 elo FRC) - FRC training, to finally fix the weak FRC performance! (Weak relative to standard.) - Some adjustments to net structure and code for a bit more speed and a bit more weights. - As usual more training games / data. - Queen v 1 or 2 lessor endgame net (Rook/Bishop/Knight) - Restarted opening book to use games against strong engines instead of mostly old engines. Probably still not that good. Version 2.6 (+50 elo standard) - Bigger general net with a Pawn-King-Material hash neural network that feeds outputs from the hashtable into the general net. - More training games for better training data - More endgame network training games, added King and Pawns endgame net. Version 2.5 (+40 elo standard) - General Neural Net instead of hard-coded evaluation - Added QvRs Endgame Net - Optimizations and tweaks to neural net code. - Weak FRC peformance relative to standard chess. Version 2.4 (+20 elo) - Endgame neural nets for one piece endgames (King/Rook/pawns, KQps, KBps, KNps, KBps v KNps, KRps v KBps, KRps v KNps) - A general endgame network for up to 2 pieces. Notes : The rook one the most trained, the least trained is probably the general but it was still a bit better than the handcrafted eval. The material hash stores the index of which neural net if any to use when evaluating. - Some general eval tuning - Note : All the data files are in same directory as the exe now, and the nets/bitbases are packed into single files. Version 2.3 (+24 elo) - More evaluation tuning work and a few more evaluation terms (+20 elo) - Various bug fixes and tweaks - added contempt mid/end option - opening/midgame NPS will show as about 25% slower because it used to count some pruned moves and it no longer does Version 2.2 (+100 elo) - Fix bug where history update would try to decrease the score of wrong or invalid moves. This also increases search depths. (+55 elo) - More evaluation tuning. Added some terms, removed some terms, and changed some logic. More work than it sounds. Also ran some more FRC training games. (+30 elo) - syzygy Tablebase support. Is functional for playing games, but needs work to choose most reasonable move. Various small search changes of which my elo measurement is mostly meaningless (+15 elo) - Use SEE in for LMR Reduction of quiet piece moves - History Extension - Limit IID to PV or eval > alpha - counter history shallow pruning increase active depth, and check scores are below k*d*d - Adjust history delta amounts, max amount, and LMR history adjustment threshold GUI : higher res pieces, all move / analysis shows as arrows now for clearer display Version 2.1 (+65 elo) - More evaluation tuning (+20 elo) - Improved search (+45 elo) The biggest impact change was allowing LMR at root, surprisingly tested +15 elo better. More lenient LMR rules (eg. now allowed in-check, and to a limited extent on even safe checks) helped a bit to not bog down search as much. Many other small tweaks added up but I didn't test enough to show clearly better. The general method of improvement was make one or more adjustments to search code, fast self-play test, and keep changes that seemed probably better. Most were still just guesses though because I have very limited testing capabilities. - Fixed a pgn->opening book import bug that also led to some bugged lost positions in opening book. - Improved and fixed a few protocol issues. UCI - fix to analysis, support multi-pv, hash full %, searchmoves command. Winboard - can parse seconds in base time, eg. 0:30 Version 2.0 (+100 elo) - More extensive work in evaluation tuning. (+80 elo, after multiple passes and additional training games.) - Made a fairly complete multi-threaded eval tuner with GUI window (unreleased for now since it requires a final step of pasting into source code.) - Added more eval features. (Removed a couple too but mostly adding.) . bishop diagonal, penalizing blocked pawn or defended pawn, bonus if enemy rook is on diagonal if not blocked/defended pawn. . Rook move to open file bonus. Even more different rook file types now has 8 I think. (eg. mobile pawn, pawn blocked by piece, pawn blocked by pawn, in addition to open/half open.) Bonus if enemy queen on file. . Knight center move bonus. Knight outpost by rank, higher outpost move value. . More direct pawn connected bonus (more on open file), unconnected penalty split for open/closed file and normal/backward/isolated, separate doubled score if can be undoubled. Some blocked pawn tweaks. Dynamic passed pawn scoring has couple more terms. - Various small search changes and bugfixes (+20 elo) - Some tweaks to use of hard-coded tactical threats for LMR/LMP/Q-Search, overall probably uses them a bit more aggresively than 1.9. (I thought maybe they'd be useless now but were +15 elo after tweaking, even more than the +8 for 1.9, though that was early on and may have already changed.) - 1-ply LMR on late captures, and "multi-cut" - slightly adjusted history/LMR/LMP counts Version 1.9 (+45 elo) - Support for multi-threaded search using lazy SMP. Search->Threads option in own GUI, threads option in UCI, plus supports winboard cores command. Tested threads at 2, 4, 8 and gives obvious gain in playing strength (though perhaps not as much as it should.) - Tuned evaluation using an error utility function for suites of w/l/d scored positions, so eval tuning halfway between hand-tuned and automatic. I think it was successful and very useful, increase in strength was measurable but not large. If I had done it earlier could have been a significant improvement in less time. And there were more positional values that increased than decreased, so if anything style is less conservative not more. Version 1.8 - Thoroughly reworked a lot of code and tweaked eval, but not sure what specific to mention. - Further increased value of king safety, pawn promo threats and some other threats. (With modern search this helps to follow threats even if values seem too high to me.) King safety is getting pretty aggressive for near term danger, but accuracy isn't great. And needs work building attack (and also just be better at building positional advantages to press, which sometimes creates weakness leading to attack.) - Optimized code to be about 20% faster + changed Threat Moves to detph > 3 to minimize slow-down. - Did a code cleanup pass to prepare for multi-threading and code portability. Maybe version 1.9 will support multi-threaded search. Version 1.7 - Optimized code to be about 15% faster. (Then immediately started slowing it down again working on eval.) - Attempts to refine eval. More work on passed pawns and king safety and center control / central space. Some increase in threat values (against hanging pieces, pawns near promotion, checks, king safety in general.) Overall tuning / selectivity still seems hit or miss, but it's getting a bit better. Version 1.6 - More modern style search. Before I was still trying to increase search depth without missing tactics / significant moves, now more accepting of things being missed. Also more pv-centric. Late-move reductions can get pretty high (inital value based on depth and current move count.) Search depths can reach around 1 to 3 ply more. Down side is might miss some moves until a much higher depth. - Threat Moves no longer extend last ply of main search. - Threat Moves are now used only if depth > 2 to either limit or turn off LMR and LMP. For Slow Chess this was around +40 elo still over remove threat moves. ( eg. mate threats, checks, skewers, forks, attacking undefended pieces, attacking higher value pieces, passed pawn pushes to rank 6 or 7, supporting pawn promo, moving/defending a threatened piece, etc. ) - Right-click on piece to show eval is pretty thorough now. Some more attempts at manually tuning eval, lots of things tweaked slightly. Candidate/discovered passed pawn scoring. - This version might be less "Classic" but it's getting more "Slow" so it evens out. A large part of the slowness is node counting with LMP isn't counting as many nodes. - Has only 2 extensions : For higher depth singular extensions, for anything lower check extension. (And the re-cap to pawn endgame extension, although that more rare.) - Schess.dft is gone. All settings are in "engineGUI.dft" and "engineWB.dft". Can now set hash size from command line, example: -TT128 Version 1.5 - Chess 960 support. (Also known as Fischer Random Chess) - multi-ply lmr reductions for higher depths and likely bad moves. - slightly less extensions - conservative probcut pruning - search "depth" for some cases increased by a ply or two (but sometimes still just gets bogged down in early ply...) Version 1.1 to 1.4 - various bug-fixes to core engine and in general - more eval terms (and slower) - better? move ordering - slightly increased selectiveness - multi-pv support in own gui - right-clicking on piece now shows mobility squares, more dev options including perft, etc. - some unknown amount of elo gain Version 1.0 SlowChess will run in its own GUI and it can also be used as a Winboard or UCI engine. It's called "Classic" because I mostly tested it against engines over a decade old. Once I downloaded the newer top engines, I realized that even this updated version is still a dinosaur. This is an engine that will search a reasonably small depth, with an evaluation based on a sub-2000 rated player's best guesses. Finding mates is an area where it's better than average ( compared to its playing strength.) This is partially because I tested most search changes in a small testsuite of mate positions that mostly have no bearing on actual games. Compared to WV2.1, there are some major changes: - re-written to be based on bitboards (and 64-bit only.) Since pretty much every computer is 64-bit now, this is makes a lot of sense for an update. - checks in early plies of Q-Search. (WV2.1 was just capture checks.) - King Safety evaluation tests square coverage near king (3x3 + 5x5 @ 1/2 value + checks) - King safety (and eval in general) has become a bit speculative. I think this makes for more interesting play but isn't so accurate. - Ocassionally advances pawns in front of its own king successfully to attack opponent's king... with the old eval this never happened and I always wanted it to. - Mobility slightly more thorough in a few ways (one example is eval checks queen mobility to safe squares), but in other ways similar. - Has some late-move-reductions and pruning, but conservative and probably not well-tuned. (The old code had some too but don't think was in the released WV2.1) - Added a singular extension, which is the one thing that feels "modern" because I wasn't aware of it being discussed back then. Fun Facts - you can right-click on any piece to see its evaluation score. - has a mess of hard-coded threats or "interesting" moves that partially direct search. But only half done and it doesn't prune/reduce much at the moment. - every ply before the leaf, the search checks for mates in 1 before searching. (Surprisingly this might be more positive than negative... it is nice to find mates early since a mate provides some instant nice safe pruning.) - mate-in-1 threats extend search half ply - changed to fail-soft because all mates start as exact values, and didn't want to lose them to fail-hard. Future if I have time - (Done) I want add any missing features (eg. multi-pv analysis isn't working yet) and add some nicer debug/eval displays to gui, I think there is some benefit to having own Gui, much of it still untapped. - (Done, though still poorly tuned) I think just adding everything I wanted to search & eval, then contininuing to fix up broken or poorly tuned stuff could fairly quickly get about 100 ELO more. (After that the fact I don't do any scientific testing and just go by what I feel like adding and ocassionally single games/test positions might start to make increasing playing strength tough.) - I want to expand the per-move threat/interesting rating, then see if it direct search more aggressively. (Done : Right now some things are missing. One example is pieces pinned against queen is not checked in either eval or move threat, so can be blind against that.) - see if I can fix improve issues like finding there's a forced mate by bound, then not resolving the on same ply, and improving general cases of fail-highs that later don't resolve higher somehow. - (Done) multi-threaded search