遗传算法的"Arithmetical Crossover"(算术交叉)。
function [C1, C2] = arithXover(P1, P2, ~, ~) %交叉
%% Arith 交叉采用两个父节点 P1、P2 并沿两个父节点形成的线执行插值。
% P1 - the first parent ( [solution string function value] )
% P2 - the second parent ( [solution string function value] )
% bounds - the bounds matrix for the solution space
% Ops - Options matrix for arith crossover [gen #ArithXovers]
%% 选择一个随机的混合量
a = rand;
%% 创建子代
C1 = P1 * a + P2 * (1 - a);
C2 = P1 * (1 - a) + P2 * a;
算术交叉是遗传算法中的一种交叉操作,用于从两个父代(P1和P2)中产生两个子代(C1和C2)。
-
随机混合量的选择:代码通过rand函数生成一个随机数a,这个随机数范围在[0,1]之间。这个随机数将决定如何混合两个父代来生成子代。
-
子代的生成:
- C1:子代C1的生成通过以下公式实现:C1 = P1 * a + P2 * (1 - a)。这表示C1是P1和P2的加权平均,其中权重由a和(1-a)决定。
- C2:子代C2的生成类似于C1,但是权重相反:C2 = P1 * (1 - a) + P2 * a。这表示C2是P1和P2的加权平均,但是权重相反。
通过这种方法,算术交叉操作将两个父代的信息进行混合,并生成两个子代。这有助于增加多样性,引入新的解决方案,以及加速遗传算法的进化过程。在遗传算法的迭代过程中,这个操作会被应用于一组父代中,以生成一组子代,然后子代将与其他操作(如选择、变异等)结合在一起,以产生下一代的父代。