Сколько существует параметров - например, сколько измерений в пространстве поиска?Являются ли они непрерывными или дискретными - например, действительными числами или целыми числами, или только несколькими возможными значениями?
Подходы, которые я видел для решения подобных проблем, имеют схожую общую структуру - занимают большое количествовыборочные точки и приспособьте их все к областям, которые имеют "хорошие" ответы так или иначе.Поскольку у вас много точек, их относительные различия служат временным градиентом.
- Имитация отжига : классический подход.Возьмите несколько точек, вероятностно переместите некоторые в соседнюю точку, выбранную случайным образом, в зависимости от того, насколько она лучше.
- Оптимизация роя частиц : Возьмите «рой» частиц со скоростямив пространстве поиска вероятностно случайным образом перемещают частицу;если это улучшение, дайте знать всему рое.
- Генетические алгоритмы : Это немного другое.Вместо того, чтобы использовать информацию о соседях, как описано выше, вы каждый раз берете лучшие результаты и «скрещиваете» их, надеясь получить лучшие характеристики каждого.
Ссылки на Википедию имеют псевдокод для первых двух;Методы GA настолько разнообразны, что сложно перечислить только один алгоритм, но вы можете переходить по ссылкам оттуда.Обратите внимание, что существуют реализации для всего вышеперечисленного, которые вы можете использовать или использовать в качестве отправной точки.
Обратите внимание, что все они - и в действительности любой подход к этому алгоритму поиска в больших объемах - являются эвристическими.Это означает, что у них есть параметры, которые должны быть настроены на вашу конкретную проблему.Который может быть утомительным.
Кстати, тот факт, что оценка функции стоит так дорого, может заставить вас немного работать;поскольку все вышеперечисленные методы включают в себя множество независимых вычислений функций, этот фрагмент алгоритма можно тривиально распараллелить с OpenMP или чем-то подобным, чтобы использовать столько ядер, сколько у вас есть на вашем компьютере.