遗传算法中的交叉
交叉是一种遗传运算符,用于从一代到下一代改变一个或多个染色体的编程。交叉是有性生殖。从交配池中随机挑选两条字符串进行交叉,以产生优良的后代。选择的方法取决于编码方法。
不同类型的交叉:
单点交叉 :选择了父有机体字符串上的交叉点。生物体字符串超出该点的所有数据在两个亲代生物体之间交换。字符串的特点是位置偏差。
两点交叉:这是 N 点交叉技术的一个特例。在单个染色体(字符串)上随机选择两个点,并在这些点交换遗传物质。
Uniform Crossover :每个基因(位)是从父染色体的相应基因之一中随机选择的。
使用抛硬币作为示例技术。
两个好的解决方案之间的交叉可能并不总是产生更好或同样好的解决方案。父母好,孩子好的概率就高。如果后代不好(糟糕的解决方案),它将在“选择”期间的下一次迭代中被删除。
交叉问题:
- 根据编码,简单的交叉很可能产生非法后代。
例如,在具有简单二进制或路径编码的 TSP 中,大多数后代将是非法的,因为并非所有城市都会在后代中,而且有些城市会不止一次出现。 - 通常可以修改统一分频器来避免这个问题
例如在带有简单路径编码的 TSP 中:
当掩码为 1 时,从一个父级复制城市
在mask为0的地方,按照另一个父级的顺序选择剩下的城市