I check the surrounding of the square where the disc moves to very carefully to see when it gets captured if I can recapture the non-side disc immediately, this static test is not watertight though, there are always exceptions to the rule, but in most cases it prevents me from doing a move that gives away a disc for free and would be a waste of time. Since it is a bit difficult to check due to edge effects I divided the board in several regions, the center and a few rings around it which I treat differently, a move to the edge does not have to be checked at all, I only check whether an edge move threats to capture a non-side disc.Ed Gilbert wrote:I've been trying various changes, but everything tests around 48% against the baseline version that has the qsearch integrated into the main search. Instead of extending all the moves when there is a non-side capture, I tried extending only the ones that actually do lead to a capture position. This makes more sense to me and eliminated some of the explosion of qsearch nodes, but it tested the same as extending all the moves. Of course I might have a bug, but qsearch is pretty simple, and hard to imagine what could be wrong. I'm playing around 2500 games at 0.5sec increment for each test.How do you test that a move triggers a non-losing exchange without actually making the move and reply captures (to test the non-losing)? I don't extend moves that lead to a capture if the static eval is already outside a window of 200 (2 men) from alpha or beta. I'm looking at English checkers now, but I also do something similar in 10x10.The moves that I search in quiescence are captures, promotions and moves that trigger a non losing exchange and maybe I will add moves with the foremost man when it is free to move (like moves with an advanced passed pawn in chess).
-- Ed
Your suggestion to terminate qsearch when the static eval lays far outside the a-b window seems like a good one and is something I'm going to try to keep my qsearch from exploding too much.
Joost