Я склонен согласиться с Робертом. Для меня это звучит как действительно хороший кандидат на метод эволюционной оптимизации, такой как реализация Генетического алгоритма, которую он описывает.
У меня также был очень хороший успех по определенным проблемам с Оптимизацией роя частиц (PSO). По сути, вы можете думать о каждом геноме как о частице в неком многомерном пространстве. Координаты частицы являются параметрами вашего расчета (фитнес-функция). Каждая частица запускается случайным образом со случайной скоростью. Для каждой итерации моделирования вы обновляете положение каждой частицы с помощью ее текущего вектора перемещения, а затем добавляете компоненты других векторов, такие как: направление на лучшую частицу на данный момент, направление на лучшую частицу за всю историю, направление на локальную группу лучший и т.д ...
Поначалу может показаться довольно сложным реализовать GA или PSO, но я уверяю вас, что легко написать небольшую структуру, которая абстрагирует алгоритм (GA / PSO) от фактической проблемной области, которую вы пытаетесь оптимизировать. Вы всегда можете обратиться к Википедии за подробной информацией об алгоритмах.
После того, как у меня есть фреймворк, я обычно начинаю с проблемы с 2 параметрами (возможно, это упрощение вашей проблемы, или расположения X и Y на изображении), так что я могу легко визуализировать и настроить алгоритм, чтобы получить хороший результат. роящееся поведение. Затем я масштабирую его до большего размера.
Мне нравится этот подход, потому что он позволяет мне легко оптимизировать задачи, которые имеют довольно сложные и запутанные детали для фактической постановки задачи (например, автомобили и прицепы).
Кроме того, почему эволюционные методы привлекательны, потому что вы можете посвятить определенную часть времени моделированию и получить наилучший ответ, когда решите остановиться.
По моему опыту, вы тратите столько времени на настройку параметров для GA или PSO (как только у вас есть реализация), чем на написание жестко закодированного эвристического решения, но выгода в том, что вы меняете стратегию поиска решение обычно требует только изменения параметров или замены очень хорошо определенных алгоритмов с другой реализацией, в отличие от кодирования совершенно другой стратегии для решения проблемы эвристически с нуля.
Пожалуйста, напишите мне, если вам нужно руководство по разработке общих структур для любого из двух алгоритмов. Я должен отметить, что вы также получаете несколько хороших бесплатных сторонних фреймворков. Иногда мне нравится кодировать свои собственные, потому что я понимаю каждый аспект алгоритма и знаю, где я могу изменить стратегию.