我在R软件中使用nlminb()函数进行优化.
函数接受一个可选参数"GRADIATE",该参数与要优化的目标函数具有相同的参数,并在第一个参数处计算目标的梯度.必须返回一个与参数集长度一样长的向量.
我想知道nlminb()函数使用哪种方法来求目标函数的梯度,如果没有将梯度函数赋给自变量?
我使用了nlminb()函数进行优化,但没有给出"GRADIATE"参数.
我在R软件中使用nlminb()函数进行优化.
函数接受一个可选参数"GRADIATE",该参数与要优化的目标函数具有相同的参数,并在第一个参数处计算目标的梯度.必须返回一个与参数集长度一样长的向量.
我想知道nlminb()函数使用哪种方法来求目标函数的梯度,如果没有将梯度函数赋给自变量?
我使用了nlminb()函数进行优化,但没有给出"GRADIATE"参数.
正如我所怀疑的,答案是"有限差分",但这并不容易找到.如果深入挖掘,您会发现Port库中的函数DRMNF(对于无界优化:DRMNFB是用于有界优化的类似函数),以及注释here
SUBROUTINE DRMNF(D, FX, IV, LIV, LV, N, V, X)
C
C *** ITERATION DRIVER FOR DMNF...
C *** MINIMIZE GENERAL UNCONSTRAINED OBJECTIVE FUNCTION USING
C *** FINITE-DIFFERENCE GRADIENTS AND SECANT HESSIAN APPROXIMATIONS.
和here:
C [...] INSTEAD OF CALLING CALCG TO OBTAIN THE
C GRADIENT OF THE OBJECTIVE FUNCTION AT X, DRMNF CALLS DS7GRD,
C WHICH COMPUTES AN APPROXIMATION TO THE GRADIENT BY FINITE
C (FORWARD AND CENTRAL) DIFFERENCES USING THE METHOD OF REF. 1.
裁判1号是斯图尔特,G.W.1967."对Davidon极小化方法的修改,以接受导数的差分近似."美国医学会学报14(1):72-83.https://doi.org/10.1145/321371.321377.