Я пытаюсь написать алгоритм, который позволит мне перебирать все нужные точки в n-мерном пространстве, чтобы найти минимум функции f(x), где x — вектор размера n. .
Очевидно, что поиск в двумерном или трехмерном пространстве довольно прост, вы можете просто сделать:
for(int i = 0; i < x; i++) {
for(int j = 0; j < y; j++) {
//and so on for however many dimensions you want
К сожалению, для моей задачи размерность пространства не фиксирована (я пишу обобщенный поиск минимума). для многих функций в статистической программе), и поэтому мне пришлось бы писать циклы для каждого значения n, которое я хочу использовать, что в конечном итоге может быть довольно большим.
Я пытался придумать, как это сделать с помощью рекурсии, но не нашел решения, хотя уверен, что оно есть.
Решение не обязательно должно быть рекурсивным, но оно должно быть общим и эффективным (самая внутренняя строка в этом вложенном цикле будет вызываться ужасно много...).
Объем для поиска я представляю в виде двумерного массива значений типа double:
double[][] space = new double[2][4];
Это будет представлять четырехмерное пространство с минимальной и максимальной границей в каждом измерении в позиции 0 или 1 массива соответственно. Например:
dim 0 1 2 3
min(0):-10 5 10 -0.5
max(1): 10 55 99 0.2
Есть идеи?