【遗传算法】模拟二进制交叉SBX与多项式变异

本文详细介绍了模拟二进制交叉(SBX)及其在遗传算法中的应用,并给出了MATLAB实现代码。同时,还深入探讨了多项式变异的原理及其实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0 前言

Gitee 代码地址: https://gitee.com/futurelqh/GA

模拟二进制交叉:Simulated binary crossover

Introduction

  • SBX 是模拟二进制编码的遗传算法中的单点交叉 ,对于后者简单示意图如下图所示:

在这里插入图片描述

交叉前后解码实数值的平均相等

p 1 + p 2 2 = c 1 + c 2 2 \frac {p_1 + p_2} {2} = \frac {c_1 + c_2} {2} 2p1+p2=2c1+c2

在这里插入图片描述
交叉前后解码实数值差的商 ≈ 1

  • 思想即为子代会离其父代较近(传播因子 β 定义为子女与父母之间距离的比值)
  • Spread Factor 分布系数

β = ∣ c 1 + c 2 p 1 + p 2 ∣ β = \lvert \frac {c_1 + c_2} {p_1 + p_2} \lvert β=p1+p2c1+c2

Spread Factor 的分布 (β)

基于此,考虑一个长度为15 的二进制编码的个体,之间随机挑选所有可能的分割位点进行单点变异后的子代和父代计算的 β 数值,从而观察 β 的分布

Computer for Matlab

根据:

p 1 + p 2 = c 1 + c 2 ( 1 ) p_1 + p_2 = c_1 + c_2 \quad(1) p1+p2=c1+c2(1)
β = ∣ c 1 + c 2 p 1 + p 2 ∣ ( 2 ) β = \lvert \frac {c_1 + c_2} {p_1 + p_2} \lvert \quad (2) β=p1+p2c1+c2(2)
反解出子代:

c 1 = 1 / 2 ∗ ( p 1 + p 2 ) − 1 / 2 ∗ β ∗ ( p 2 − p 1 ) c_1 = 1/2*(p_1 + p_2) - 1/2*β*(p_2 - p_1) c1=1/2(p1+p2)1/2β(p2p1)
c 2 = 1 / 2 ∗ ( p 1 + p 2 ) + 1 / 2 ∗ β ∗ ( p 2 − p 1 ) c_2 = 1/2*(p_1 + p_2) + 1/2*β*(p_2 - p_1) c2=1/2(p1+p2)+1/2β(p2p1)

通过概率密度函数拟合β

更大的分布指标 n 意味着子代和父代更接近

通过概率密度求出分布函数

conclusion

SBX 在实数编码中的运用

SBX MATLAB 代码实现

% Simulated binary crossover
beta = zeros(N, D);
mu   = rand(N , D);

beta(mu<=0.5) = (2*mu(mu<=0.5)).^(1/(disC+1));
beta(mu>0.5)  = (2-2*mu(mu>0.5)).^(-1/(disC+1));
beta = beta.*(-1).^randi([0, 1], N, D);
beta(repmat(rand(N, 1)>proC, 1, D)) = 1;

Offspring = [(Parent1+Parent2)/2 + beta.*(Parent1-Parent2)/2
             (Parent1+Parent2)/2 - beta.*(Parent1-Parent2)/2];

多项式变异

(2-11)式中 v k v_k vk 表示上一代的种群, v k ′ v_{k^{'}} vk 表示多项式变异后新产生的种群, u k u_k uk 表示 upper :变量的上界, l k l_k lk 表示 lower :变量的下界。 ( u k − l k ) : Δ m a x (u_k - l_k):\Delta_{max} (uklk)Δmax

  • 在Deb K , Goyal M . A Combined Genetic Adaptive Search (GeneAS) for Engineering Design[C]// 1996.原文中,其是这样描述的
%% Polynomial mutation
% 定义变异的边界
MinValue = repmat(lower, N, D);
MaxValue = repmat(upper, N, D);

k    = rand(N,D); % 随机选定要变异的基因位
mu   = rand(N,D); % 采用多项式变异,此为式中的 u

Temp = k<=ProM & mu<0.5;   % 要变异的基因位,ProM:变异概率
Offspring(Temp) = Offspring(Temp)+(MaxValue(Temp)-MinValue(Temp))...
    .*((2.*mu(Temp)+(1-2.*mu(Temp)).*(1-(Offspring(Temp)-MinValue(Temp))./(MaxValue(Temp)-MinValue(Temp))).^(DisM+1)).^(1/(DisM+1))-1);

Temp = k<=ProM & mu>=0.5;
Offspring(Temp) = Offspring(Temp)+(MaxValue(Temp)-MinValue(Temp))...
    .*(1-(2.*(1-mu(Temp))+2.*(mu(Temp)-0.5).*(1-(MaxValue(Temp)-Offspring(Temp))./(MaxValue(Temp)-MinValue(Temp))).^(DisM+1)).^(1/(DisM+1)));

% 越界处理 
Offspring(Offspring>MaxValue) = MaxValue(Offspring>MaxValue); % 子代越上界处理
Offspring(Offspring<MinValue) = MinValue(Offspring<MinValue); % 子代越下界处理

Reference

[1] CSDN 字体编辑实例

[2] MarkDown 公式指导手册

[3] SBX(Simulated binary crossover)模拟二进制交叉算子和DE(differential evolution)差分进化算子 强推☆☆☆ 感谢作者的分享,受益匪浅,附原文在此

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值