Я пытаюсь оптимизировать нелинейную функцию с помощью пакета nlopt r. В процессе оптимизации у меня не было ошибок. Но, к сожалению, параметр, который я хотел бы оптимизировать, принимает такое же значение, как и исходное значение. Ниже я привожу код, который я выполнил. Мне нужно оптимизировать только одну переменную - x. Остальные значения переменных мне известны. Было бы очень полезно, если бы кто-нибудь мог сообщить мне, где я ошибаюсь. Любая помощь будет большим подспорьем. Спасибо
#Values
m = c(49097837, 13439992, 10774394)
q = c(34368486, 9407994, 7542076)
p = c(63827188, 17471990, 14006712)
x = c(49097837, 13439992, 10774394) #initializing with value same as m
y = c(4933.40, 2186.75, 1772.09)
z = c(4e-10, 8e-10, 9e-10)
l = c( 0.941, 0.826, 0.750)
n = c(3888896969, 675243453, 419131190)
o = c(822899795, 740956828, 90622037)
r = 73312223
eval_f = function( x, y, z, l, m, n, o,p, q,t) {
sum((y * (z ^ (l ^ (((((x/12)/(m/n))/o))*100)))))
}
# constraint functions
# inequalities
eval_g_ineq = function(x, p, q,y, z, l, m, n, o,t) {
return(rbind(c(x-p),
c(q-x),
c(0-y),
c(0-z),
c(0-l),
c(0-m),
c(0-n),
c(0-o),
c(0-t),
c(0-q),
c(sum(x)-t),
c(0-p)))
}
# Equality constraint
eval_g_eq = function(x, t, p, q,y, z, l, m, n, o) {
return(sum(x) -t)
}
# initial values
x0 = as.numeric(x)
# lower and upper bounds of control
lb = q
ub = p
local_opts = list( "algorithm" = "NLOPT_GN_ISRES",
"xtol_rel" = 1.0e-8 )
opts = list( "algorithm" = "NLOPT_GN_ISRES",
"xtol_rel" = 1.0e-8,
"maxeval" = 10,
"local_opts" = local_opts
)
res = nloptr( x0=x0,
eval_f=eval_f,
lb=q,
ub=p,
eval_g_ineq = eval_g_ineq,
eval_g_eq = eval_g_eq,
opts=opts,
y=y, z=z, l=l, m=m, n=n,
o = o, q=q, p=p, t=t
)