我正在努力用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库,但无法进行凝聚力的尝试。我发现their documentation不够直观。我也研究了cma包,但是我不清楚如何实现约束。
最佳答案
在python cma
包中,您可以指定绑定(bind)约束:
import cma
opts = cma.CMAOptions()
opts.set("bounds", [[-2, None], [2, None]])
cma.fmin(cost_function, x_start, sigma_start, opts)
如前所述,对于第二个约束,它并不简单,但是您确实可以为域外候选解决方案分配高适用性值。您只需要在这里调整
cost_function
。这些值可能非常高(高于可行域中的任何函数值),或者取决于约束违反值。有several methods可以处理带有约束的约束。在您的情况下(小尺寸),您可以尝试最简单的一种。
关于python - Python CMA-ES算法可解决用户定义的功能和约束,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37302917/