梯度和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.])