Share

G2F3

File Release Notes and Changelog

Release Name: 0.6

Notes:
This release adds History Heuristics (improved
move ordering) as described by Jonathan Schaeffer. The evaluation function of the Breakthrough game has been improved. Documentation updates.

Changes: Version 0.6, Dec 20 2004 ======================== New Features ------------ - All AI Algorithms can now be set to use History Heuristics after Jonathan Scheffer, additionally using some settable "Fade Factor". See documentation. Good speed improvements! Improvements ------------ - Evaluation function In Breakthrough much improved. With search depth >= 6, the AI for this game is gradually becoming some challenge for a human player. - Transposition table is now swept *after* a comp move (while the human player is busy contemplating the new situation). Should be less annoying. Code Changes and Cleanup ------------------------ - GAME_SPECIFIC has two new features: 'hist_table_count' and 'move_to_int' which are needed for the History Heuristics. - Added to NODE 'child_move_list', 'set_child_move_list' and 'apply_child_move'. (all effective). New insert HISTORY_TABLE (new class) and REVERSE_COLLECTION_SORTER All this is related to History Heuristics. - Once again redesigned the interaction between SERVER and AI_ALGORITHM. Some features removed, others added. - CHARACTER_CONSTANTS is now inserted in AI_ALGORITHM. Removed local variable in ALPHA_BETA_TT. - Changed {BIT_2_BOARD_STORAGE}.advantage_diff from attribute into a function. - Changed implementation of {STORAGE_BREAKTHROUGH}.apply_move. Small speed improvement. - Changed {CONSTANTS}.infty to 10000 - Changed the bitfields in Breakthrough to BIT_64 (save memory). Trying out larger board sizes now requires setting this back to BIT_96. Removed ------- - There is no option 'pre-sort' anymore. This has been obsoleted by the new History Heuristics option. Bugfixes -------- - The C++ code is now accepted by g++ 3.4.X (but the Sig11 with -O is still there). Documentation ------------- - Updated FAQ and TODO. Version 0.5, Nov 30 2004 ======================== New Features ------------ - Added generic mechanism to report important changes after a move, such as captures. See {STORAGE}.append_diff_info and {SERVER}.report_diffs. - The FLTK user interface is now menu driven. Got rid of the tabs and buttons. - Added new game: Breakthrough (good start for developers since the code is very simple). Improvements ------------ - The transposition tables take less memory since the key objects in HASHABLE_DICTIONARY_LOGGING contain less redundant information. For boardgames, 'unit' is stored in an otherwise unused bit of the bitfield for the min-party. - Updated defunct console interface for games. This UI is mainly meant for development and testing (one can compile and debug a new game without having to write complicated GUI code). Code Changes and Cleanup ------------------------ - SmartEiffel 2.1-beta1 or higher is now required. The code WILL NOT compile with any earlier version of SamrtEiffel. - Building optimized executables does not anymore involve editing the top-level makefile. Instead, CXXFLAGS is now adhered. - IFLTK is not required anymore. The FLTK user interface is now directly written in C++ (using the usual external/cecil mechanism). - Renamed UI_BOARD_GAME to BOARD_GAME_DISPLAY and modified somewhat. - Simplified UI_FLTK and made the corresponding changes to example games. - Changed a lot of 'inherit' to 'insert' to satisfy SE. - MEMO replaced by REFERENCE. - BIT_N (removed from SE) replaced by my own versions of expanded classes (added BIT_2N, BIT_32, BIT_64, BIT_96 and BIT_128). Perhaps room for speed improvements due to high number of qualified calls. - BIT_2_BOARD_STORAGE has now a generic parameter. This adds somewhat unnecessary complexity since the size of the bitfields could be determined automatically from 'upper' of GEOMETRY_RECTANGLE. However, I want to stick to expanded types for the bitfields (speed!). - Simplified (and sped up) 'reset' in BIT_2_BOARD_STORAGE. - Changed a lot of now obsolete 'clear' (ARRAY and STRING) to 'clear_count'. - 'hashable_storage' is now computed automatically (SHARED). - Got rid of 'make_hash_key_only' and 'simple_twin' in STORAGE_HASHABLE. The new scheme makes use of an extra type (HASH_KEY, BIT_BOARD_HASH_KEY) for the dictionary keys. This is less convoluted and more readable. - Moves are now FAST_ARRAY[INTEGER] (used to be ARRAY[INTEGER] with lower always = 0). - New constant {GAME_SPECIFIC}.move_dim which simplifies {NODE}.set_up and some other features. - Changed manifest arrays to new syntax. Removed ------- - The code for the node explorer is currently broken (need more time). - Hash collision strategy is now always 'linked list'. 'Direct addressing' did not provide any measurable speed improvement and had several disadvantages (slow when load factor is high and no automatic adjustment of capacity). - Removed board_game_node.e (not needed anymore). Documentation ------------- - Many additions and updates to g2f3_doc.pdf. Modifications to FAQ, BUGS and TODO. FAQ moved to doc directory. - Removed embedding of the Base14 PDF fonts in g2f3_doc.pdf. Should be safe with modern PDF viewers and saves about 100k. Version 0.4, Aug 19 2004 ======================== New Features ------------ - Added progress meter and 'undo_redo' to the protocol between SERVER and USER_INTERFACE. - Progress bar in FLTK interface. - New 'Last Move' button in FLTK interface. Animates again the move that lead to the currently shown situation. Code Changes and Cleanup ------------------------ - The fixes for IFLTK are now supplied as a lage patch against IFLTK-1.51. Fetching IFLTK from CVS is NOT required anymore for a new install. Documentation ------------- - Updated to reflect recent changes. - Started the API documentation... then ran out of time... Version 0.3.1, July 01 2004 =========================== Bugfixes -------- - Fixed a problem in comp_response (class SERVER) that could lead to silly moves, i.e infinitely prolonging a game where the comp could easily win. Moves at root level are now pre-sorted according to the value of eval (NODE) without using the transposition table. eval_with_tt has been deleted. Version 0.3, June 30 2004 ========================= New Features ------------ - Added a new abstract strategy game called 'Outwit'. - The FLTK board games have now color. - Added class BIT_2_BOARD_STORAGE_2_EXTRA for board games with two special pieces. Used to implement 'Outwit'. - Added class MG_META. This is a 'master' move generator which can encapsulate several 'slave' move generators. Exactly one of those slaves is always 'active'. Useful for games with non-uniform playing pieces such as chess. Used to implement 'Outwit'. Improvements ------------ - Improved the evaluation function (eval_non_extreme) for Hnefatafl. The computer opponent plays much stronger now. - Made Hnefatafl more balanced. Added two more defenders and changed the initial setup. - Modified BIT_2_BOARD_STORAGE and BIT_2_BOARD_STORAGE_EXTRA. arr_min_pos and arr_max_pos are now kept sorted using features from COLLECTION_SORTER[INTEGER]. Re-sorting after a "from_to" move now takes at most ln2(i)+i loop iterations (but mostly only a fraction of that) where i is the number of playing pieces of that color. In the old implementation, the number of iterations was always equal to the number of squares, including empty ones. - Updated documentation to reflect recent changes. But the API is still undocumented. Code Changes and Cleanup ------------------------ - Reorganized the code for animating moves in board game user interfaces. - Moved eval_extreme and eval_non_extreme from NODE to STORAGE in order to reduce the number of qualified calls. Updated the example games accordingly. - The former class MG_BASIC has become MG_INT_STATE. The new MG_BASIC is a higher abstraction. - Added 'own_positions' and 'other_positions' to BIT_2_BOARD_STORAGE. Simplified MG_NEUT. Version 0.2, June 15 2004 ========================= New Features ------------ - Support for games comp vs comp much improved. Two different algorithms can now 'play' against each other. - Added behaviour to the "Redo all" button. If the computer is to move next and if there are no moves to be redone, then "Redo all" will trigger the computation of the next move. - It is now possible to select between "Side Effect" search, i.e. strictly depth-first search and "Pre-sort at root level". Please see documentation. - Improved eval_non_extreme in NODE_TAFL. Hnefatafl should now play a little stronger. Seems still unbalanced, i.e. it is too easy for the defenders to win. Code Changes and Cleanup ------------------------ - Moved some functionality from AI_ALGORITHM to SERVER to simplify interactions. - GEOMETRY_RECTANGLE: added border_distance. BIT_2_BOARD_STORAGE: added advantage_diff, changed add_new, remove and flip accordingly. - Ok, I have surrenderd. Changed a some '!!' to 'create' where it safes a few lines of code. Removed ------- - The messages "Computer can now win" etc are no longer generated. If verbose logging is active, then the outcome can be predicted from the shown score values (sure win = 1024, doomed to loose = -1024). However, there is a bug in MTDF_TT which results in weaker scores (though the moves look ok). - MTDF_SIMPLE and MTDF_TT_ITERATIVE are currently buggy and therefore not used. - The classes for console games are currently obsolete. Bugfixes -------- - In the settings tab, switching the player who is to move next from "Human" to "Computer" will no longer immediately start the move computation. - MTDF_TT sometimes generated wrong moves when used without pre-sorting moves. Current workaround is to force pre-sort with MTDF_TT, regardless what the settings are. Documentation ------------- - Updated BUGS FAQ and TODO. Version 0.1-pre, May 16 2004 ============================ Initial release.