java - 将两个不同长度的个体交叉

标签 java artificial-intelligence genetic-algorithm evolutionary-algorithm

我需要对两个长度不同的个体进行交叉。

个体可能是这样的,但也可能更长:

0 1 2 2 1 2 0 [0] 1 2 1 2 0 1 2 [0] 1 2 1 2 0 2 1 [1]

1 2 1 1 0 2 0 [0] 1 2 1 2 0 0 1 [1]

但是,交叉后我需要保持它们的原始长度。我还需要确保每第 8 位(方括号中)不能是 2。每个个体的长度始终是 8 的倍数。

如何在不改变任何一个个体的长度和结构的情况下对这些个体进行交叉?

我一直无法找到解决方案,因此我们将不胜感激。

最佳答案

我假设您正在谈论 single-point crossover 。你可以这样做:

  1. 选择一个介于 1 和较短个体长度之间的随机数。这将是您的交叉点。
  2. 此时切割两个个体。
  3. 按照常规交叉方式交换它们。

示例:

0 1 2 2 1 2 0 [0] 1 2 1 2 0 1 2 [0] 1 2 1 2 0 2 1 [1]
1 2 1 1 0 2 0 [0] 1 2 1 2 0 0 1 [1]

较短的个体的长度为16,因此我们生成一个 1 到 16 之间的随机数 --> 例如,9

交叉点:

                   |
0 1 2 2 1 2 0 [0] 1|2 1 2 0 1 2 [0] 1 2 1 2 0 2 1 [1]
1 2 1 1 0 2 0 [0] 1|2 1 2 0 0 1 [1]
                   |

交换点后的子部分:

                   |
0 1 2 2 1 2 0 [0] 1|2 1 2 0 0 1 [1]
1 2 1 1 0 2 0 [0] 1|2 1 2 0 1 2 [0] 1 2 1 2 0 2 1 [1]
                   |

这保留了两个个体的长度,并保留了括号内无 2 的规则。

关于java - 将两个不同长度的个体交叉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53351358/

相关文章:

artificial-intelligence - 神经网络中的连续输出

genetic-algorithm - 遗传算法中的(非)均匀突变是什么意思?

c# - 创建我的第一个算法

java - 实例化 RemoteWebDriver 时出错

尝试使用 POJO 记录更新表时出现 Java jOOQ 问题

java - richfaces 过滤日期列

java - Android - 向图像添加 View 不会更新 - onClick

python - 神经网络异或门不学习

language-agnostic - 如何表示遗传算法的路径?

c++ - 检测两幅图像之间的差异