我将区间 [x:y] 编码为像10101111这样的二进制代码,所以对于人口来说,它就像[[1,0,1,1],[0,1,0,1]]
.
我直接使用函数 ( sin(x)^2
) 的值定义了适应度函数。
对于选择,我使用锦标赛选择和交叉,仅像这样简单交换染色体的一部分:1(10)0
and 0(01)1
-> 1(01)0
and 0(10)1
。
对于突变,使用位反转。
这种算法很有效,它有时可以生成全局最小值,有时也可以生成局部最小值。但我在这个问题中没有看到交叉的功能,因为'x'的特性每次都被破坏(我认为),我不知道为什么,如果它是编码交叉的正确方法或者可能是编码部分。