fminLBFGSB
语法
fminLBFGSB(func, X0, [fprime], [bounds], [m=10],
[factr=1e7], [pgtol=1e-5], [epsilon=1e-8], [maxIter=15000], [maxFun=15000],
[maxLS=20])
详情
使用 L-BFGS-B 算法找到目标函数的最小值。
参数
func 函数名,表示需要最小化的目标函数。注意:该函数的返回值须是数值标量类型。
X0 数值类型的标量或向量,表示使目标函数最小化的参数的初始猜测。
fprime 可选参数,函数名,表示计算 func 梯度的函数。如果为空,则使用数值微分方法来获取函数梯度。
bounds 可选参数,数值类型矩阵,形状为(N,2),其中 N 为需要优化的参数数量,即 N=size(X0)。每一行的两个值(min, max),定义了
X0 中对应参数的边界。可以用 float("inf")
来表示不设边界。
m 可选参数,正整数标量,表示有限内存矩阵的最大可变度量修正数。默认值为 10。
factr 可选参数,数值标量,正数,用于衡量迭代是否结束的指标值。当满足条件时,算法将停止迭代,其中 eps 是机器精度。factr 的典型值有:1e12 代表低精度;1e7 代表中等精度;10.0 代表极高的精度。默认值为 1e7。
pgtol 可选参数,数值标量,正数,用于衡量迭代是否结束的指标值。当满足条件时,算法将停止迭代,其中是投影梯度的第 i 个分量。默认值为 1e-5。
epsilon 可选参数,数值标量,正数,表示当使用数值近似方法来求解函数梯度时使用的步长。默认值为 1e-8。
maxIter 可选参数,非负整数标量,表示执行的最大迭代次数,默认值为 15000。
maxFun 可选参数,非负整数标量,表示最大目标函数调用次数,默认值为 15000。
maxLS 可选参数,非负整数标量,表示每轮迭代的最大线搜索步数,默认值为 20。
返回值
返回一个字典,字典有以下成员:
-
xopt:浮点数向量,使目标函数最小化的参数值。
-
fopt:浮点数标量,目标函数最小值。fopt=func(xopt)。
-
gopt:浮点数向量,目标函数最小值点处的函数梯度。gopt=func'(xopt)。
-
iterations:整数标量,优化过程中执行的总迭代数。
-
fcalls:整数标量,优化过程中的目标函数调用次数。
-
warnFlag:整数标量,有三个可能值:
-
0:表示成功执行算法全过程。
-
1:表示已达最大目标函数调用次数或已达最大迭代次数,算法停止执行。
-
2:表示由于其他原因算法停止执行。
-
例子
本例自定义约束条件,传入参数 func, X0,使用 L-BFGS-B 算法找到目标函数 fun
的最小值。
X = double(0..9)
M = 2
B = 3
Y = double(M * X + B)
def fun(params, x, y) {
m = params[0]
b = params[1]
y_model = m*x + b
error = sum(square(y - y_model))
return error
}
initial_values = [0.0, 1.0]
fminLBFGSB(fun{,X,Y}, initial_values)
/* Ouput:
fcalls->27
warnFlag->0
xopt->[1.999999985435,3.000000060585]
gopt->[8.05E-10,8.84E-10]
fopt->0E-12
iterations->6
*/
相关函数:fminBFGS