add simulated annealing implementation, not tested