Joker IT

Joker,
a Chess Engine Communication Protocol compliant chess engine by Manlio Morini, developed from 1998 until 2001,
written in C++ with some conditional x86 inline assembly concerning population count and bitscan of bitboards.
Joker runs under BSD, Linux and Windows, and was in 2017 published on GitHub as open source as "historical" artifact,
under the terms of the MIT license [2].
Contents
Description
During its lifetime, around Version 0.6.7 in 1999, Joker used MTD(f) along with ETC [3], but finally stuck with PVS and aspiration [4]. It initially used the 0x88 board representation but evolved to bitboards. Quiet move generation of sliding pieces is still done with a nested loop over directions with pre-increments of origin until target squares are empty [5].
// Mosse di Alfiere, Torre, Donna. for (pezzo pz(alfiere); pz <= donna; ++pz) { bb = mappa(c,pz); while (bb) { const posizione pos(bb.firstone()); for (const direzione *d = dir[pz]; *d; d++) { for (posizione arrivo(pos + *d); !arrivo.fuori() && libere[arrivo]; arrivo += *d) { lm->push_back(pos,arrivo,pz,vuoto); } } bb.elimina(pos); } }
However, the more time critical capture generation is implemented more in the set-wise bitboard fashion similar to the Tinker approach, traversing the intersection of sliding piece attacks on the otherwise empty board with opponent pieces, and looking whether the squares inbetween the sliding origin and potential capture target are empty .
// Catture di Alfiere, Torre, Donna. for (pezzo pz(alfiere); pz <= donna; ++pz) { bb = mappa(c,pz); while (bb) { const posizione pos(bb.firstone()); const bitboard *const a = bitboard::raggio[pos]; bitboard prede(mosse[pz][pos] & nemici); while (prede) { const posizione p_preda(prede.firstone()); if ( !(a[p_preda] & pezzi) ) { const pezzo preda(t_preda(!c,p_preda)); lm->push_back(pos,p_preda,pz,preda,cattura); } prede.elimina(p_preda); } bb.elimina(pos); } }
Features
Board Representation
Search
- Iterative Deepening
- PVS Alpha-Beta
- Aspiration Windows
- Transposition Table
- History Heuristic
- Killer Heuristic
- Null Move Pruning
- Fractional Extensions
- Internal Iterative Deepening
- Quiescence Search
- MVV/LVA
Evaluation
Misc
Namesake
See also
Forum Posts
- Joker (WB) by Manlio Morini by Norbert Raimund Leisner, CCC, September 12, 2017
External Links
Chess Engine
Misc
- Joker disambiguation page from Wikipedia
- Joker (playing card) from Wikipedia
- Joker (comics) from Wikipedia
- Joker (comic book) from Wikipedia
- Gata Jazz Quartet - The Joker, YouTube Video
References
- ↑ The Jolly Rosso, image by Trocche100, November 30, 2014, Joker (playing card) from Wikipedia, Wikimedia Commons
- ↑ joker/README.md at master · morinim/joker · GitHub
- ↑ joker/history at master · morinim/joker · GitHub
- ↑ joker/giocatore.cc at master · morinim/joker · GitHub, see Ricerca_radice (root search)
- ↑ Code snippets from joker/situazione.cc at master · morinim/joker · GitHub, slightly formatted concerning white spaces and brackets