******* History of Major Changes ******* (Console version) * Dates in parentheses are the starting dates up to 0.02d. 001alpha1 (Thanksgiving, 2003) - First the version 001alpha2 (Dec, 2003) - Rewrote minimax and added move ordering, so it is much faster. No change is made to evaluation function. 001alpha3 - Probably added quiescence search. (not exactly sure) 001b - Started to give negative weight to disc count in beginning and mid game. 001c (don't remember exactly..., need to check the code) 001d - Added seperate end-of-game solver, still slow but better than before. 001e (abandoned) - Experimented with counting for certain edge configuration, but didn't work out well at all. 001f - Added save/load game and more options. 001g - Added counting for stable discs to evaluation function. 001h - Corrected some non-critical errors in stable disc counting. - Some improvement on quiescence search (speed & accuracy), but it is still far from good enough. 001i - Now in mid-game search, empty squares are manitained in a linked list in a fixed best-to-worst order. 001j - Switched to 91-square board for mid-game search. - Fixed a critical bug in stable disc count. - Improvement on quiescence search. It is now much better, i.e. less likely to be harmed by horizon effect, but probably still far from perfect. - Changed the evaluation function a little. It now calculate mobility for both players from the same (current) board position. (Used to use previous board position for one of the player.) - Adjusted corner weight, stable disc weight and ceiling value for disc difference. 001k (Jan 19, 2004) - Added evaluation for edge configuration (e.g. unbalance edges). It is still very experimental at the moment though. - Re-adjusted disc difference weight and stage division. 001m (skipping letter 'l' since it can get confusing with '1' and 'I'!) - User can change the AI level during the game - Removed some unused code 001n (Jan 24, 2004) - Made own version or end game solver based on the idea of Andersson's end game solver. The external one is now disable (no longer part of the program) by default. It can still be enabled by modifying the source code and the Makefile. 001o (Feb 12, 2004) - Minor modifications on quiescence search conditions; removed a few lines that are no longer (and likely never going to be) needed; adjusted corner and irreversible disc weights a bit lower. - Added "--mindless" and "--stooge" option (low difficulty). - Stopped using getchar(). 001p (Mar 16, 2004) - Reduced the weight of stable disc on edge. (experimenting) - Fixed a tiny bug in printing out the help message. - Updated Makefile so it can now be compiled with Borland C++ Compiler with "make bcc". 001q (Sep 26, 2004) - Changed AI default setting to depth 8, end-game 16. - Added option for user to change the symbol used represent possible moves. - Used fgets() to replace gets() -------- 0.02 version -------- 002a (Feb 15, 2005) - Support GUI though command-line input and stdout. - Corrected a minor bug in the keeping of past moves record. - Added time-dependent cutoff (to support time-constraint play from the GUI version) 002b (Mar 22, 2005) - Added a min limit on smallest value (currently == 1) of mobility (used in evaluation), so as to avoid mistake, e.g. giving away corner, due to extreme mobility values. - Corrected a evaluation value display error. 002c (April 10, 2005) - Change quiescence search start to after 12 moves - Added pure-mobility auxiliary move ordering, some 10% speed up - nothing substantial though. - Took out the top-level a-b pruning in move ordering. Ordering takes a little longer, but has better result. Seem to give some non-substantial speedup (may 10%?). - Add move ordering using search+eval for end game solver. Some 10%-30% speedup. - Prints one additional value to STDOUT, i.e. the explicit WDL result. 002d (April 14, 2005) - Fixed a bug in stable disc counting - Modified and enabled Multi Prob-Cut (MPC). *Seems* safe enough now. Produce 30%-50% speedup. Probably worth it even if it is not abolutely safe. 002d_2 (April 14, 2005) - No externally visible difference from 0.02d, but reduces redundancy. getMin() is taken out and - getMax(...) is called instead. 002e (Jun 3, 2005) - Small modification to edge values: increase the the negative value coeff. of single C square disk from 0.008 to 0.012. - Added opening randomness for 1st white and 2nd black moves. - Now return value for 2nd move. - Changed to use discWeight array for disc weight indexed by # of empty squares, so as to find the correct stage in case of none uniform search depth (e.g. in quiescence search). - Changed STAGE_1_2_END from 24 to 18. 002f (Sep 7, 2005) - Cleaned up Makefile a little bit. - Changed timing from using time() to using clock(). - Catches Ctrl-C signal. - Added macro for uint, ushort in board.cpp 003a (Oct 9, 2005) - Implemented mobility table lookup. A little disappointingly, the program is only faster by some 15%. - Implemented liberty map. Currently only used in aid of testing legal moves (very slight speedup, some 1%). Can (probably will) be used to compute potential mobility to replace the current disc difference counting method. - Inlined function 'legalMove()', which yields some 20% speedup. - Observation from experiment: Edge and stable disc accounting have long code, but actually correspond to very small portion of running time. - Implement incremental computation for potential mobility, but haven't used it in evaluation function (need a lot of experiment to parameterize it). It does affect speed a little (5-10%). The system is current disabled (since not used anyway). - Moved to using GCC-3.4.4. Got rid of all warnings. 3.4.4 seems to have better optimization options which yields a major 30-40% speedup. - Changed alpha-beta values in end game search from double to int -- 2~3% speedup. - Corrected a bug causing missing the count for the X-square when counting stable discs. - Fixed a critical bug resulting in MPC to cause WDL search return incorrect value (and move). - Fixed a small bug causing incorrect WDLresponse value. - Adjusted stable disc weight counting a little bit. The discs beside the corner has a little more weight, while the last two (the opposite corner and the one beside it) receive no weight (as will be accounted for by the other corner). - Experimenting less corner weight for deeper search. Very ad hoc. The rationale is that deeper search should have detected the strategic value of corners. Therefore the extra corner value should be reduced to avoid over-counting mistake. (Very experimental, not known if good or not.) - Corrected bug resulting in non-pruning during end game solving. 0.03b (Mar. 14, 2006) - Added account for stable edge w/o corners (e.g. OXXXXXXO). (Not yet fully tested, but looks OK so far.) 0.03b1 (Mar. 27, 2008) - Compile with GCC-4.2.1, rid of warning, small fixes. Otherwise functionally identical to 0.03b. 0.03b2 (Nov. 5, 2008) - Added -L4 (--advanced) option. Changed email address.