在两个2D阵列之间执行交叉(JAVA)
我正在尝试做一个遗传算法来优化一个座位问题,在这个问题上,人们有自己想要坐在谁旁边的偏好。我遇到的问题是交叉阶段。我有两个成员的人口,我想繁殖和生产一个儿童成员。通常,一个人会从一个父母身上获取一个“基因”,从另一个父母身上获取一个不同的基因。问题是在餐桌上就座时的位置问题 下面是一个随机生成的示例:在两个2D阵列之间执行交叉(JAVA),java,logic,genetic-algorithm,Java,Logic,Genetic Algorithm,我正在尝试做一个遗传算法来优化一个座位问题,在这个问题上,人们有自己想要坐在谁旁边的偏好。我遇到的问题是交叉阶段。我有两个成员的人口,我想繁殖和生产一个儿童成员。通常,一个人会从一个父母身上获取一个“基因”,从另一个父母身上获取一个不同的基因。问题是在餐桌上就座时的位置问题 下面是一个随机生成的示例: i j Child Value Mother Value Father Value 0 0 P08 P00 0 1
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:表示表格编号。这里有三张桌子
j:代表座位号。这里有5个座位
总共15人
如果我的解释令人困惑,请原谅。
注:我不能使用任何遗传算法库。对于此类问题,解决方案通常是“修复”孩子。您需要一个修复函数,该函数将接受一个不可行的子项(一个具有重复项的子项)并使其可行(删除重复项并用缺少的值替换它们) 对于您的特定情况,解决此问题的另一种方法是从家长处获取所有不重叠的表,并将它们放在子表中,然后用剩余的人填充缺少的子表(例如,在你的例子中,从母亲那里取表1,从父亲那里取表2——它们没有共同点——将其余的人放在表0中)