我正在尝试制作一种遗传算法来优化座位问题,在这种情况下,人们会偏好他们想要坐在旁边的人。我遇到的问题是交叉阶段。我有两个人口成员,我想繁殖并生产一个儿童成员。通常,人们会从一个父母那里获取一个“基因”,而从另一个父母那里获取不同的基因问题在于放置在桌子上的问题。
这是一个随机生成的例子:
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人。
如果我的解释令人困惑,任何好的方法都可以做到这一点并对不起。 注意我不能使用任何遗传算法库。
答案 0 :(得分:2)
对于这类问题,解决方案通常是“修复”#34;孩子你需要一个修复功能,它将需要一个不可行的孩子(一个有重复的)并使其可行(删除重复项并用缺失值替换它们)。
对于您的特定情况,解决此问题的另一种方法是从父母那里获取所有非重叠的表并将其放入孩子中,并将剩余的人填充孩子的缺失表(例如,在你的例子中,从母亲那里拿表1,从父亲那里拿表2 - 他们没有共同点 - 并把其余的人放在表0中。