Generate-and-test
Can be depth-first or breadth-first search
In its most systematic form, it is exhaustive
To reduce search, increase the amount of knowledge in the test/eval function
- E.g. from #wins to forced-win, from forced-win to symmetric-to-forced win
- DFS improved by branch-and-bound
next-state := operator(current-state)
else generate(next-state)