Простейшим и наиболее очевидным решением было бы использовать алгоритм Random walk. Он работает, начиная со случайной точки в поисковом пространстве и затем посещая ее случайный сосед.
Аналогичный, но более разумный алгоритм - это Холм, поднимающийся. Опять же, вы начинаете с произвольной точки, но на этот раз вы выбрали лучшего соседа.
Другой, технически эвристический алгоритм: Случайная выборка, что означает только выбор любой точки из поискового пространства и запоминание лучшего из найденных.
Улучшение по сравнению с случайным выборкой - Имитированный отжиг Алгоритм. Это своего рода сплав случайной выборки и восхождения на холм: вы начинаете с выбора случайных точек в пространстве поиска, но по мере того, как время идет, вы, как правило, придерживаетесь более качественных.
В Википедии вы можете найти более подробную информацию и примеры псевдокодов из всего вышеперечисленного.
Целый ряд различных решений - это Генетические алгоритмы. Вы можете начать изучать их, читая http://www.obitko.com/tutorials/genetic-algorithms/index.php. К сожалению, у него нет образцов кода.