如何在二维数组中进行交叉——遗传算法
How to perform crossover in a 2-dimensional array - genetic algorithm
我有以下两条染色体,它们表示为二维数组。
// First chromosome
[
[ 12 45 23 ]
[ 34 01 89 ]
[ 33 90 82 ]
]
// Second chromosome
[
[00 45 89 ]
[00 00 34 ]
]
对染色体的约束是染色体数组中的每个数组必须保持在一起。例如在第一条染色体中 [ 12 45 23 ]
必须保持在一起。考虑到这一点,我认为与上述染色体结构进行交叉的方法是随机 select 一个水平交叉点。例如:
// First produced off-spring
[
[ 12 45 23 ] // First chromosome
[ 00 00 34 ] // Second chromosome
]
// Second produced off-spring
[
[ 00 45 89 ] // Second chromosome
[ 34 01 89 ] // First chromosome
[ 33 90 82 ] // First chromosome
]
这是对二维染色体阵列进行变异的正确方法吗?哪些行必须保持完整?如果是这样,这个方法有具体的名称吗?或者这会属于 One-point
交叉?
does this method have a specific name? Or would this come under One-point crossover?
在关于可变长度遗传算法的各种论文中,它被称为单点交叉。
对于可变长度的染色体,通常以更通用的方式提出一个点交叉:您可以 select 每个染色体的不同交叉点。例如
C1 = [ A1, A2, A3, A4, A5, A6]
C2 = [ B1, B2, B3, B4]
为C1
选择交叉点1
,为C2
选择交叉点3
,你得到:
C1 = [ A1 | A2, A3, A4, A5, A6]
C2 = [ B1, B2, B3 | B4]
C1' = [A1 B4]
C2' = [B1, B2, B3, A2, A3, A4, A5, A6]
这允许染色体长度开始增长。根据具体问题,它可能是一个要求或只是腹胀(在这两种情况下,您可能需要在适应度函数中考虑到这一点)。
Is this the correct way to perform mutation on a 2D chromosome array which rows must remain intact?
这是一个简单的方法(非常好)。 Uniform crossover 是另一种简单的方法。
Synapsing Variable-Length Crossover: Meaningful Crossover for Variable-Length Genomes(Benjamin Hutt 和 Kevin Warwick,IEEE Transactions on Evolutionary Computation,第 11 卷,第 1 期,2007 年 2 月)描述了其他有趣(更复杂)的可能性。
最佳 交叉非常问题具体。
我有以下两条染色体,它们表示为二维数组。
// First chromosome
[
[ 12 45 23 ]
[ 34 01 89 ]
[ 33 90 82 ]
]
// Second chromosome
[
[00 45 89 ]
[00 00 34 ]
]
对染色体的约束是染色体数组中的每个数组必须保持在一起。例如在第一条染色体中 [ 12 45 23 ]
必须保持在一起。考虑到这一点,我认为与上述染色体结构进行交叉的方法是随机 select 一个水平交叉点。例如:
// First produced off-spring
[
[ 12 45 23 ] // First chromosome
[ 00 00 34 ] // Second chromosome
]
// Second produced off-spring
[
[ 00 45 89 ] // Second chromosome
[ 34 01 89 ] // First chromosome
[ 33 90 82 ] // First chromosome
]
这是对二维染色体阵列进行变异的正确方法吗?哪些行必须保持完整?如果是这样,这个方法有具体的名称吗?或者这会属于 One-point
交叉?
does this method have a specific name? Or would this come under One-point crossover?
在关于可变长度遗传算法的各种论文中,它被称为单点交叉。
对于可变长度的染色体,通常以更通用的方式提出一个点交叉:您可以 select 每个染色体的不同交叉点。例如
C1 = [ A1, A2, A3, A4, A5, A6]
C2 = [ B1, B2, B3, B4]
为C1
选择交叉点1
,为C2
选择交叉点3
,你得到:
C1 = [ A1 | A2, A3, A4, A5, A6]
C2 = [ B1, B2, B3 | B4]
C1' = [A1 B4]
C2' = [B1, B2, B3, A2, A3, A4, A5, A6]
这允许染色体长度开始增长。根据具体问题,它可能是一个要求或只是腹胀(在这两种情况下,您可能需要在适应度函数中考虑到这一点)。
Is this the correct way to perform mutation on a 2D chromosome array which rows must remain intact?
这是一个简单的方法(非常好)。 Uniform crossover 是另一种简单的方法。
Synapsing Variable-Length Crossover: Meaningful Crossover for Variable-Length Genomes(Benjamin Hutt 和 Kevin Warwick,IEEE Transactions on Evolutionary Computation,第 11 卷,第 1 期,2007 年 2 月)描述了其他有趣(更复杂)的可能性。
最佳 交叉非常问题具体。