This project went well. The initial steps alone were not as successful as I hoped, but adding in the last step drastically improved win rates for all board sizes. It was easy to add the step to the program, because it was designed to be updated whenever necessary. None of the steps were dependent on the specifics of the other steps, and the control function could easily have a new function added to do another step. The downside is that it wasn’t very optimized, and tended to slow down at times. Speed wasn’t really the goal, so I pushed off a lot of simple speed boosters. Adding in optimizations would also make it harder to change parts or add new parts.
The final success rates on each board size were better than I expected. I ran each difficulty 100 times, and it won 20 expert games, 70 intermediate games, and 88 beginner games. Later tests reinforced these percentages with reasonable accuracy. I still think I could improve the odds, but not without adding another large step.