stellar

UCI Chess engine written in C++20
git clone git://git.dimitrijedobrota.com/stellar.git
Log | Files | Refs | README | LICENSE

commit 40ec0f1a8e50396cea47115cda5943fcaa6efbf5
parent 05d6b505d3935ba4ee5fe030f649aa138b9b8c6b
author Dimitrije Dobrota <mail@dimitrijedobrota.com>
date Sat, 5 Aug 2023 14:34:55 +0200

Aspiration Window, UCI skip unknown

Diffstat:
M CMakeLists.txt | + -
M src/engine/engine.c | ++++++++++++++++++++++++ ----------

2 files changed, 25 insertions(+), 11 deletions(-)


diff --git a/ CMakeLists.txt b/ CMakeLists.txt

@@ -3,7 +3,7 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON) project( Stellar
VERSION 0.0.12
VERSION 0.0.13
DESCRIPTION "Chess engine written in C" HOMEPAGE_URL https://git.dimitrijedobrota.com/stellar.git LANGUAGES C

diff --git a/ src/engine/engine.c b/ src/engine/engine.c

@@ -17,6 +17,9 @@ #define FULL_DEPTH 4 #define REDUCTION_LIMIT 3
#define INFINITY 50000
#define WINDOW 50
typedef struct Stats Stats; struct Stats { long nodes;

@@ -231,12 +234,19 @@ void move_print_UCI(Move move) { void search_position(const Board *board, int depth) { Stats stats = {0};
for (int crnt = 1; crnt <= depth; crnt++) {
int alpha = -INFINITY, beta = INFINITY;
for (int crnt = 1; crnt <= depth;) {
stats.follow_pv = 1;
int score = negamax(&stats, board, -50000, 50000, crnt);
int score = negamax(&stats, board, alpha, beta, crnt);
if (score <= alpha || score >= beta) {
alpha = -INFINITY;
beta = INFINITY;
}
alpha = score - 50;
beta = score + 50;
printf("info score cp %4d depth %2d nodes %10ld pv ", score, crnt,
printf("info score cp %d depth %d nodes %ld pv ", score, crnt,
stats.nodes); for (int i = 0; i < stats.pv_length[0]; i++) {

@@ -244,6 +254,8 @@ void search_position(const Board *board, int depth) { printf(" "); } printf("\n");
crnt++;
} printf("bestmove ");

@@ -381,13 +393,16 @@ Board *Instruction_parse(Instruction *self, Board *board) { } if (strcmp(token, "go") == 0) {
token = Instruction_token_next(self);
int depth = 6;
if (token && strcmp(token, "depth") == 0) {
token = Instruction_token_next(self);
depth = atoi(token);
} else {
printf("Unknown argument after go\n");
for (token = Instruction_token_next(self); token;
token = Instruction_token_next(self)) {
if (token && strcmp(token, "depth") == 0) {
token = Instruction_token_next(self);
depth = atoi(token);
} else {
printf("Unknown argument %s after go\n", token);
}
} search_position(board, depth); continue;

@@ -402,7 +417,6 @@ Board *Instruction_parse(Instruction *self, Board *board) { print_info(); continue; }
} while ((token = Instruction_token_next(self))); return board;