This was a project for my Combinatorial Optimization course.
I did a very simple implementation. The time I had to perform the project was not enough to play a bit with different operators and different strategies. The implementation is mostly procedural, just implemented a Weighted Graph data structure that would be useful.
( Multiple runs should be executed in order to obtain the best solution. There is no guarantee that the algorithm will return the global optimum, and may fall into a local optimum. My stopping criterion was the number of iterations. If considered differences between consecutive solutions it might converge too early and fall more easy into a local solution)
Besides the code, I also provide the project report in Portuguese, a notebook with the implementation and an R script using the library(TSP)
which I used to check how bad/good my implementation was.