Joker IT

Home * Engines * 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.

=Description= During its lifetime, around Version 0.6.7 in 1999, Joker used MTD(f) along with ETC, but finally stuck with PVS and aspiration. 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. // 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

 * Bitboards

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

 * Material
 * Lazy Evaluation
 * Pawn Hash Table
 * Pawn Structure
 * King Safety

Misc

 * Opening Book
 * Book Learning
 * Nalimov Tablebases

=Namesake=
 * Joker by Marc-François Baudot and Jean-Christophe Weill
 * Joker by Harm Geert Muller

=See also=
 * Jester by Stéphane Nguyen
 * Jester by Marty Franz

=Forum Posts=
 * Joker (WB) by Manlio Morini by Norbert Raimund Leisner, CCC, September 12, 2017

=External Links=

Chess Engine

 * Joker - EOS Development
 * GitHub - morinim/joker: A chess engine from '90s

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= Up one Level