Checkers is driving me nuts. I thought maybe I should implement a different board game, just for variety. Chess and Othello seemed obvious, backgammon might be fun, but games from the Mancala family also seemed interesting. What's more, you can even buy a cheap Chinese-made Mancala set at Target. Which I did. Apparently Awari has been solved completely, resulting in a complete 48 stone database which acts as an Oracle. I'm not sure that matters to me. Anyway, just thought I'd write this down, so when a year passes and I haven't done anything, I'll be nudged into thinking about it again.
Okay, here's the problem which is driving me crazy. Milhouse gets itself into this position:
Milhouse should play 6-10, and should respond by winning a checker on the next move by forcing the checker that doesn't move into a trade. But for reasons which somewhat escape me, milhouse judges that 6-2, 6-9 and 6-10 are all equivalent at high search levels. At 5 ply deep, it gets the right answer: it judges the 6-10 move as valued at 268, instead of the 223 and 224 that the other two positions generate. But 10 ply, it judges 6-2 and 6-9 as 268, and 6-10 at 270. And at 15 ply, it judges them all as 269. I suspect that in the first moves, it is playing a short series of moves which gets us back to the original position, where it then thinks the forced exchange will play out. But milhouse doesn't gain grown, and just repeats this situation when it searches again.
I do have some code in place which is supposed to deal with repeated positions, and score them as a draw, but perhaps that isn't working properly.