梯度和Hessians工具#
- pygmo.estimate_sparsity(callable, x, dx=1e-8)#
通过对输入点x进行数值计算并检测发生变化的组件,对相同可调用对象的稀疏模式进行数值估计。
可调用对象必须接受一个可迭代对象作为输入,并返回一个类似数组的对象
请注意,estimate_sparsity 可能无法检测到真实的稀疏性,因为它只考虑了输入点周围的一个变化。不过,在无法编写稀疏性或用户确信估计值正确的情况下,它在测试或案例中是有用的。
- Parameters
callable (一个可调用对象) – 我们想要估计稀疏性的函数(通常是一个适应度函数)。
x (数组类对象) – 用于测试稀疏性的决策向量。
dx (
float) – 为了检测稀疏性,x 的每个分量将被改变为 \(\max(|x_i|,1) dx\)。
- Raises
未指定 – 当在x上调用可调用对象时抛出的任何异常。
TypeError – 如果 x 无法转换为浮点数向量或 callable 不可调用。
- Returns
在x附近检测到的callable的稀疏模式
- Return type
2D NumPy 浮点数数组
示例
>>> import pygmo as pg >>> def my_fun(x): ... return [x[0]+x[3], x[2], x[1]] >>> pg.estimate_sparsity(callable = my_fun, x = [0.1,0.1,0.1,0.1], dx = 1e-8) array([[0, 0], [0, 3], [1, 2], [2, 1]], dtype=uint64)
- pygmo.estimate_gradient(callable, x, dx=1e-8)#
通过对输入点x进行数值计算并检测发生变化的组件,对相同可调用对象的稀疏模式进行数值估计。
可调用对象必须接受一个可迭代对象作为输入,并返回一个类似数组的对象。返回的梯度将是密集的,并且包含由
gradient()请求的字典顺序中的\(\frac{df_i}{dx_j}\)。每个导数的数值近似是通过中心差分法进行的,根据公式:
\[\frac{df}{dx} \approx \frac{f(x+dx) - f(x-dx)}{2dx} + O(dx^2)\]因此,调用callable的总成本将是\(n\),其中\(n\)是x的大小。
- Parameters
callable (一个可调用对象) – 我们想要估计稀疏性的函数(通常是一个适应度函数)。
x (数组类对象) – 用于测试稀疏性的决策向量。
dx (
float) – 为了检测稀疏性,x 的每个分量将被改变为 \(\max(|x_i|,1) dx\)。
- Raises
未指定 – 当在x上调用可调用对象时抛出的任何异常。
TypeError – 如果 x 无法转换为浮点数向量或 callable 不可调用。
- Returns
在x附近检测到的可调用密集梯度
- Return type
2D NumPy 浮点数数组
示例
>>> import pygmo as pg >>> def my_fun(x): ... return [x[0]+x[3], x[2], x[1]] >>> pg.estimate_gradient(callable = my_fun, x = [0]*4, dx = 1e-8) array([1., 0., 0., 1., 0., 0., 1., 0., 0., 1., 0., 0.])
- pygmo.estimate_gradient_h(callable, x, dx=1e-8)#
通过对输入点x进行数值计算并检测发生变化的组件,对相同可调用对象的稀疏模式进行数值估计。
可调用对象必须接受一个可迭代对象作为输入,并返回一个类似数组的对象。返回的梯度将是密集的,并且包含由
gradient()请求的字典顺序中的\(\frac{df_i}{dx_j}\)。每个导数的数值近似是通过中心差分进行的,根据公式:
\[\frac{df}{dx} \approx \frac 32 m_1 - \frac 35 m_2 +\frac 1{10} m_3 + O(dx^6)\]其中:
\[m_i = \frac{f(x + i dx) - f(x-i dx)}{2i dx}\]总体成本,以调用callable的次数计算,因此为6:math:n,其中\(n\)是x的大小。
- Parameters
callable (一个可调用对象) – 我们想要估计稀疏性的函数(通常是一个适应度函数)。
x (数组类对象) – 用于测试稀疏性的决策向量。
dx (
float) – 为了检测稀疏性,x 的每个分量将被改变为 \(\max(|x_i|,1) dx\)。
- Raises
未指定 – 当在x上调用可调用对象时抛出的任何异常。
TypeError – 如果 x 无法转换为浮点数向量或 callable 不可调用。
- Returns
在x附近检测到的可调用密集梯度
- Return type
2D NumPy 浮点数数组
示例
>>> import pygmo as pg >>> def my_fun(x): ... return [x[0]+x[3], x[2], x[1]] >>> pg.estimate_gradient_h(callable = my_fun, x = [0]*4, dx = 1e-2) array([1., 0., 0., 1., 0., 0., 1., 0., 0., 1., 0., 0.])