7

我正在努力在 python 中创建一个CMA-ES优化算法的简单示例。使用 CMA-ES 算法优化功能x**2 + 2*y**2 -4*x*y - 0.5*y的最简化方法是什么-2<x<2-1<2*(x**2)*y<1

我查看了 DEAP 库,但无法进行有凝聚力的尝试。我发现他们的文档不够直观。我还查看了cma包,但我不清楚如何实现约束。

4

2 回答 2

4

在 pythoncma包中,您可以指定绑定约束:

import cma
opts = cma.CMAOptions()
opts.set("bounds", [[-2, None], [2, None]])
cma.fmin(cost_function, x_start, sigma_start, opts)

对于第二个约束,正如之前所说,它并不简单,但您确实可以为域外候选解决方案分配高适应度值。你只需要在cost_function这里调音。这些值可能非常高(高于可行域中的任何函数值)或取决于约束违反值。

几种方法可以处理带有惩罚的约束。在您的情况下(小尺寸),您可以尝试使用最简单的一种。

于 2019-06-26T11:32:50.510 回答
3

我看到您与 DEAP 文档的斗争。尽管如此,我已经编写了自己的进化计算库,最近我一直在使用 DEAP 进行许多概念验证,我认为他们在这方面做得很好。

继续,让我们看一下完整的示例。如果您阅读文档,您会很舒服地查看代码。问题大小是变量的数量,所以在你的情况下,如果我理解正确,你会有N = 2(x 和 y)。

你需要你的自定义健身功能而不是benchamrks.rastrigin

toolbox.register("evaluate", myownfunction)

约束没有实现,但是很容易。在适应度函数中,您可以使违反约束的个体无效(例如,通过分配非常高的适应度,如果最小化),并且在几代人中您的人口应该没有无效。

这将是使用 DEAP 的最简单方法,但是可以扩展deap.cma.Strategy该类以覆盖/扩展任何方法,例如,该generate方法使初始种群中的所有个体都有效。

于 2016-09-22T14:48:27.660 回答