当使用GA获得最小的一个变量函数时,交叉的正确方法是什么,例如sin(x)^ 2

时间:2015-12-15 05:15:56

标签: optimization mathematical-optimization genetic-algorithm crossover

我将区间[x:y]编码为二进制代码,如 10101111 ,因此对于填充,它就像[[1,0,1,1],[0,1,0,1]]

我使用函数(sin(x)^2)的值直接定义了适应度函数。

为了选择,我正在使用锦标赛选择和交叉,只有这样的染色体的简单交换部分:1(10)00(01)1 - > 1(01)00(10)1

对于变异,使用比特反转。

算法类型有效,它有时可以生成全局最小值,有时可以生成局部最小值。但是我没有在这个问题上看到交叉的功能,因为' x'每次都被打破(我认为),我不知道为什么,如果它甚至是编码交叉或编码部分的正确方法。

1 个答案:

答案 0 :(得分:2)

我担心交叉没有“正确的方法”。

有许多交叉算子(例如Comparison of a Crossover Operator in Binary-coded Genetic Algorithms - STJEPAN PICEK,MARIN GOLUB)可以用于二进制编码遗传算法,但是:

  • 取决于问题的属性,一个或另一个交叉运算符将有更好的结果。
  • 每个交叉算子都有其优点和缺点,所以选择一个最终代表某人的要求和实验的问题 经历。
  • 在许多情况下,均匀和两点交叉都是不错的选择。

交叉是遗传算法的主要探索机制,但GA背后的驱动力是选择,交叉和突变之间的合作(突变阻止了群体的收敛并引入了变异)。

通常只有突变的方法没有足够的探索力来达到最小值,成功主要是由于初始人群中解决方案的分布。

对于连续功能优化,您还应该检查differential evolution