Implement SA algorithm