协方差矩阵自适应进化策略¶
协方差矩阵自适应进化策略 (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. 完全去随机化的进化策略中的自适应。进化计算