0

我将区间 [x:y] 编码为像10101111这样的二进制代码,所以对于人口来说,它就像[[1,0,1,1],[0,1,0,1]].

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

对于选择,我使用锦标赛选择和交叉,仅像这样简单交换染色体的一部分:1(10)0and 0(01)1-> 1(01)0and 0(10)1

对于突变,使用位反转。

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

4

1 回答 1

2

恐怕没有“正确的方法”来交叉。

有许多交叉算子(例如,二进制编码遗传算法中的交叉算子比较- STJEPAN PICEK,MARIN GOLUB)可用于二进制编码遗传算法,但是:

  • 根据问题的性质,一个或另一个交叉算子会有更好的结果。
  • 每个交叉运营商都有其优势和劣势,因此选择一个最终代表了某人的要求和经历的实验的问题。
  • 在许多情况下,统一和两点交叉是不错的选择。

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

通常,仅突变方法没有足够的探索强度来达到最低限度,而成功主要是由于解决方案在初始种群中的分布。

对于连续函数优化,您还应该检查差分进化

于 2015-12-15T10:02:27.463 回答