У меня проблема с результатами цикла в функции цикла. Он подсчитывает внутренний цикл только один раз и выбирает наилучшее решение для первого raw, а затем останавливается.Петля внутри другого цикла в R
Я хотел бы запомнить лучшее решение для каждой строки матрицы zmienne
. Что я делаю не так?
schaffer <- function(xx)
{x1 <- xx[1]
x2 <- xx[2]
fact1 <- (sin(x1^2-x2^2))^2 - 0.5
fact2 <- (1 + 0.001*(x1^2+x2^2))^2
y <- 0.5 + fact1/fact2
return(y)
}
gradient_descent <- function(func, step, niter) {
N <- 3 #N- number of random points
zmienne <- matrix(runif(N*2, min = -100, max = 100), N, 2)
print(zmienne)
h = 0.001;
iter_count = 0;
for (i in 1:N) {
x_0 <- zmienne[i,]
x_n = x_0;
for (j in 1:niter) {
func_grad = (func(x_n+h) - func(x_n))/h;
if (abs(func_grad) < 0.0001) { break; }
x_n = x_n - step * func_grad;
print(x_n)
iter_count = iter_count + 1
}
}
return(list(iterations = niter, best_value = func_grad, best_state = x_n, x0=x_0))
}
solution_m1 <- gradient_descent(schaffer, 0.1, 20)
solution_m1
Можете ли вы предоставить свои данные (или подмножество) се мы можем проверить выход? – Molx
Рассмотрите возможность выделения 'итераций',' best_value', 'best_state' и' x0' с 'NA' вне первого цикла и добавьте лучший результат в эти переменные для каждой строки. Затем верните за пределы внешнего цикла список из 'итераций',' best_value', 'best_state' и' x0'. – ConfusedMan
Можете ли вы объяснить мне изменения, добавив свои советы в код? должен ли я добавить возврат после закрытия внутреннего цикла, а затем после закрытия основного цикла? – user3463225