Is a simple hill-climbing algorithm really effective for problems like this? I've found that you usually have to add some randomization plus simulated annealing to avoid issues caused by falling into local maximums or always iterating through entries in the same order.