Difference between revisions of "EXchess"
GerdIsenberg (talk | contribs) |
GerdIsenberg (talk | contribs) |
||
Line 58: | Line 58: | ||
=Forum Posts= | =Forum Posts= | ||
− | == | + | ==1997 ...== |
+ | * [https://www.stmintz.com/ccc/index.php?id=13011 First win against a crafty clone] by [[Daniel Homan]], [[CCC]], December 16, 1997 » [[Crafty]] | ||
* [https://www.stmintz.com/ccc/index.php?id=16657 New version of EXchess released] by [[Daniel Homan]], [[CCC]], April 08, 1998 | * [https://www.stmintz.com/ccc/index.php?id=16657 New version of EXchess released] by [[Daniel Homan]], [[CCC]], April 08, 1998 | ||
* [https://www.stmintz.com/ccc/index.php?id=20450 EXchess 2.37] by [[Daniel Homan]], [[CCC]], June 13, 1998 | * [https://www.stmintz.com/ccc/index.php?id=20450 EXchess 2.37] by [[Daniel Homan]], [[CCC]], June 13, 1998 |
Revision as of 17:51, 22 January 2019
EXchess, (Experimental Chess Program)
a Chess Engine Communication Protocol compatible experimental open source chess engine by Daniel Homan,
written in C++, released under the GNU Public License.
EXchess may optionally use an own GUI based on the Fast Light Tool Kit (FLTK).
Contents
Board Representation
EXchess utilizes an 8x8 Board and piece lists as demonstrated in its move generation routine [1] :
// Typedef for square using unsigned 8 bits... // -- first 3 bits for piece type (0-6) // -- next bit for side of piece (1 = white, 0 = black) // See define.h for marcos and definitions to handle these typedef uint8_t square; struct position { square sq[64]; ... uint8_t plist[2][7][10]; ... }; void position::allmoves(move_list *list, ts_thread_data *tdata) { ... for(i=1;i<=plist[wtm][PAWN][0];i++) pawn_moves(list, plist[wtm][PAWN][i], tdata); for(i=1;i<=plist[wtm][KNIGHT][0];i++) knight_moves(list, plist[wtm][KNIGHT][i], tdata); for(i=1;i<=plist[wtm][BISHOP][0];i++) bishop_moves(list, plist[wtm][BISHOP][i], tdata); for(i=1;i<=plist[wtm][ROOK][0];i++) rook_moves(list, plist[wtm][ROOK][i], tdata); for(i=1;i<=plist[wtm][QUEEN][0];i++) { bishop_moves(list, plist[wtm][QUEEN][i], tdata); rook_moves(list, plist[wtm][QUEEN][i], tdata); } for(i=1;i<=plist[wtm][KING][0];i++) king_moves(list, plist[wtm][KING][i], tdata); }
Search
The ches engine performs advanced search algorithms including principle variation search, null move, null move verification, dynamic search extensions, futility pruning, hash tables, history tables, quiescence search, and a material swap function [2] [3].
Lazy SMP
Daniel Homan in July 2013 on his Lazy SMP implementation and work sharing [4]:
I changed the work-sharing approach to Lazy SMP in EXchess to be closer to the ABDADA model after Daniel Shawul's posts about his tests on the subject [5]. However, I didn't want to use a hash table to keep a counter for the threads working on a given position. My hash table already had a 16 byte long entry, so I didn't want to expand it, and I also didn't like the idea of having to make each move before seeing whether another thread was searching it.
So as an alternative to the hash table, I made a simple work sharing data structure. In the end, it was just a single hash key for a position which is OR'd with the move being searched and the depth of the search. I use this to keep track of the move being searched at each ply of the tree for a given thread. Then, before I search a move at a given ply, I can just check the same ply in the other threads to see that the move is not already being worked on at that depth. If it is, then the move get placed at the end of the move list to be searched last. This doesn't allow for transpositions , but I expected the most likely work collisions to be as the threads are walking the PV where they will initially all be the same. Indeed, this scheme only helps in the PV, and if I check for work sharing in non-PV nodes, it only slows things down a bit.
My previous Lazy SMP work sharing was just to alternate moves (odd-even) in the root node for the odd-even threads. The above approach is about 10% faster than my previous scheme, and I get a time-to-depth improvement of roughly 1.65 for 2 threads compared to 1 thread and roughly 2.5 for 4 threads compared to 1 thread. Maybe not quite as good as ABDADA with a hash table counter, but not too bad for the simplicity.
TD-leaf
EXchess applies evaluation learning using the Temporal Difference Learning (TD-leaf) [6].
Forum Posts
1997 ...
- First win against a crafty clone by Daniel Homan, CCC, December 16, 1997 » Crafty
- New version of EXchess released by Daniel Homan, CCC, April 08, 1998
- EXchess 2.37 by Daniel Homan, CCC, June 13, 1998
- New EXchess Version by Daniel Homan, CCC, November 02, 1998
- EXchess pre-release testers sought by Daniel Homan, CCC, December 13, 1999
2000 ...
- version 3.14 of EXchess released by Daniel Homan, CCC, May 02, 2000
- New version of EXchess by Daniel Homan, CCC, November 18, 2000
- EXchess v4.02 released by Daniel Homan, CCC, April 10, 2001
- Wb2UCI and Problems with ExChess4.03a and GnuChess4.0.8 by Arturo Ochoa, Winboard Forum, July 24, 2003 » Wb2UCI, InBetween
2005 ...
- New Version of EXchess by Daniel Homan, CCC, Januaray 29, 2006
- Insanity... or Tal style? by Miguel A. Ballicora, CCC, April 01, 2009 (refers EXchess) » Automated Tuning
2010 ...
- EXchess v6.01 by Daniel Homan, CCC, December 29, 2011
2012
- EXchess v6.10 released by Daniel Homan, CCC, January 29, 2012 » CLOP
- EXchess v6.50 released by Daniel Homan, CCC, August 19, 2012
- EXchess v6.70 released by Daniel Homan, CCC, December 20, 2012
2013
- Lazy SMP, part 2 by Daniel Homan, CCC, January 12, 2013 » Lazy SMP
- EXchess v7.01 Released by Daniel Homan, CCC, March 10, 2013
- EXchess v7.02 released by Daniel Homan, CCC, March 16, 2013
- EXchess v7.03 released (bugfix + speed improved version by Daniel Homan, CCC, March 29, 2013
- EXchess v7.11 released by Daniel Homan, CCC, June 27, 2013
- Lazy SMP and Work Sharing by Daniel Homan, CCC, July 03, 2013 » Lazy SMP
- EXchess v7.17 released by Daniel Homan, CCC, September 14, 2013
2014
- EXchess v7.26 released by Daniel Homan, CCC, May 07, 2014
- EXchess v7.31 released by Daniel Homan, CCC, August 17, 2014
- EXchess v7.51 released by Daniel Homan, CCC, December 26, 2014
2015 ...
- EXchess v7.71 released by Daniel Homan, CCC, May 29, 2015
- EXchess v7.88 Released by Daniel Homan, CCC, December 30, 2015
2016
- EXchess v7.91 released by Daniel Homan, CCC, May 10, 2016
- EXchess v7.92 released by Daniel Homan, CCC, May 11, 2016
- EXchess v7.92 and AMD Processors by Daniel Homan, CCC, October 08, 2016
2017
- EXchess v7.96 by Daniel Homan, CCC, January 31, 2017
- EXchess v7.97 by Daniel Homan, CCC, February 04, 2017
External Links
References
- ↑ EXchess v7.97 beta source code, chess.h, moves.cpp
- ↑ SEE and possible EXChess bug by Gian-Carlo Pascutto, CCC, April 01, 2001
- ↑ EXchess v4.02 released by Daniel Homan, CCC, April 10, 2001
- ↑ Lazy SMP and Work Sharing by Daniel Homan, CCC, July 03, 2013
- ↑ ABDADA speedup results by Daniel Shawul, CCC, May 01, 2013
- ↑ New version of EXchess by Daniel Homan, CCC, November 18, 2000