add simulated annealing (give), needs further optimizations