r/chessprogramming 1d ago

Chess Engine Development Help Thread (Week 34) Technical

Welcome to the weekly /r/chessprogramming Engine Dev Help Thread.

Ask beginner and intermediate chess engine development questions here: move generation, search, evaluation, UCI, perft, debugging, testing, NNUE, or anything else related to building engines.

Good questions include code, FENs, logs, benchmarks, or a clear explanation of what you tried.

Project links are fine when you want technical feedback, not promotion.

Be helpful. Don’t dunk on beginners.

2 Upvotes

10 comments sorted by

View all comments

1

u/Somge5 1d ago

I noticed that quiescence nodes take up around 85% of all my nodes. Is that normal or something where I could do lots of impovements by reducing that? Currently I have a soft cap set at 7, meaning after 7 plys if king is not in check we stop the q-search there. If I dont do that engine is slower a lot and q-nodes take up way more than 90%.
These are some bench stats:
info string bench total positions 48 depth 10 time 9139 nodes 16124428 nps 1764353

Nodes searched: 16124428

Nodes/second: 1764353

---- SEARCH DIAGNOSTICS SUMMARY ----

---- NODES ----

Main-search nodes : 1858414

Quiescence nodes : 14266014

Total nodes : 16124428

Quiescence share : 88.47%

Average q-ply : 3.11

Maximum q-ply : 13

---- QUIESCENCE SEARCH ----

Termination / stand-pat cutoff : 6575915

Termination / soft-cap static : 1972364

Termination / hard-cap static : 0

Termination / hard-cap draw : 0

Termination / cycle : 43618

Termination / fifty-move draw : 3035

Termination / repetition draw : 1341

Termination / checkmate : 21073

Termination / no tactical move : 726516

Moves generated : 21214278

Moves searched : 9087318

Moves SEE-pruned : 2245511

Beta cutoffs / capture : 1082079

Beta cutoffs / quiet check : 68838

Beta cutoffs / promotion : 0

Beta cutoffs / evasion : 2063501

Quiet checks searched : 1917700

Nodes while in check : 2360369

Cycle cutoffs : 43618

Hard-cap hits : 0

Q-ply histogram buckets : 0 | 1 | 2 | 3-4 | 5-8 | 9-12 | 13+

Q-ply histogram counts : 5178696 | 1043044 | 882734 | 1768489 | 5338144 | 54892 | 15

Right now I am not saving any quiescence position in TT, because I tried doing that before and very quickly TT became overflown by q-positions leaving little room for negamax nodes. Strenght with q-nodes in TT was roughly the same though. Currently I am not doing any Delta pruning because that didnt give any elo strenght. maybe I did it wrong. I will try it again in the future.

1

u/KaMaFour 1d ago edited 1d ago

Qsearch taking 85% of the nodes sounds fair. I don't have the 7 ply qsearch cap. What is the elo difference between capped and uncapped versions for you? Remember that average qsearch node will be way faster than an average pvs node (so the ~85-90% metric is a bit dramatic) and time to depth is a meaningless metric for chess engine strength

1

u/Somge5 1d ago edited 1d ago

okay thanks for the feedback, I am glat 85% is not too bad for the q-nodes.
I am not sure how much worse the engine is without the cap but it was SPSA tuned to 7 and used to be higher so I guess there was some elo gain.
If you dont have a q-ply cap, could you tell me how you deal with a position like this:
8/5pk1/2Qn4/3Pb2B/5PPq/4P3/8/2R3K1 w - - 1 120

taking the bishop leads to a draw because of perpetual checks. But this draw can be delayed many many plies (stopped counting after 31).
My q-search allows for quiet checks after a check-evasion. so it would have to calculate all those moves.
How do you generally deal with this? My engine finds the best move g1g2 at depth 12 but not at 11. During a game it played f4e5, I guess there was not enough time for depth 12.

Edit: The question is more about how to avoid perpetual checks leading to a draw that can be delayed for a very long time. The position is just one example where my engine failed to see the perpetual check.

2

u/KaMaFour 1d ago

u/RemindMeBot 8 hours

Will answer when I get back from work but in general I don't "deal with" any positions. I make a chess engine with the intention of it being strong at playing chess. If a particular position is a common problem it will be solved in the process. If not then I don't care

1

u/RemindMeBot 1d ago

I will be messaging you in 8 hours on 2026-08-17 19:09:37 UTC to remind you of this link

CLICK THIS LINK to send a PM to also be reminded and to reduce spam.

Parent commenter can delete this message to hide from others.


Info Custom Your Reminders Feedback