首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >解决用户定义函数和约束的Python ES算法

解决用户定义函数和约束的Python ES算法
EN

Stack Overflow用户
提问于 2016-05-18 14:41:34
回答 2查看 3.1K关注 0票数 7

我很难在python中创建一个CMA-ES优化算法的简单示例。在约束条件下,使用x**2 + 2*y**2 -4*x*y - 0.5*y -ES算法优化函数-2<x<2-1<2*(x**2)*y<1的最简化的方法是什么?

我查看了DEAP库,但未能开发出一致的尝试。我发现他们的文件不那么直观。我还查看了cma包,但我不清楚如何实现约束。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-26 11:32:50

在python cma包中,可以指定绑定约束:

代码语言:javascript
运行
复制
import cma
opts = cma.CMAOptions()
opts.set("bounds", [[-2, None], [2, None]])
cma.fmin(cost_function, x_start, sigma_start, opts)

对于第二个约束,正如前面已经说过的,它并不简单,但是您确实可以为领域外的候选解决方案分配高适应度值。你只需在这里调一下cost_function。这些值可以非常高(高于可行域中的任何函数值),也可以依赖于约束违反值。

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

票数 4
EN

Stack Overflow用户

发布于 2016-09-22 14:48:27

我看到你和DEAP医生的斗争了。尽管如此,我还是写了我自己的进化计算库,最近我用DEAP做了很多概念的证明,我认为他们做得很好。

继续,让我们来看看完整的例子。如果你读了这些文档,你就可以查看代码了。问题的大小是变量的数量,所以在您的情况下,如果我正确理解,您将得到N = 2 (x和y)。

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

toolbox.register("evaluate", myownfunction)

这些约束不是实现的,而是一项简单的任务。在健身函数中,您可以使违反约束的个体无效(例如,通过分配非常高的适应度,如果最小化的话),并且在几代的时间内,您的人口应该没有残疾人。

这将是DEAP中最简单的方法,但是可以扩展班级以覆盖/扩展任何方法,例如,generate方法,以便初始人口中的所有个体都是有效的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37302917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档