在两个二维数组之间执行交叉 (JAVA)
Perform Crossover between two 2D arrays (JAVA)
我正在尝试制作一种遗传算法来优化座位问题,在这个问题中,人们对自己想坐在谁旁边有偏好。我遇到的问题是交叉阶段。我有两个人口成员,我想繁殖并生产一个 child 成员。通常,一个人会从一个 parent 中获取一个 'gene',并从另一个中获取一个不同的基因。问题是在 table.
座位的情况下的安置问题
这是一个随机生成的例子:
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
我想生成一个 child,它既具有 parent 的特征,又没有重复的 objects(PXX 不应在 child 中出现两次).
i : 代表 Table 号。这里有 3 tables
j :表示座位号。这里有5个座位
共15人
有什么好的方法吗?如果我的解释令人困惑,请见谅。
注意我不能使用任何遗传算法库。
对于这类问题,解决方案通常是"repair" child。您需要一个修复函数,它将采用不可行的 child(一个有重复项)并使其可行(删除重复项并用缺失值替换它们)。
对于您的特定情况,解决此问题的另一种方法是从 parents 中取出所有 non-overlapping table 并将它们放入 child,并用其余人填充 child 中缺失的 table(例如,在您的示例中,从母亲那里取 table 1,从父亲那里取 table 2——他们有没有共同点——将其余人放在 table 0).
我正在尝试制作一种遗传算法来优化座位问题,在这个问题中,人们对自己想坐在谁旁边有偏好。我遇到的问题是交叉阶段。我有两个人口成员,我想繁殖并生产一个 child 成员。通常,一个人会从一个 parent 中获取一个 'gene',并从另一个中获取一个不同的基因。问题是在 table.
座位的情况下的安置问题这是一个随机生成的例子:
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
我想生成一个 child,它既具有 parent 的特征,又没有重复的 objects(PXX 不应在 child 中出现两次).
i : 代表 Table 号。这里有 3 tables j :表示座位号。这里有5个座位 共15人
有什么好的方法吗?如果我的解释令人困惑,请见谅。 注意我不能使用任何遗传算法库。
对于这类问题,解决方案通常是"repair" child。您需要一个修复函数,它将采用不可行的 child(一个有重复项)并使其可行(删除重复项并用缺失值替换它们)。
对于您的特定情况,解决此问题的另一种方法是从 parents 中取出所有 non-overlapping table 并将它们放入 child,并用其余人填充 child 中缺失的 table(例如,在您的示例中,从母亲那里取 table 1,从父亲那里取 table 2——他们有没有共同点——将其余人放在 table 0).