Difference between revisions of "Cinnamon"

From Chessprogramming wiki
Jump to: navigation, search
(Created page with "'''Home * Engines * Cinnamon''' FILE:Cinnamomum verum spices.jpg|border|right|thumb| Cinnamon <ref>Cinnamon: sticks ([https://en.wikipedia.org/wiki/Cinnam...")
 
 
(8 intermediate revisions by the same user not shown)
Line 4: Line 4:
  
 
'''Cinnamon''',<br/>
 
'''Cinnamon''',<br/>
an [[UCI]] compliant [[:Category:Open Source|open source chess engine]] by [[Giuseppe Cannella]], written in [[Cpp|C++11]], published under [[Free Software Foundation#GPL|GPL Version 3]]. Cinnamon was first released in February 2013 <ref>[http://www.g-sei.org/cinnamon/ Cinnamon] « [[G 6]]</ref> under that name, while former versions of the engine were called [[Butterfly]]. It targets multiple hardware platforms and [https://en.wikipedia.org/wiki/Operating_system 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 [[chessboardjs]] or any js [[GUI]].  
+
an [[UCI]] compliant [[:Category:Open Source|open source chess engine]] by [[Giuseppe Cannella]], written in [[Cpp|C++11]], published under [[Free Software Foundation#GPL|GPL Version 3]].  
Cinnamon is bundled with the [[Tarrasch|Tarrasch GUI]] for Windows.  
+
Cinnamon was first released in February 2013 <ref>[http://www.g-sei.org/cinnamon/ Cinnamon] « [[G 6]]</ref> under that name, while former versions of the engine were called [[Butterfly]].  
 +
It targets multiple hardware platforms and [https://en.wikipedia.org/wiki/Operating_system 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]].
 +
 
 +
=Sliding Piece Attacks=
 +
Cinnamon '''1.2''' applied a kind of [[Classical Approach|classical approach]] to generate ray-wise [[Sliding Piece Attacks|sliding piece attacks]], [[Captures|captures]] and [[Quiet Moves|quiet moves]].
 +
Cinnamon '''2.0''' already used line-wise [[Sliding Piece Attacks#By Occupancy Lookup|occupancy lookups]].
 +
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.
 +
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,
 +
as mentioned in [[Flipping Mirroring and Rotating#DiagonalstoRanks|diagonals to rank]] or [[Flipping Mirroring and Rotating#FlipAbouttheDiagonal|flip about the diagonal]].
 +
The resulting 8-bit occupancy requires 512 KiB for all lookup tables, so considering the [[First Rank Attacks#TheOuterSquares|inner six bits]] would quarter the table sizes.
 +
In Cinnamon '''2.3''' the occupancy index may be computed by the [[BMI2#PEXT|PEXT]] instruction, if the executable is compiled with [[BMI2]] enabled.
  
 
=Features=
 
=Features=
<ref>[http://cinnamonchess.altervista.org/ cinnamon chess engine - open source chess engine]</ref>
+
<ref>[https://github.com/gekomad/Cinnamon GitHub - gekomad/Cinnamon: C++ UCI chess engine]</ref>
* [[Rotated Bitboards]]
+
==[[Board Representation]]==
 +
* [[Bitboards]]
 +
* [[Sliding Piece Attacks]] by line-wise [[Sliding Piece Attacks#By Occupancy Lookup|Occupancy Lookup]]
 +
==[[Search]]==
 
* [[Lazy SMP]]
 
* [[Lazy SMP]]
 
* [[Iterative Deepening]]
 
* [[Iterative Deepening]]
Line 15: Line 31:
 
* [[Principal Variation Search]]
 
* [[Principal Variation Search]]
 
* [[Transposition Table]]
 
* [[Transposition Table]]
* [[Razoring]]
+
* [[Selectivity]]
* [[Null Move Pruning]]
+
** [[Razoring]]
* [[Late Move Reductions]]
+
** [[Null Move Pruning]]
* [[Futility Pruning]]
+
** [[Late Move Reductions]]
* [[Delta Pruning]]
+
** [[Futility Pruning]]
* [[Killer Heuristic]]
+
** [[Delta Pruning]]
 +
* [[Move Ordering]]
 +
** [[MVV-LVA|MVV/LVA]]
 +
** [[Killer Heuristic]]
 +
==Evaluation==
 +
* [[Material]]
 
* [[Lazy Evaluation]]
 
* [[Lazy Evaluation]]
* [[MVV-LVA |MVV/LVA]]
+
* [[Evaluation Hash Table]]
* [[Polyglot]] [[Opening Book]]
+
* [[Mobility]]
 +
* [[Pawn Structure]]
 +
* [[King Safety]]
 +
==Misc==
 +
* [[PolyGlot]] [[Opening Book]]
 
* [[Gaviota Tablebases]]
 
* [[Gaviota Tablebases]]
 +
* [[Syzygy Bases]]
 
* [[Perft]]
 
* [[Perft]]
 
* [[Pondering]]
 
* [[Pondering]]
 +
* [[Chess960]]
  
 
=See also=
 
=See also=
Line 35: Line 62:
 
* [http://www.talkchess.com/forum/viewtopic.php?t=48582 Cinnamon 1.1 for Mac OS X 32-bit] by [[Norbert Raimund Leisner]], [[CCC]], July 07, 2013
 
* [http://www.talkchess.com/forum/viewtopic.php?t=48582 Cinnamon 1.1 for Mac OS X 32-bit] by [[Norbert Raimund Leisner]], [[CCC]], July 07, 2013
 
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=59877 Cinnamon 2.0 released] by supersharp77, [[CCC]], April 17, 2016
 
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=59877 Cinnamon 2.0 released] by supersharp77, [[CCC]], April 17, 2016
 +
* [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=75445 Cinnamon 2.3] by [[Graham Banks]], [[CCC]], October 19, 2020
  
 
=External Links=  
 
=External Links=  
 
==Chess Engine==
 
==Chess Engine==
* [http://cinnamonchess.altervista.org/ cinnamon chess engine - open source chess engine]
+
* [https://github.com/gekomad/cinnamon GitHub - gekomad/Cinnamon: C++ UCI chess engine]
* [https://github.com/gekomad/cinnamon gekomad/cinnamon · GitHub]
+
* [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://www.g-sei.org/cinnamon/ Cinnamon] « [[G 6]]
 
* [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 40/4]]
 
 
==Misc==
 
==Misc==
 
* [https://en.wikipedia.org/wiki/Cinnamon Cinnamon from Wikipedia]
 
* [https://en.wikipedia.org/wiki/Cinnamon Cinnamon from Wikipedia]
Line 59: Line 85:
 
[[Category:Open Source]]  
 
[[Category:Open Source]]  
 
[[Category:GPL]]
 
[[Category:GPL]]
 +
[[Category:PC]]
 
[[Category:UCI]]  
 
[[Category:UCI]]  
 +
[[Category:Chess960]]
 +
[[Category:ARM]]
 +
[[Category:X86]]
 +
[[Category:X64]]
 
[[Category:Android]]
 
[[Category:Android]]
 
[[Category:Mac]]
 
[[Category:Mac]]
 +
[[Category:Linux]]
 +
[[Category:Windows]]
 
[[Category:Plant]]
 
[[Category:Plant]]
 +
[[Category:Music]]

Latest revision as of 10:59, 11 February 2021

Home * Engines * Cinnamon

Cinnamon [1]

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.

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

[3]

Board Representation

Search

Evaluation

Misc

See also

Forum Posts

External Links

Chess Engine

Misc

Cinnamomum burmannii from Wikipedia
Cinnamomum cassia from Wikipedia
Cinnamomum verum from Wikipedia

References

Up one Level