fmin

语法

fmin(f, X0, [fargs], [xtol=0.0001], [ftol=0.0001], [maxIter], [maxFun])

详情

使用 Nelder-Mead 单纯形算法找到目标函数的最小值。这个算法仅使用函数值,不使用一阶导数或二阶导数。返回一个字典,包含以下 key:

  • xopt:使目标函数最小化的参数值;

  • fopt:目标函数最小值,即 fopt=f(xopt);

  • iterations:优化过程中执行的总迭代数;

  • fcalls:优化过程中的目标函数调用次数;

  • warnFlag:

    • 0:表示成功执行算法全过程;

    • 1:表示已达最大目标函数调用次数,算法停止执行;

    • 2:表示已达最大迭代次数,算法停止执行。

参数

f 函数名,表示需要最小化的目标函数。

X0 数值类型,可以是标量、向量,表示使目标函数最小化的参数的初始猜测。

fargs 可选参数,元组,表示传递给函数 f 的其他参数,即函数调用为 f(X, fargs…)。

xtol 可选参数,一个浮点数,表示在迭代过程中,算法收敛时允许的 xopt 值之间的绝对误差。默认值为0.0001。

ftol 可选参数,一个浮点数,表示在迭代过程中,算法收敛时允许的函数值(f(xopt) )之间的绝对误差。默认值为0.0001。

maxIter 可选参数,一个非负整数,表示算法的最大迭代次数。如果未指定,它将被设置为 X0 中元素数量乘以 200。

maxFun 可选参数,一个非负整数,表示目标函数的最大调用次数。如果未指定,它将被设置为 X0 中元素数量乘以 200。

例子

def f(x) {return x*x}
fmin(f, 1)

/* ouput:

xopt->[-8.881784197001252E-16]
fopt->7.888609052210119E-31
iterations->17
fcalls->34
warnFlag->0

*/

def targetFunc(x,y,z){
	return x*x+2*x*y+5*y+z
}

fmin(targetFunc,5,(11,4))


/* output:
fcalls->46
warnFlag->0
xopt->[-11.0000]
fopt->-62.0000
iterations->23
*/