0 前言

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

模拟二进制交叉:Simulated binary crossover

Introduction

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

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

p1+p22=c1+c22\frac {p_1 + p_2} {2} = \frac {c_1 + c_2} {2}2p1​+p2​​=2c1​+c2​​


交叉前后解码实数值差的商 ≈ 1

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

β=∣c1+c2p1+p2∣β = \lvert \frac {c_1 + c_2} {p_1 + p_2} \lvertβ=∣p1​+p2​c1​+c2​​∣

Spread Factor 的分布 (β)

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

Computer for Matlab

根据:

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

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

通过概率密度函数拟合β

更大的分布指标 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)式中 vkv_kvk​ 表示上一代的种群,vk′v_{k^{'}}vk′​ 表示多项式变异后新产生的种群, uku_kuk​ 表示 upper :变量的上界, lkl_klk​ 表示 lower :变量的下界。 (uk−lk):Δmax(u_k - l_k):\Delta_{max}(uk​−lk​):Δ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); % 采用多项式变异,此为式中的 uTemp = 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)差分进化算子 强推☆☆☆ 感谢作者的分享,受益匪浅,附原文在此

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

  1. 模拟二进制交叉算子(SBX)与多项式变异(PM)

    二进制交叉算子(SBX) 多项式变异(PM) matlab实现 function chromo_offspring = cross_mutation( chromo_parent,f_num,x_nu ...

  2. nsga 的java实现_Java – Scala遗传算法(GA)库中的模拟二进制交叉(SBX)交叉运算符

    我在一个很小的研究团队工作,在 Scala中创建/改编遗传算法库,用于使用Scientific Worklow System进行分布式计算,在我们的例子中,我们使用开源OpenMole软件( http ...

  3. 遗传算法二进制编码c语言,遗传算法,实数编码的交叉操作之SBX(模拟二进制交叉)...

    本文主要介绍遗传算法(实数编码)的交叉操作中的SBX,模拟二进制交叉. 首先,给出个人用python2.7实现的代码,具体模块已上传到: https://github.com/guojun007/sb ...

  4. SBX(模拟二进制交叉)的代码(python)实现

    本文基于python3实现的SBX(模拟二进制交叉),关于SBX的详细介绍,可以参考这篇文章: 模拟二进制交叉算子详解 代码仅供参考 觉得这篇文章对您有用的话请点个赞呀!谢谢! #!/usr/bin/ ...

  5. 模拟二进制交叉(SBX)

    原文 模拟二进制交叉(SBX,simulated binary crossover),遗传算法采用浮点数编码的时候可以使用.

  6. SBX(Simulated binary crossover)模拟二进制交叉算子和DE(differential evolution)差分进化算子

    一起来学演化计算-SBX(Simulated binary crossover)模拟二进制交叉算子和DE(differential evolution)差分进化算子 觉得有用的话,欢迎一起讨论相互学习 ...

  7. SBX(Simulated binary crossover)模拟二进制交叉算子和DE(differential evolution)差分进化算子...

    一起来学演化计算-SBX(Simulated binary crossover)模拟二进制交叉算子和DE(differential evolution)差分进化算子 觉得有用的话,欢迎一起讨论相互学习 ...

  8. 模拟二进制交叉算子详解

    一起来学演化计算-SBX(Simulated binary crossover)模拟二进制交叉算子详解 觉得有用的话,欢迎一起讨论相互学习~ 参考文献 衷心感谢武汉科技大学张凯教授的精心培育和指导 以 ...

  9. 单点交叉算子的matlab代码,matlab遗传算法中的交叉算子函数应该怎么编写?

    匿名用户 1级 2016-03-08 回答 function [xv,fv]=myGA(fitness,a,b,NP,NG,Pc,Pm,eps) L = ceil(log2((b-a)/eps+1)) ...

最新文章

  1. php 实现对称加密算法,PHP实现简单的对称加密和解密方法
  2. SelectionKey中定义的4种事件
  3. php原生好还是tp好_webapp/H5封装,混开APP,没有原生APP好?事实是这样的吗?
  4. 七、CSS 三大特性(完整详细解析)
  5. 宽字符编码和解码通用类[CodeWidthChartUtility]
  6. Linux强行取消挂载
  7. 【算法】图的基本介绍 以及 存储方式
  8. linux_从windows到ubuntu再到manjaro
  9. 分享美化复选框和单选框插件
  10. freeCAD transform stepamp;amp; stp to stl logging py2exe 打包
  11. phpexcel 导入数据 Invalid cell coordinate
  12. mac电脑运行速度变慢的十种解决方法
  13. js生成web安全色
  14. 你可以穿裙子,但是请放长你的裙摆
  15. hey-cli初使用
  16. 使用主密钥和钱包方法加密数据
  17. 基于php目标奖罚管理系统
  18. 谷歌浏览器升级到91出现跨域问题,导致cookie保存的sessionId不一样
  19. 从前端工程师到前端架构师, 我们经历了什么?
  20. 如何正确地进入基于x86-64Bit Windows系统的商业软件破解领域

热门文章

  1. 区块链运作机制_区块链如何运作? 铂 4
  2. r语言软件GDINA_认知诊断分析系统(flexCDMs)设计及其实现
  3. PNG alpha transparency: AlphaImageLoader filter flaws
  4. Keil to STM32CubeIDE标准库移植
  5. 使用Qt绘制二维码 QRcode
  6. 高通平台耳机类型识别
  7. 微信小程序自定义导航栏(带汉堡包菜单)
  8. dgraph部署和使用
  9. java微信机器人_GitHub - linux-china/weixin-robot-java: 微信公共平台机器人Java SDK
  10. kali虚拟机无法发现外置网卡问题