Changes

Jump to: navigation, search

Joker IT

5,893 bytes added, 21:06, 17 February 2020
Created page with "'''Home * Engines * Joker IT''' FILE:The Jolly Rosso.jpg|border|right|thumb|220px| A Joker card <ref>[https://commons.wikimedia.org/wiki/File:The_Jolly_R..."
'''[[Main Page|Home]] * [[Engines]] * Joker IT'''

[[FILE:The Jolly Rosso.jpg|border|right|thumb|220px| A Joker card <ref>[https://commons.wikimedia.org/wiki/File:The_Jolly_Rosso.jpg The Jolly Rosso], image by [https://it.wikipedia.org/wiki/Utente:Trocche100 Trocche100], November 30, 2014, [https://en.wikipedia.org/wiki/Joker_%28playing_card%29 Joker (playing card) from Wikipedia], [https://en.wikipedia.org/wiki/Wikimedia_Commons Wikimedia Commons]</ref> ]]

'''Joker''',<br/>
a [[Chess Engine Communication Protocol]] compliant chess engine by [[Manlio Morini]], developed from 1998 until 2001,
written in [[Cpp|C++]] with some conditional [[x86]] [[Assembly#InlineAssembly|inline assembly]] concerning [[Population Count|population count]] and [[BitScan|bitscan]] of [[Bitboards|bitboards]].
Joker runs under [[Unix|BSD]], [[Linux]] and [[Windows]], and was in 2017 published on [https://en.wikipedia.org/wiki/GitHub GitHub] as [[:Category:Open Source|open source]] as "historical" artifact,
under the terms of the [[Massachusetts Institute of Technology#License|MIT license]] <ref>[https://github.com/morinim/joker/blob/master/README.md joker/README.md at master · morinim/joker · GitHub]</ref>.

=Description=
During its lifetime, around Version 0.6.7 in 1999, Joker used [[MTD(f)]] along with [[Enhanced Transposition Cutoff|ETC]] <ref>[https://github.com/morinim/joker/blob/master/doc/history joker/history at master · morinim/joker · GitHub]</ref>, but finally stuck with [[Principal Variation Search|PVS]] and [[Aspiration Windows|aspiration]] <ref>[https://github.com/morinim/joker/blob/master/src/giocatore.cc joker/giocatore.cc at master · morinim/joker · GitHub], see Ricerca_radice (root search)</ref>. It initially used the [[0x88]] [[Board Representation|board representation]] but evolved to [[Bitboards|bitboards]]. Quiet [[Move Generation|move generation]] of [[Sliding Pieces|sliding pieces]] is still done with a nested loop over [[Direction|directions]] with pre-increments of [[Origin Square|origin]] until [[Target Square|target squares]] are empty <ref>Code snippets from [https://github.com/morinim/joker/blob/master/src/situazione.cc joker/situazione.cc at master · morinim/joker · GitHub], slightly formatted concerning white spaces and brackets</ref>.
<pre>
// 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);
}
}
</pre>
However, the more time critical [[Captures|capture]] generation is implemented more in the set-wise bitboard fashion similar to the [[Tinker]] approach, [[Bitboard Serialization|traversing]] the [[General Setwise Operations#Intersection|intersection]] of [[Sliding Piece Attacks|sliding piece attacks]] on the [[On an empty Board|otherwise empty board]] with opponent pieces, and looking whether the [[Square Attacked By#InBetween|squares inbetween]] the sliding [[Origin Square|origin]] and potential capture [[Target Square|target]] are empty .
<pre>
// 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);
}
}
</pre>
=Features=
==[[Board Representation]]==
* [[Bitboards]]
==[[Search]]==
* [[Iterative Deepening]]
* [[Principal Variation Search|PVS]] [[Alpha-Beta]]
* [[Aspiration Windows]]
* [[Transposition Table]]
* [[History Heuristic]]
* [[Killer Heuristic]]
* [[Null Move Pruning]]
* [[Extensions#FractionalExtensions|Fractional Extensions]]
* [[Internal Iterative Deepening]]
* [[Quiescence Search]]
* [[MVV-LVA|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 NL|Joker]] by [[Harm Geert Muller]]

=See also=
* [[Jester]] by [[Stéphane Nguyen]]
* [[Jester US|Jester]] by [[Marty Franz]]

=Forum Posts=
* [http://www.talkchess.com/forum/viewtopic.php?t=65146 Joker (WB) by Manlio Morini] by [[Norbert Raimund Leisner]], [[CCC]], September 12, 2017

=External Links=
==Chess Engine==
* [http://www.eosdev.it/joker/ Joker - EOS Development]
* [https://github.com/morinim/joker GitHub - morinim/joker: A chess engine from '90s]
==Misc==
* [https://en.wikipedia.org/wiki/Joker Joker disambiguation page from Wikipedia]
* [https://en.wikipedia.org/wiki/Joker_%28playing_card%29 Joker (playing card) from Wikipedia]
* [https://en.wikipedia.org/wiki/Joker_%28comics%29 Joker (comics) from Wikipedia]
* [https://en.wikipedia.org/wiki/Joker_%28comic_book%29 Joker (comic book) from Wikipedia]
* [https://www.fandalism.com/mrskylark1987/bw0i Gata Jazz Quartet] - The Joker, [https://en.wikipedia.org/wiki/YouTube YouTube] Video
: {{#evu:https://www.youtube.com/watch?v=4IRaU8wG7xI|alignment=left|valignment=top}}

=References=
<references />
'''[[Engines|Up one Level]]'''
[[Category:Open Source]]
[[Category:WinBoard]]
[[Category:XBoard]]
[[Category:PC]]
[[Category:X86]]
[[Category:X64]]
[[Category:Windows]]
[[Category:Linux]]
[[Category:Comics]]
[[Category:Namesake]]
[[Category:Music]]

Navigation menu