Due to the recent turbulence regarding Houdini and Fire I re-activate the Programmer Code of Honor giving the new generation of chess programmers the possibility to present their engines and subscribe to the principles of fair competition as stipulated on this page.
I document where stuff came from in the program comments rather than the readme. I have most of them but I won't swear that I have them all. Bruja is source on request and Cupcake is open source so anyone interested in originality can check for themselves.
The inspiration comes from several books. AI books: Artificial Intelligence by Patrick Henry Winston; The Handbook of Artificial Intelligence by Barr, Figenbaum & Cohen; The Art of Computer Programming by Knuth; various ICGA publications, and more.
Numerous conversations with others in the field
including Bob Hyatt, Brian Richardson, James Swafford,
Vincent Diepeveen, Gian-Carlo Pascutto, Shay Bushinsky,
Amir Ban, GM Boris Alterman, Andrew Williams, James
I find it difficult to extract concepts from just looking at code, which is why I hardly ever do that. In the meantime, I see nothing wrong with allowing others to reuse open source game playing code in tournaments as long as
1. sufficient differentiation is demonstrated, and
2. equal attribution is given to the original authors (even if modified). Additional permission would not be needed in case of GPL or BSD-style license. If such a program wins, then the prize and recognition should be shared with all contributors.
Source code provided with my program under GPL. Many ideas from many places as described in readme.txt and in the individual source code files. Many ideas come from the old rgcc, ccc, chess programming wiki, etc discussions.... some of these (usually specific ideas) are documented in the code, for others (usually common things, I think) the specific origin of the idea to me is lost in time (development on-and-off over 15 years).
My engine is in VB.net.I started from scratch. Most of the algorithms were from Bruce Moreland (alpha beta,
quiescence,...). It take me years to tune the search in order to have a not too weak engine, although it is not very strong. LMR and NullMove seems to work, as well as extensions in case of checks in the main search, and checks in the first plies of quiescence. I have not TT, butsome kinds of History Tables which are depth
dependent. I tend to try original ideas but they usually
don't work. I do not record very well the improvements between versions.
Many ideas taken from Stockfish, Sloopy, Robbo and Gull. The code is completely written by myself with the exception of MT (random number generator), Magic Move Generator (By Praddu), some optimized bitCount and bitScan code snipets.
Frenzee is a rotated bitboard engine. Every single line of code is handwritten by me there is no copy/paste from any other source. I feel it is my design, my ideas, my engine. However, I have over the years looked at other programs, like Crafty, Beowulf, Phalanx and other such oldies.
If one were to look at the engine with the same scrutiny as was the case for Rybka then similarities would no doubt be detected. The move generator has something in common with Crafty, since it is a rotated incremental bitboard
Many of the eval terms are also public knowledge. I estimate that the original ideas in Frenzee probably amount to 100-200 points. The rest of its strength comes from implementing and tuning publicly known ideas or variations thereof such as PVS, nullmove, LMR, check extension, hashing and so forth.
Heaviest influence came from Bruce Moreland's programming pages, and the comments in the crafty code documentation.
My motivation is not engine strength - I derive most pleasure in writing engines from scratch that play a legal game with a few evaluation terms. See recent talkchess posts about C# performance!
Having a 2200 engine on FICS playing 1000's of games
is rewarding. My other reason is meeting people involved - such as at the CPT tournament hosted by Richard Pijl, or vis the online tournaments.
On my home computer I have many self-written engines in pure C, C++, Java, C# and VB. This is why I release with source. Since I began in 2004, I've written many engine incarnations using Rotated BB, 0x88, Mailbox, Magic BB.
its original from starting on, first using rotated bitboards,
and later changed that with pradu's Magic Bitboards. Of course some ideas are inspired and took from other open sources too. own hard worked over many years ago, never copied any lines from other. but only the code of nalimov for tablebase access is included to the source with permission.
Portfish is the .Net port of Stockfish, so it is means to be an exact replica of Stockfish on the source level. Technically it employs solutions which are more natural or has to be formulated differently under .Net (object broker concept).
WhiskySoda is my original engine, it is heavily inspired by
Stockfish/Portfish and GarboChess. Bitboard operations,
FEN parsing, randoms, polyglot book handling are taken
over from Portfish, search inspired by Garbo. It currently
has a very basic eval, I will definitely use a lot of
inspirations there from literature and other engines if there will be time to continue.
Secondchess is derived from Pam Nguyen's firstchess. Its goal is to add a couple of features missing in firstchess (castle, ep) and some simple enhance in evaluation and search, and keep the original idea of firstchess of being a pedagogical tool for beginners.
First taught myself to program in 80386 assembler and
wrote a completely table driven PERFT called Godzilla. Then made a chess program in C called Carnivor, while
teaching myself to program in C. Then decided to go
BITBOARD and wrote RomiChess completely from my own head except for a couple of utility routines I got from Crafty and basic Alpha-Beta from books. I believe that it was Charles Roberson that said, RomiChess was the most original chess program that he had seen in a very long time.
The first version of Nightmare was written in assembler for the 8080 processor during the fall of 1977 and the spring of 1978. It was mainly inspired by the book 'Chess Skill in Man and Machine' by P.W. Frey and by the book 'The Heuristic Programming Approach' by J.R. Slagle.
The current v7.8x is a modern bitboard oriented engine, it is entirely written from scratch although the magic code is derived from Pradu Kannan's work and the Nalimov tablebasecode is used with permission from Eugene Nalimov and Andrew Kadatch.
Nightmare is Windows only, it has an incomplete UCI
implementation with most things hard coded, this is the main reason why I never cared to release it. I hope to address this weakness in the upcoming version 8.0 which is partly finished.
Sungorus by Pablo Vazquez. It uses ideas from Fruit (eval, via Toga Log User Manual), Stockfish (some search parameters, most notably LMR reduction size) DiscoCheck, (hanging pieces eval), Crafty (material imbalance table) and a couple of others, mentioned in comments.
What I consider original is some work on evaluation
function (pawn chains etc.), but it has been inspired by CCC posts of Lyudmil Tsvetkov and Carl Langan.
My goal is *not* to create an original engine to enter
competitions, but to give end users the opportunity to change engine's playing style and strength.
My C++ program Symbolic is entirely original other than
parts derived from my earlier original programs. While the Symbolic source is private, I have released sections of it for others to use. I also have released the full source of my ANSI C tablebase generator, my ANSI C SANKit, my Pascal program CookieCat, my C++ Audrino program Myopic and my Common Lisp CIL Chess In Lisp program. These are all original works with no source copied from any other author.
I give credit for some ideas to Slate and Atkin for their on their Chess 4.x program and to Wilkins for his Paradise program.
I've other chess engine: Drago, Raffaela and Freccia, all original works.
This engine is completely original from scratch in the Rust Programming Language, but it uses many well-known concepts.
One idea though, is taken straight from VICE, by Bluefever Software: updating castling permissions in make_move by using a pre-filled array that substracts permissions on moving the king or one of the rooks..
This engine is based on VICE, I started making modifications to the 1.0 version, added magic bitboard and many search and eval features, still had the same name but it was private, that was ~2013, then in 2016 I started with the code base from VICE 1.0 but with just plain alphabeta(no null move, no tt, etc..) and PSQT from CPW for the eval, magic bitboard, still there are many thing from VICE in the code, sure there will be some refactoring to get better/fast code
Inspired by -- but original at code level -- Stockfish, Rubi, Xiphos, Ethereal, Texel, Winter, Topple, Demolito, Defenchess, Amoeba, Arasan, and probably many others. I do this for fun and learning about chess programming.
I pick up ideas from the chess programming wiki, original articles, and from talkchess discussion. I then do my own implementation in the D language. I probably use too many ideas from other people to mention them all, so I mention none.
Written from scratch, original at the code level, with the exception of the fathom library. First inspiration was Van den Herik's thesis in the 80's on computer chess. Concrete inspiration from Stockfish, Maverick, Xiphos, Ethereal, Crafty and others, the Rebel website, CSVN and CCRL/other rating sites.
I wrote Raven with a lot of help from the ##chessprogramming IRC channel on freenode, the Chess Programming Wiki, and studying how other engines implented ideas. Some parts of the source (e.g king safety table, endgames with 5 or fewer pieces) were provided by other engine authors and are used with their express permission. I also use a library for magic move generation which is fully credited to its author according to the license in the source code.
FabChess - while written from scratch - has been inspired very much by all the great ideas and information contained in the chess programming wiki and other open source engines such as Ethereal, Asymptote and Weiss.
Sapeli is 100% original. Even magics are generated not copied. It is written for speed. I have different code for White/Black for branch prediction reasons. That obviously has affected the overall design of the program. The main focus was making Sapeli a nice little Linux/Unix program that works without much fuss. But at least it's unique.
Seer is written completely from scratch. The numerous search heuristics implemented in Seer originate, primarily, from the chess programming wiki. A few other ideas are the result of experimentation with variants of search heuristics found in several top engines.
Allie is original except for including Ankan's GPU NN backend which originated in the Lc0 project, Fathom for TB, and magic bitboards from Andrew Grant/Ethereal. She was heavily inspired by the A0, Lc0, and Ethereal chess engines.
Started completely from scratch. In the history of development I got inspired by - ideas from Vice video tutorials - implementations of several ideas in Olithink, Laser, Ethereal, Stockfish - following the patches tested at Fishtest and OpenBench
Parts of NNUE evaluation code implementation (the parts using SIMD instructions) were taken by Cfish.
NNUE nets were (so far) trained using a modified Nodchip/SF trainer binary running on training data generated with RubiChess.
Every engines I took code snippets from is licensed under GPLv3 as RubiChess is.
Original? Inspired by? I can't tell really, I read the Chess Programming Wiki, used many ideas from it, I have watched VICE videos, and looked into the source code of many open source projects. I am sure I have taken many ideas from many places.
And I can guarantee that I am too bad a chess programmer to come up with any novelty on my own!
I'm not an experienced chess programmer or even an experienced chess player. While I have written all of the code in Mantissa myself, almost all of the ideas contained within I've learned from the chess programming wiki or from reading the source of more mature engines. There is no specific engine that Mantissa is emulating, but there are no novel, revolutionary ideas to be found within her (yet). I hope one day to become experienced enough to give something new back to the chess programming community.
Mantissa is very much my work but I'm also very very much standing on the shoulders of giants. Wherever I use an idea that seems at all specific to an engine I've studied I try to give credit in the comments and the README and I will always strive to continue giving honest credit for the many cool ideas I've learned and tried to synthesize into Mantissa.