【问题标题】:Perform Crossover between two 2D arrays (JAVA)在两个二维数组之间执行交叉(JAVA)
【发布时间】:2018-01-24 17:01:39
【问题描述】:

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

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

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 人。

如果我的解释令人困惑,请提供任何好的方法,很抱歉。 注意我不能使用任何遗传算法库。

【问题讨论】:

    标签: java logic genetic-algorithm


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-04-24
      • 1970-01-01
      • 2021-12-10
      • 2019-03-05
      • 2022-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多