
since this is my first post on this forum, allow me to introduce myself quickly: My Name is Roland Tomasi, I am working as freelance software developer/architect since approx. 30 years in the field of AI and OCR. I have a strong background in mathematics and theoretical physics. Every now and then I involve myself in "small" programming projects that are totally unrelated to my work, I do that for the fun it brings, but also to keep my programming skill from rusting (which quickly happens if you only work in a narrow segment of the art for a while). I call these projects "Fingerübungen", an analogy to the etudes piano players do to keep their skills up.
The chess engine I am announcing here started exactly as such a project. I am hard pressed to tell you guys the exact year that I started working on it, but it must be somewhere around 2013. Indeed after a few days of coding I had a program that played correct chess, but was about the weakest opponent one can imagine. It was a totally naive implementation written with C#. A few google searches made me discover CPW, which is imho one of the most astounding wikis on the net: so much brain-candy, so many ideas. I became addicted to chess-programming.
Over the last years the "engine" was rewritten several times and ported to C++. I even played around with an OpenCL version in the hopes of harnessing the power of modern GPUs, but (as you may already guess) failed miserably at efficiently parallelizing the search in a way that fits these vector-based architectures of the GPUs. About two years ago I had a version that was playing reasonably strong (it consistently beat the FairyMax version bundled with Winboard at the time), but it was buggy, full of search instabilities and generally not anything I would show around without being ashamed of my work.
A few months ago I started reading Scott Meyers "Effective Modern C++" (highly recommended read if your interested in C++17) and decided that rewriting the engine from scratch with the concepts of that book in mind. This time it is intended to be the real deal and I plan to go public with that engine soon, the work is not finished yet, however. The design goals are the following:
- A library allowing to implement other boardgames (variants, checkers, etc.) with different boardsizes and more than two players from this project. I have never really tried anything other than 2 players yet, so in that direction, aswell as when it comes to variant move generation a lot of work still remains to be done. As proof of concept I have a working tic-tac-toe engine, which is quite nice, since that game is totally solvable (always a draw if you play correctly) and with a 3x3 board and only one piece type and only one move type probably the most minimal boardgame imaginable. I probably own the most overengineered tic-tac-toe engine in the world now

- A chess engine that makes use of the power that C++ gives to the programmer: template-heavy, lot's of constexpr, noexcept, C++17 move semantics, etc. I have to admit, that since I try to not allocate on the heap whenever possible, there aren't so many instances where move semantics are helpful.
- Totally portable code. A cmake project, that compiles against any C++17 capable toolchain and strictly adheres to the C++17 standard. It should not use any third-party libraries, only the standard library included with C++17. I may however, at some point include tablebases lookups, and do not intend to reinvent the wheel there, so at least for that I will probably use some sort of third-party library. Still the goal is that it should be able to compile on any platform with a C++17 capable compiler.
- Achieve a strength of more than 2500 ELO.
The engine's name will be Pygmalion, in reference to to greek mythology (https://en.wikipedia.org/wiki/Pygmalion_(mythology)), because at some point my girlfriend started to complain, that I love the engine more than her, which reminded me of that greek legend.
I do plan to make my source-code public, once it reaches a mature-enough state, however I have not decided on the licensing model yet. Open source is still a new world for me, and I have to sift through the intricacies of the different licensing models before being able to make a decision.
If you are interested in the current development build, I am happy to share executables. Contact me via PM in that case. What I would need to know then however, is for which platform (Windows/Linux?) and for which processor (x64? SSE? AVX?, etc) I will have to build it. Bear in mind: what you will get is a development snap-shot. The current state of the engine is very much comparable to a formula 1 car in the box, whith lot's of components taken out for inspection. It will not play any form of strong chess in its current state

I realize that this post already is quite long. I plan to give more detailed descriptions of the individual engine components in this thread, but I guess it will be one post per component, and I don't want to give any shedule on how fast all these posts will come.
Anyways, glad to be here on the forum. I have been lurking here for quite some while now, and many of you guys have become quite known to me, although that is obviously only one-way atm.
[EDIT: typos]