This project was done as a final assessment for a unit (Topics in Information Science II: Efficient Search Methods in Artificial Intelligence) I took on exchange at The University of Tokyo.
It uses techniques such as stochastic hill climbing (local search) to solve the combinatorial latin square problem efficiently.
latin_square_v2.py scales significantly better than latin_square_v1.py.