Difference between revisions of "Cinnamon"
GerdIsenberg (talk | contribs) |
GerdIsenberg (talk | contribs) |
||
(2 intermediate revisions by the same user not shown) | |||
Line 14: | Line 14: | ||
Four pre-calculated attack arrays containing attack bitboards on [[Ranks|ranks]], [[Files|files]], [[Diagonals|diagonals]] and [[Anti-Diagonals|anti-diagonals]] | Four pre-calculated attack arrays containing attack bitboards on [[Ranks|ranks]], [[Files|files]], [[Diagonals|diagonals]] and [[Anti-Diagonals|anti-diagonals]] | ||
were indexed by the square of the sliding piece, and the associated [[Occupancy|occupancy]] index of that line, determining the blockers affecting the attack set. | were indexed by the square of the sliding piece, and the associated [[Occupancy|occupancy]] index of that line, determining the blockers affecting the attack set. | ||
− | Rather than to get the occupancy index from incremental updated [[Rotated Bitboards|rotated bitboards]] for each of the four line kinds, | + | Rather than to get the occupancy index from [[Incremental Updates|incremental updated]] [[Rotated Bitboards|rotated bitboards]] for each of the four line kinds, |
Cinnamon extracts line occupancies into a dense index range using [[Occupancy of any Line#Using Multiplication|multiplication]] and shift right, | Cinnamon extracts line occupancies into a dense index range using [[Occupancy of any Line#Using Multiplication|multiplication]] and shift right, | ||
as mentioned in [[Flipping Mirroring and Rotating#DiagonalstoRanks|diagonals to rank]] or [[Flipping Mirroring and Rotating#FlipAbouttheDiagonal|flip about the diagonal]]. | as mentioned in [[Flipping Mirroring and Rotating#DiagonalstoRanks|diagonals to rank]] or [[Flipping Mirroring and Rotating#FlipAbouttheDiagonal|flip about the diagonal]]. | ||
Line 21: | Line 21: | ||
=Features= | =Features= | ||
− | <ref>[ | + | <ref>[https://github.com/gekomad/Cinnamon GitHub - gekomad/Cinnamon: C++ UCI chess engine]</ref> |
==[[Board Representation]]== | ==[[Board Representation]]== | ||
* [[Bitboards]] | * [[Bitboards]] | ||
Line 37: | Line 37: | ||
** [[Futility Pruning]] | ** [[Futility Pruning]] | ||
** [[Delta Pruning]] | ** [[Delta Pruning]] | ||
− | * [[ | + | * [[Move Ordering]] |
** [[MVV-LVA|MVV/LVA]] | ** [[MVV-LVA|MVV/LVA]] | ||
** [[Killer Heuristic]] | ** [[Killer Heuristic]] | ||
Line 66: | Line 66: | ||
=External Links= | =External Links= | ||
==Chess Engine== | ==Chess Engine== | ||
− | + | * [https://github.com/gekomad/cinnamon GitHub - gekomad/Cinnamon: C++ UCI chess engine] | |
− | * [https://github.com/gekomad/cinnamon | + | * [http://ccrl.chessdom.com/ccrl/404/cgi/compare_engines.cgi?family=Cinnamon&print=Rating+list&print=Results+table&print=LOS+table&print=Ponder+hit+table&print=Eval+difference+table&print=Comopp+gamenum+table&print=Overlap+table&print=Score+with+common+opponents Cinnamon] in [[CCRL|CCRL Blitz]] |
− | |||
− | * [http://ccrl.chessdom.com/ccrl/404/cgi/compare_engines.cgi?family=Cinnamon&print=Rating+list&print=Results+table&print=LOS+table&print=Ponder+hit+table&print=Eval+difference+table&print=Comopp+gamenum+table&print=Overlap+table&print=Score+with+common+opponents Cinnamon] in [[CCRL|CCRL | ||
==Misc== | ==Misc== | ||
* [https://en.wikipedia.org/wiki/Cinnamon Cinnamon from Wikipedia] | * [https://en.wikipedia.org/wiki/Cinnamon Cinnamon from Wikipedia] |
Latest revision as of 11:59, 11 February 2021
Cinnamon,
an UCI compliant open source chess engine by Giuseppe Cannella, written in C++11, published under GPL Version 3.
Cinnamon was first released in February 2013 [2] under that name, while former versions of the engine were called Butterfly.
It targets multiple hardware platforms and operating systems such as Windows, Linux, Mac OS and Android,
also available for the Raspberry Pi, and further provides a JavaScript library to play with chessboard.js or any js GUI.
Contents
Sliding Piece Attacks
Cinnamon 1.2 applied a kind of classical approach to generate ray-wise sliding piece attacks, captures and quiet moves. Cinnamon 2.0 already used line-wise occupancy lookups. Four pre-calculated attack arrays containing attack bitboards on ranks, files, diagonals and anti-diagonals were indexed by the square of the sliding piece, and the associated occupancy index of that line, determining the blockers affecting the attack set. Rather than to get the occupancy index from incremental updated rotated bitboards for each of the four line kinds, Cinnamon extracts line occupancies into a dense index range using multiplication and shift right, as mentioned in diagonals to rank or flip about the diagonal. The resulting 8-bit occupancy requires 512 KiB for all lookup tables, so considering the inner six bits would quarter the table sizes. In Cinnamon 2.3 the occupancy index may be computed by the PEXT instruction, if the executable is compiled with BMI2 enabled.
Features
Board Representation
- Bitboards
- Sliding Piece Attacks by line-wise Occupancy Lookup
Search
- Lazy SMP
- Iterative Deepening
- Aspiration Windows
- Principal Variation Search
- Transposition Table
- Selectivity
- Move Ordering
Evaluation
Misc
See also
Forum Posts
- OSX compiler wanted by Giuseppe Cannella, Winboard Forum, July 06, 2013
- Cinnamon 1.1 for Mac OS X 32-bit by Norbert Raimund Leisner, CCC, July 07, 2013
- Cinnamon 2.0 released by supersharp77, CCC, April 17, 2016
- Cinnamon 2.3 by Graham Banks, CCC, October 19, 2020
External Links
Chess Engine
Misc
- Cinnamomum burmannii from Wikipedia
- Cinnamomum cassia from Wikipedia
- Cinnamomum verum from Wikipedia
- Cinnamon (disambiguation) from Wikipedia
- cinnamon - Wiktionary
- Cinnamon (software) from Wikipedia
- Bill Anschell, Jose Martinez, Chris Symer - La Flor de la Canela by Chabuca Granda, YouTube Video
References
- ↑ Cinnamon: sticks (ceylon cinnamon from Sri Lanka), powder, and flowers. Created from 31 images stacked with CombineZP, by Simon A. Eugster, CC BY-SA 3.0, Wikimedia Commons, Cinnamomum from Wikipedia
- ↑ Cinnamon « G 6
- ↑ GitHub - gekomad/Cinnamon: C++ UCI chess engine