evox.algorithms.so.de_variants.ode

模块内容

ODE

反对基差差分进化 (ODE) 算法用于优化。

API

class evox.algorithms.so.de_variants.ode.ODE(pop_size: int, lb: torch.Tensor, ub: torch.Tensor, base_vector: Literal[best, rand] = 'rand', num_difference_vectors: int = 1, differential_weight: float | torch.Tensor = 0.5, cross_probability: float = 0.9, mean: torch.Tensor | None = None, stdev: torch.Tensor | None = None, device: torch.device | None = None)[源代码]

基础: evox.core.Algorithm

反对基差差分进化 (ODE) 算法用于优化。

Class Methods

  • __init__:使用给定的参数初始化 ODE 算法,包括种群大小、边界、变异策略和其他超参数。

  • init_step: 执行种群适应度的初始评估,并进入第一次优化步骤。

  • step: 执行ODE算法的单个优化步骤,包括变异、交叉、选择和基于对抗的机制。

请注意,evaluate 方法在这个类中未定义。它预计由 Problem 类或其他外部组件提供。

初始化

使用给定的参数初始化基于对抗的差分进化(ODE)算法。

参数:
  • pop_size -- 种群大小。

  • lb -- 粒子位置的下界。必须是一个一维张量。

  • ub -- 粒子位置的上界。必须是一个一维张量。

  • base_vector -- 用于变异的基础向量类型。可以是 "best" 或 "rand"。默认值为 "rand"。

  • num_difference_vectors -- 在变异中使用的差异向量的数量。必须至少为 1 且小于种群大小的一半。默认为 1。

  • differential_weight -- 应用于差异向量的差异权重 (F)。可以是一个浮点数或形状为 [num_difference_vectors] 的张量。默认值为 0.5。

  • cross_probability -- 交叉概率(CR)。必须在(0,1]之间。默认值为0.9。

  • mean -- 用于通过正态分布初始化种群的均值。如果使用,则必须提供标准差(stdev)。默认为 None。

  • stdev -- 用于通过正态分布初始化种群的标准差。若使用,则必须提供均值。默认为 None。

  • device -- 用于张量计算的设备。默认为 None。

init_step()[源代码]

执行种群适应度的初步评估,并进入第一个优化步骤。

此方法评估初始种群的适应度,然后调用 step 方法进行第一次优化迭代。

step()[源代码]

执行 ODE 算法的单次优化步骤。

这涉及以下子步骤:

  1. Mutation: 生成基准向量策略 (bestrand) 和差异向量数量的基础上,根据这些信息生成变异向量

  2. 交叉:根据交叉概率,在当前种群和变异向量之间执行交叉。

  3. 选择:评估新种群的适应度,并在当前种群和新种群之间选择更优的个体。

  4. 对立机制:生成对立种群,评估它们的适应度,并进行选择,以便在它们更好的情况下,潜在地用它们的对立个体替换当前个体。

这个方法确保新种群向量都会被截断在指定范围内。