Я запускаю пакет nloptr
в R
и у меня возникают проблемы с получением промежуточных результатов для алгоритма. Алгоритм работает отлично, но я не хочу просто окончательное решение и номер итерации, но, скорее, я хочу иметь возможность получить текущее значение функции возражения на каждой итерации. Вот код, я используюПолучение промежуточных результатов от nloptr в R
library(tgp)
library(nloptr)
#########################################################################################
###
#########################################################################################
f = function(x){
ans = cos(pi*(x[1]+x[2]*x[3]+x[4]))+.2*sin(4*pi*(x[5]*x[6]+x[7])/(x[8]+1))
return(ans)
}
const = function(x){
ans = numeric(2)
ans[1] = sin(pi*(x[1]+x[2]*x[3]+x[4]))+.2*cos(4*pi*(x[5]*x[6]+x[7])/(x[8]+1))
ans[2] = -cos(pi*(x[1]+x[2]*x[3]+x[4]))+.2*cos(4*pi*(x[5]*x[6]+x[7])/(x[8]+1))
ans[1] = -ans[1]
ans[2] = -ans[2]
return(ans)
}
#########################################################################################
###
#########################################################################################
lhs.size = 1
lhs.lower = 0
lhs.upper = 1
x0 = c(lhs(lhs.size,rbind(c(lhs.lower,lhs.upper),c(lhs.lower,lhs.upper),c(lhs.lower,lhs.upper),c(lhs.lower,lhs.upper),c(lhs.lower,lhs.upper),c(lhs.lower,lhs.upper),c(lhs.lower,lhs.upper),c(lhs.lower,lhs.upper))))
COB = cobyla(x0,f,hin=const,lower=rep(0,8),upper=rep(1,8),nl.info = TRUE, control = list(xtol_rel = 1e-16, maxeval = 2000))
и так, что объект COB
дает мне это:
> COB
$par
[1] 0.4209398 0.4932406 0.5175745 0.7786042 0.2980017 0.6785051 0.2313283 0.3872766
$value
[1] -0.2828427
$iter
[1] 559
$convergence
[1] 4
$message
[1] "NLOPT_XTOL_REACHED: Optimization stopped because xtol_rel or xtol_abs (above) was reached."
Но я хочу $value
$iteration
для каждого.
Когда я побежал, что вы предложили, я получил сообщение об ошибке: > COB = cobyla (x0, е, гин = Const, ниже = Rep (0,8), верхний = Rep (1,8), nl.info = TRUE, control = list (xtol_rel = 1e-16, maxeval = 2000)) Трассировка f1 (x, ...) при выходе Ошибка в cat (returnValue(), x, "\ n"): не удалось найти функцию "returnValue" > – user6291
Я добавил небольшую самостоятельную демонстрацию. Попробуйте скопировать и вставить это в свою сессию. Если это не сработает, возможно, вам нужна более новая версия R. –
Или, может быть, вам нужно начать новую новую сессию. –