在两个2D阵列(JAVA)之间执行交叉

时间:2018-01-24 17:01:40

标签: java logic genetic-algorithm

我正在尝试制作一种遗传算法来优化座位问题,在这种情况下,人们会偏好他们想要坐在旁边的人。我遇到的问题是交叉阶段。我有两个人口成员,我想繁殖并生产一个儿童成员。通常,人们会从一个父母那里获取一个“基因”,而从另一个父母那里获取不同的基因问题在于放置在桌子上的问题。

这是一个随机生成的例子:

i   j   Child Value  Mother Value    Father Value
0   0                  P08             P00
0   1                  P11             P06
0   2                  P02             P05
0   3                  P12             P09  
0   4                  P07             P04
1   0                  P09             P10  
1   1                  P01             P01
1   2                  P03             P13  
1   3                  P06             P03  
1   4                  P13             P11  
2   0                  P00             P12  
2   1                  P10             P07  
2   2                  P04             P02  
2   3                  P05             P08      
2   4                  P14             P14  

我想生成一个具有父母双方特征但也没有重复对象的孩子(PXX不应该在孩子身上出现两次)。

i:表示表号。这里有3张桌子 j:代表座位号。这里有5个座位 共15人。

如果我的解释令人困惑,任何好的方法都可以做到这一点并对不起。 注意我不能使用任何遗传算法库。

1 个答案:

答案 0 :(得分:2)

对于这类问题,解决方案通常是“修复”#34;孩子你需要一个修复功能,它将需要一个不可行的孩子(一个有重复的)并使其可行(删除重复项并用缺失值替换它们)。

对于您的特定情况,解决此问题的另一种方法是从父母那里获取所有非重叠的表并将其放入孩子中,并将剩余的人填充孩子的缺失表(例如,在你的例子中,从母亲那里拿表1,从父亲那里拿表2 - 他们没有共同点 - 并把其余的人放在表0中。