Difference between revisions of "CookieCat"
GerdIsenberg (talk | contribs) |
GerdIsenberg (talk | contribs) |
||
(3 intermediate revisions by the same user not shown) | |||
Line 146: | Line 146: | ||
* [http://www.talkchess.com/forum/viewtopic.php?t=45568 CookieCat and perft] by [[Steven Edwards]], [[CCC]], October 14, 2012 | * [http://www.talkchess.com/forum/viewtopic.php?t=45568 CookieCat and perft] by [[Steven Edwards]], [[CCC]], October 14, 2012 | ||
* [http://www.talkchess.com/forum/viewtopic.php?t=46964 For a limited time, two sources] by [[Steven Edwards]], [[CCC]], January 22, 2013 » [[Myopic]] | * [http://www.talkchess.com/forum/viewtopic.php?t=46964 For a limited time, two sources] by [[Steven Edwards]], [[CCC]], January 22, 2013 » [[Myopic]] | ||
+ | ==2020 ...== | ||
+ | * [http://www.talkchess.com/forum3/viewtopic.php?f=2&t=73005 CookieCat retouched] by [[Roland Chastain]], [[CCC]], February 06, 2020 | ||
=External Links= | =External Links= | ||
+ | ==Chess Engine== | ||
+ | * [https://github.com/rchastain/cookiecat GitHub - rchastain/cookiecat: Pascal chess program by Steven Edwards] | ||
+ | ==Misc== | ||
* [https://en.wikipedia.org/wiki/Cookie Cookie from Wikipedia] | * [https://en.wikipedia.org/wiki/Cookie Cookie from Wikipedia] | ||
* [https://en.wikipedia.org/wiki/Cat Cat from Wikipedia] | * [https://en.wikipedia.org/wiki/Cat Cat from Wikipedia] | ||
Line 154: | Line 159: | ||
* [https://en.wikipedia.org/wiki/Smokey_Stover Smokey Stover from Wikipedia] | * [https://en.wikipedia.org/wiki/Smokey_Stover Smokey Stover from Wikipedia] | ||
* [https://en.wikipedia.org/wiki/Spooky Spooky from Wikipedia] | * [https://en.wikipedia.org/wiki/Spooky Spooky from Wikipedia] | ||
− | * [[:Category: | + | * [[:Category:Dave Pike|The Dave Pike Set]] - Spooky, [https://www.discogs.com/de/The-Dave-Pike-Set-Got-The-Feelin/release/1789749 Got the Feelin'] (1968), [https://en.wikipedia.org/wiki/YouTube YouTube] Video |
− | : | + | : lineup: [[:Category:Dave Pike|Dave Pike]], [[:Category:Ruud Jacobs|Ruud Jacobs]], [https://nl.wikipedia.org/wiki/Louis_Debij Louis Debij], [https://www.discogs.com/de/artist/287923-Joop-Scholten Joop Scholten], [https://nl.wikipedia.org/wiki/Rob_Franken Rob Franken] |
− | : {{#evu:https://www.youtube.com/watch?v= | + | : {{#evu:https://www.youtube.com/watch?v=mELUGhDRGQo|alignment=left|valignment=top}} |
=References= | =References= | ||
Line 163: | Line 168: | ||
[[Category:Open Source]] | [[Category:Open Source]] | ||
[[Category:Pascal]] | [[Category:Pascal]] | ||
+ | [[Category:Mac]] | ||
[[Category:Comics]] | [[Category:Comics]] | ||
[[Category:Mammal]] | [[Category:Mammal]] | ||
− | [[Category: | + | [[Category:Dave Pike]] |
− | [[Category: | + | [[Category:Ruud Jacobs]] |
− | |||
− |
Latest revision as of 11:13, 19 October 2020
CookieCat,
an educational open source chess program by Steven Edwards designed for pedagogical purposes, written in Free Pascal [2]. CookieCat evolved from the earlier Bozochess project [3] announced in October 2011 [4], renamed in December 2011 [5], and first released in January 2012 [6] under the permissive BSD License. However, Steven's wish that his CookieCat should be easily searchable on the net without too many false positives didn't fulfill when Steven Universe came up with a fictional character [7] and ice cream [8] in 2013.
Contents
Description
CookieCat utilizes bitboards as basic data structure to represent the board. Inside CookieCat's source code [9], there are three groups of routines named after some of Steven's feline companions. There are the Lucky positional evaluator routines, the Smokey mate finder routines, and the Spooky general search routines. The names were chosen not so much to be cute, but rather to make it easier for others to identify the program's functional organization [10]. CookieCat features five hash-tables, beside the main transposition table, an endgame tablebase cache, a pawn hash table, evaluation hash table, and a dedicated perft hash table, and can further probe an opening book [11] and Edwards' tablebases.
Bitboard Infrastructure
Bitboards are defined as union (variable structure) of four 16-bit words and one 64 bit value:
bbtype = record case Boolean of False: (wvec: array [bbwtype] of bbwspantype); { Array of bitboard words } True: (bv64: ui64type) { Unsigned 64 bit value } end;
Population count and BitScan rely on 16-bit lookups:
function BbCount(var bb: bbtype): cctype; inline; var myresult: cctype; bbw: bbwtype; begin with bb do begin myresult := 0; for bbw := bbwmin to bbwmax do myresult := myresult + bitcountvec[wvec[bbw]] end; BbCount := myresult end; { BbCount } function BbFirstSq(var bb: bbtype): sqxtype; inline; var myresult: sqxtype; bbwindex: Integer; wordfirstbit: Integer; begin with bb do begin myresult := sqnil; bbwindex := 0; while (myresult = sqnil) and (bbwindex < bbwlen) do begin wordfirstbit := bitfirstvec[wvec[bbwindex]]; if wordfirstbit >= 0 then myresult := sqxtype(wordfirstbit + (bbwindex * bbwbitlen)) else Inc(bbwindex) end end; BbFirstSq := myresult end; { BbFirstSq }
Spooky
CookieCat's search dubbed Spooky is implemented as iterative search using a finite-state machine as nested procedure inside SpookyFindMove, which structure is outlined in following snippet:
{ ***** Spooky search routines ***** } procedure SpookyFindMove(var ssc: ssctype); procedure SpookyPrepareRoot; procedure SpookyIterationSequence; procedure SpookyIterate; procedure SpookySearch; procedure SpookyLimitTestNode; procedure SpookyMovePick; procedure SpookyOrderMoves; procedure SpookyPickThis(index: Integer); procedure SpookyMinimax; begin { SpookySearch } with ssc do while pirvec[ply].nss <> nssexit do case pirvec[ply].nss of nssplystart: { Search state: Initialize processing at this node } nssfirdrawtest: { Search state: Draw tests for fiftymoves/insufficient/repetition } nsstbprobe: { Search state: Probe the tablebases } nssstandtest: { Search state: Gainer (QSearch ed.) search stand-pat evaluation and test } nssgenerate: { Search state: Move generation } nssmovepick: { Search state: Move pick } nssexecute: { Search state: Execute the move and advance one ply } nssretract: { Search state: Retreat one ply and retract the move } nsspostscan: { Search state: Post move scan operations } nssplyfinish: { Search state: Final processing for this node } end; { SpookySearch } end; { SpookyIterate } end; { SpookyIterationSequence } end; { SpookyFindMove }
Smokey
Smokey is CookieCat's iterative mate finder with nested procedures outlined below:
{ ***** Smokey mate finder routines ***** } procedure SmokeyFindMate(var ssc: ssctype; fmvc: Integer); procedure SmokeySearch; procedure SmokeyApplyKillerBonus; begin with ssc do while pirvec[ply].nss <> nssexit do case pirvec[ply].nss of nssplystart: nsstermtest: nssgenerate: nssmovepick: nssexecute: nssretract: nsspostscan: end; { SmokeySearch } end; { SmokeyFindMate }
Lucky
Lucky, CookieCat's evaluation function with evaluation hash table and pawn hash table considers material, pawn structure with focus on passed pawns [12], and piece mobility.
Download
See also
Forum Posts
2011
- Announcement: The Bozochess Project by Steven Edwards, CCC, October 05, 2011
- Release date target by Steven Edwards, CCC, October 16, 2011
- BozoChess Monday release schedule by Steven Edwards, CCC, December 12, 2011
- The name change by Steven Edwards, CCC, December 16, 2011
- Number sequence puzzle by Steven Edwards, CCC, December 16, 2011 » Endgame Tablebases [14]
- CookieCat Monday release schedule by Steven Edwards, CCC, December 19, 2011
- Tablebase class name list available by Steven Edwards, CCC, December 19, 2011 » Endgame Tablebases
- CookieCat sample games by Steven Edwards, CCC, December 24, 2011
- CookieCat goes mulithreaded by Steven Edwards, CCC, December 31, 2011 » Perft
2012 ...
- CookieCat's opening book implementation by Steven Edwards, CCC, January 05, 2012 » Opening Book
- CookieCat's pawn structure code by Steven Edwards, CCC, January 07, 2012
- CookieCat's early search termination by Steven Edwards, CCC, January 07, 2012
- CookieCat and Cookie Cat by Steven Edwards, CCC, January 08, 2012
- CookieCat source via the net by Steven Edwards, CCC, January 26, 2012
- CookieCat and perft by Steven Edwards, CCC, October 14, 2012
- For a limited time, two sources by Steven Edwards, CCC, January 22, 2013 » Myopic
2020 ...
- CookieCat retouched by Roland Chastain, CCC, February 06, 2020
External Links
Chess Engine
Misc
- Cookie from Wikipedia
- Cat from Wikipedia
- Lucky from Wikipedia
- Smokey from Wikipedia
- Smokey Stover from Wikipedia
- Spooky from Wikipedia
- The Dave Pike Set - Spooky, Got the Feelin' (1968), YouTube Video
- lineup: Dave Pike, Ruud Jacobs, Louis Debij, Joop Scholten, Rob Franken
References
- ↑ Image from The first Spooky and the fifth Smokey (April 7, 1935) from The Birth of Smokey Stover - First Puffs (1935), Bill Holman Comics, Copyright, 1935, by Chicago Tribune, New York News Syndicate Inc., supplied by Carl Linich, posted by Paul Tumey, April 24, 2012
- ↑ Free Pascal wiki
- ↑ Release date target by Steven Edwards, CCC, October 16, 2011
- ↑ Announcement: The Bozochess Project by Steven Edwards, CCC, October 05, 2011
- ↑ The name change by Steven Edwards, CCC, December 16, 2011
- ↑ CookieCat source via the net by Steven Edwards, CCC, January 26, 2012
- ↑ Cookie Cat (character) | Steven Universe Wiki
- ↑ Cookie Cat | Steven Universe Wiki
- ↑ Description is based on the source code - CookieCat.pas
- ↑ CookieCat and Cookie Cat by Steven Edwards, CCC, January 08, 2012
- ↑ CookieCat's opening book implementation by Steven Edwards, CCC, January 05, 2012
- ↑ CookieCat's pawn structure code by Steven Edwards, CCC, January 07, 2012
- ↑ Source code courtesy Steven Edwards
- ↑ A018214 - OEIS | Alkane (or paraffin) numbers