I implemented an AI playing checkers (also known as draughts) using the popular Monte Carlo Tree Search.
I was inspired by this resource http://www.bailopan.net/checkers/ that does the same.
Unfortunately my implementation and that implementation have an issue: While the AIs play very well during early and middle stages of the game they do not handle end-game too well: i found they end up just moving the last pieces around and not trying to win.
I implemented the simulation step making random moves for both players for N turns in the future (ie: it does not simulate the game until the end but for a significant number of turns).
I gave to the AI a large amount of time for its considerations just to be sure that computational time was not the bottleneck.
I'm considering to tweak the simulation step with some domain-based heuristic but i don't know how to develop the evaluate function, if needed.
Under this circumstances, how do you think I can improve my AI to have a better late game?