JaksaH Chess Engine
What is JaksaH?
JaksaH is x86/x64 computer chess engine, developed by Aleksandar Jakšić in C++, from scratch! JaksaH is compatible with both UCI and WinBoard chess protocols. The engine has no GUI but can be used with many chess playing programs including the free Arena and Winboard as well as commercial Shredder, Fritz and HIARCS programs.
When compared to human players, JaksaH plays relatively strong chess, reaching expert strength even with moderate hardware. It should present a tough challenge and make a good sparring partner for the most amateur chess players.
JaksaH stands for everything that I ❤️ about Software Engineering and Computer Science!
It is simple yet powerful software. It is easy to use. It is fast and robust. It is documented. It works on different platforms and architectures. It is light on resources. It is well designed, passionately developed, and thoroughly tested. It is free. It utilizes versatile algorithms and data structures. It is known and used by thousands of people worldwide in 113+ countries. It consistently ranks among Top 400 world engines!
JaksaH also, in a peculiar way, extends the multi-generational tradition of my family with a decent history of avid chess players.
What does JaksaH mean?
The name JaksaH ( 🇷🇸 Serbian: ЈакшаХ / JakšaH ) implies two things actually.
Firstly, Jakša (without H) is a typical nickname given to male members in my family as it is commonly derived from our last name. We have at least five people in our family that most of their friends prefer to call Jakša. And guess what? Almost all Jakšas are known as avid chess players! :) I'll share with you the story that made us all proud. One of Jakšas, my uncle, Miroslav Jakšić, participated in the simultaneous exhibition with the actual world chess champion at the time, Anatoly Karpov. This event was organized in the city of Bugojno, ex-Yugoslavia, in 1978. Karpov had already won in previous 28 matches with amateur players, but 2 players stubbornly remained in their seats. One of them was Jakša. As time was passing by, Karpov realized that his position was not very good in the game with Jakša, so he offered him a draw. Now, imagine a situation when the actual world chess champion offers you a draw, and you are absolutely unknown, amateur, chess player :) Jakša not only calmly refused the offer from Karpov, but he also proceeded by winning this game!! 😀
Secondly, "jak" in Serbian means strong/powerful, and "šah" means chess. Therefore, "jak šah" literally translates to the "strong chess" engine. Not so close to the truth when it comes to competing with the world best chess programs nowadays; but hey, I am working on it, just give me another 13 years, and it will get really strong, I promise 🙂
What's unique about JaksaH?
Its source code, other than reserved keywords of C++ language, is entirely written with non-ASCII (Serbian Cyrillic) characters.
When I was young, I was passionate about two things (if you were thinking of beer and woman, no, you've got it wrong) 🙂 It was C++ and Chess! JaksaH was my very first attempt to combine those two passions of mine. Back in 2004, I was tricked into the world of chess programming when I started my early work on JaksaH. I began with Visual C++ 6.0 compiler that I got from Microsoft representative when I was student at the University of British Columbia. It took me about ten days to develop version 0.01. JaksaH's first moves were 1. g4 e6 2. Bh3. The rest was history...
As of v0.05, JaksaH fully supported FIDE rules. Since the development started, I've had many lengthy breaks. In fact, my estimate is that I've spent no more than 3-4 full-time person-months combined since the beginning of the project. Most of this time was spent on testing, debugging and optimization (design/code, run-time, compilation).
My lifetime goal is to make JaksaH particularly strong engine. This would require, as its minimum, competing at the Grandmaster’s level of play on average hardware as well as being consistently ranked among Top 100 engines in the world. My plan is to have fun while rigidly practicing proven software engineering principles. I want to keep it continuously enhancing it while experimenting with numerous algorithms, optimization techniques and new heuristics concepts suggested by research and chess programming communities.
There is so much space for further improvements, adopting more advanced concepts and so on but I am not in rush to work on them. Firstly, I'd rather have one feature that works well than dozen ones that are broken. KISS. 🙂 Secondly, I don't have enough time to pursue my hobby. And I really mean that. 🙂
I am not young anymore, but I still find myself passionate about C++ and Chess. I found no other professional or personal project to be as challenging, frustrating and rewarding at the same time as this one. Nothing came even close. And I doubt this is ever going to change. 🙂
JaksaH implements many widely used concepts typically seen in modern chess programs:
- Board Representation: Rotated 64-bit integers combined with 8x8 integer arrays.
- Principal Variation Search (PVS) algorithm based on enhancements of Minimax-based, Alpha-Beta algorithm.
- Extended with Quiescence Search algorithm for dynamic positions.
- Move generator.
- Heuristics for move ordering:
- Iterative Deepening
- Static Exchange Evaluation (SEE)
- Killer Moves
- Basic static evaluation function.
- Transposition (hash) tables (for storing previously searched/evaluated positions).
- Opening database (for finding the next move to play from the opening book of 62K+ positions).
- Game logic/time management that supports three styles of time control:
- Conventional chess clocks
- ICS-style incremental clock
- Exact number of seconds per move
- User Interface for playing human and/or computer players in various modes such as
- Native (text) mode on Windows x86/x64
- Supports both Winboard and UCI protocols
- Pluggable third-party GUIs (Arena, WinBoard, Shredder, Fritz and HIARCS, etc)
- MAC OS X platform (iOS 4.3 or later)
You can play JaksaH in two modes:
- GUI mode
- WinBoard config: Run the executable with the wb parameter, i.e. "JaksaH_v1.15_64-bit.exe wb").
- Arena config: You can configure JaksaH either as WB or UCI engine. Make sure to select appropriate protocol Type from the dropdown (either Winboard or UCI), and also provide appropriate parameter to the command line (either wb or uci).
- Shredder, Fritz and HIARCS config: When installing JaksaH, use the UCI protocol.
- Native text/console mode: Run the executable without any parameters.
As of v1.15, JaksaH is built with Visual Studio Community 2019 C++ compiler. Minimum supported Winsdows version is Vista or later. If you still use Windows XP, use JaksaH v1.14.1 x86.
JaksaH can also be built for MAC OS X platform. In fact, a couple of years ago a friend of mine from Sweden helped me develop the JaksaH app for iOS platform. While he worked on the GUI aspect, I was involved on portability/integration work. The project was code named Orthos. It used to be available for iPhone, iPod touch, and iPad devices running iOS 4.3 or later. Disclaimer: I don't have iPhone so I never really run it or tested it myself, other than watching it on Skype playing. But it was quite enjoyable experience enabling JaksaH on mobile devices. Orthos app was built from older JaksaH v1.11 branch. This joint development effort is not active anymore.
In a future, JaksaH might be available on Linux as well, however no ETA on this work yet.
Bayesian Elo Rating
List of web sites (likely incomplete) that include JaksaH in computer chess tournaments and provide rating estimates:
JaksaH is free for non-commercial use. It can be freely used for playing chess games or running computer chess tournaments.
Comments, bug reports, or suggestions are welcome. Mail me. Gens una sumus!