Здравствуйте! Посоветуйте что-нибудь для решения следующей задачи.
Задача такая:
1. Есть два больших массива входных данных (размерность порядка нескольких тысяч)
2. Есть функция/алгоритм, вычисляющая по этим данным, некоторый результат - число. Время одного прогона - 1-2 минуты, т. е. чтобы прогнать оба массива один раз, потребуется минуты 3-4.
3. У этой этого алгоритма есть 6 параметров.
Задача - подобрать эти параметры так, чтобы результаты обработки обоих массивов были достаточно близки (с заданной точностью).
Входные данные и сам алгоритм очень сложны, и, по факту, можно считать черным ящиком, в котором можно менять параметры, и смотреть на результат.
Математически, я бы сформулировал задачу так:
Пусть
- заданные входные данные,
- наш алгоритм, где
- набор параметров, вектор 6-мерного пространства.
Для краткости введем обозначение
.
Тогда вопрос будет звучать следующим образом:
Найти
из заданного промежутка, при котором значение функционала
минимально, либо:
Найти такое
, при котором
, где
- заданная точность.
Единственная возникшая идея у меня - варьировать параметры в некотором диапазоне и сравнивать результаты. Но простым перебором получится очень долго (уйдут часы, а то и дни). То есть, если учесть, что на один просчет уходит 3-4 минуты, а хотелось бы уложиться хотя бы в полчаса, то нужно не более 10 итераций.
Сразу в голову пришел метод половинного деления, но как его обобщить на случай 6-мерного аргумента? Или может есть другие методы?
Заранее благодарю.