协方差矩阵自适应进化策略

协方差矩阵自适应进化策略 (CMA-ES) [Hansen2001]cma 模块中实现,利用了生成-更新范式,其中从策略生成种群,并根据种群更新策略。因此,将其用于连续问题优化是直接的。

像往常一样,首先要做的是创建类型,并且像往常一样,我们需要一个最小化的适应度和一个作为 列表 的个体。然后使用所需的评估函数创建一个工具箱。

creator.create("FitnessMin", base.Fitness, weights=(-1.0,))
creator.create("Individual", list, fitness=creator.FitnessMin)

toolbox = base.Toolbox()
toolbox.register("evaluate", benchmarks.rastrigin)

然后,它不会变得更难。一旦 Strategy 被实例化,它的 generate()update() 方法就会在工具箱中注册,以便在 eaGenerateUpdate() 算法中使用。generate() 方法被设置为生成创建的 Individual 类。numpy 的随机数生成器被种子化,因为 cma 模块从它那里获取所有的数字。

def main():
    numpy.random.seed(128)

    strategy = cma.Strategy(centroid=[5.0]*N, sigma=5.0, lambda_=20*N)
    toolbox.register("generate", strategy.generate, creator.Individual)
    toolbox.register("update", strategy.update)

    hof = tools.HallOfFame(1)
    stats = tools.Statistics(lambda ind: ind.fitness.values)
    stats.register("avg", numpy.mean)
    stats.register("std", numpy.std)
    stats.register("min", numpy.min)
    stats.register("max", numpy.max)
    # The CMA-ES algorithm converge with good probability with those settings

[Hansen2001]

Hansen 和 Ostermeier, 2001. 完全去随机化的进化策略中的自适应。进化计算