遗传算法中的交叉

遗传算法的"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)。

  1. 随机混合量的选择:代码通过rand函数生成一个随机数a,这个随机数范围在[0,1]之间。这个随机数将决定如何混合两个父代来生成子代。

  2. 子代的生成:

    1. C1:子代C1的生成通过以下公式实现:C1 = P1 * a + P2 * (1 - a)。这表示C1是P1和P2的加权平均,其中权重由a和(1-a)决定。
    2. C2:子代C2的生成类似于C1,但是权重相反:C2 = P1 * (1 - a) + P2 * a。这表示C2是P1和P2的加权平均,但是权重相反。

通过这种方法,算术交叉操作将两个父代的信息进行混合,并生成两个子代。这有助于增加多样性,引入新的解决方案,以及加速遗传算法的进化过程。在遗传算法的迭代过程中,这个操作会被应用于一组父代中,以生成一组子代,然后子代将与其他操作(如选择、变异等)结合在一起,以产生下一代的父代。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值