一起来学演化计算-SBX(Simulated binary crossover)模拟二进制交叉算子和DE(differential evolution)差分进化算子

觉得有用的话,欢迎一起讨论相互学习~Follow Me

参考文献
[1] https://blog.csdn.net/qq_36347331/article/details/96351162
[2] http://www.it1352.com/994287.html
[3] https://www.egr.msu.edu/~kdeb/

SBX

DE

SBX matlab版本实现

function object=crossover(object,p1,p2,cf)object.rnvec=0.5*((1+cf).*p1.rnvec + (1-cf).*p2.rnvec);% 截断范围object.rnvec(object.rnvec>1)=1;object.rnvec(object.rnvec<0)=0;
end
u = rand(1,D_multitask);
cf = zeros(1,D_multitask);
cf(u<=0.5)=(2*u(u<=0.5)).^(1/(mu+1));
cf(u>0.5)=(2*(1-u(u>0.5))).^(-1/(mu+1));
child(count) = crossover(child(count),population(p1),population(p2),cf);
child(count+1) = crossover(child(count+1),population(p2),population(p1),cf);

SBX java版本实现

/*** This class allows to apply a SBX crossover operator using two parent* solutions.* 关于此代码和Deb论文中代码不一致可以查看http://www.it1352.com/994287.html帖子或者查看Deb官方源码*/
//  SBXCrossover.java
//
//  Author:
//       Antonio J. Nebro <antonio@lcc.uma.es>
//       Juan J. Durillo <durillo@lcc.uma.es>
//
//  Copyright (c) 2011 Antonio J. Nebro, Juan J. Durillo
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU Lesser General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU Lesser General Public License for more details.
//
//  You should have received a copy of the GNU Lesser General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
public Solution[] doCrossover(double probability, Solution parent1, Solution parent2) throws JMException {Solution[] offSpring = new Solution[2];/***使用一个父代个体去生成新个体的原因在于可以将父代的属性传给子代*具体有:*  public Solution(Solution solution) {*      problemSet_ = solution.problemSet_;*      type_ = solution.type_;**      numberOfObjectives_ = solution.getNumberOfObjectives();*      objective_ = new double[numberOfObjectives_];*      for (int i = 0; i < objective_.length; i++) {*          objective_[i] = solution.getObjective(i);*                } // for*          // <-**      variable_ = type_.copyVariables(solution.variable_);*      overallConstraintViolation_ = solution.getOverallConstraintViolation();*      numberOfViolatedConstraints_ = solution.getNumberOfViolatedConstraint();*      distanceToSolutionSet_ = solution.getDistanceToSolutionSet();*      crowdingDistance_ = solution.getCrowdingDistance();*      kDistance_ = solution.getKDistance();*      fitness_ = solution.getFitness();*      rank_ = solution.getRank();*      location_ = solution.getLocation();**      skillFactor_ = solution.getSkillFactor();*  } // Solution* */offSpring[0] = new Solution(parent1);offSpring[1] = new Solution(parent2);int i;double rand;double y1, y2, yL, yu;double c1, c2;double alpha, beta, betaq;double valueX1, valueX2;XReal x1 = new XReal(parent1);XReal x2 = new XReal(parent2);XReal offs1 = new XReal(offSpring[0]);XReal offs2 = new XReal(offSpring[1]);int numberOfVariables = x1.getNumberOfDecisionVariables();if (PseudoRandom.randDouble() <= probability) {//只有随机生成的数小于自定义的交叉可能性时才进行交叉操作for (i = 0; i < numberOfVariables; i++) {valueX1 = x1.getValue(i);valueX2 = x2.getValue(i);if (PseudoRandom.randDouble() <= 0.5) {if (java.lang.Math.abs(valueX1 - valueX2) > EPS) {if (valueX1 < valueX2) {y1 = valueX1;y2 = valueX2;} else {y1 = valueX2;y2 = valueX1;} // ifyL = x1.getLowerBound(i);yu = x1.getUpperBound(i);rand = PseudoRandom.randDouble();beta = 1.0 + (2.0 * (y1 - yL) / (y2 - y1));alpha = 2.0 - java.lang.Math.pow(beta, -(distributionIndex_ + 1.0));if (rand <= (1.0 / alpha)) {betaq = java.lang.Math.pow((rand * alpha), (1.0 / (distributionIndex_ + 1.0)));} else {betaq = java.lang.Math.pow((1.0 / (2.0 - rand * alpha)),(1.0 / (distributionIndex_ + 1.0)));} // ifc1 = 0.5 * ((y1 + y2) - betaq * (y2 - y1));beta = 1.0 + (2.0 * (yu - y2) / (y2 - y1));alpha = 2.0 - java.lang.Math.pow(beta, -(distributionIndex_ + 1.0));if (rand <= (1.0 / alpha)) {betaq = java.lang.Math.pow((rand * alpha), (1.0 / (distributionIndex_ + 1.0)));} else {betaq = java.lang.Math.pow((1.0 / (2.0 - rand * alpha)),(1.0 / (distributionIndex_ + 1.0)));} // ifc2 = 0.5 * ((y1 + y2) + betaq * (y2 - y1));if (c1 < yL)c1 = yL;if (c2 < yL)c2 = yL;if (c1 > yu)c1 = yu;if (c2 > yu)c2 = yu;if (PseudoRandom.randDouble() <= 0.5) {offs1.setValue(i, c2);offs2.setValue(i, c1);} else {offs1.setValue(i, c1);offs2.setValue(i, c2);} // if} else {offs1.setValue(i, valueX1);offs2.setValue(i, valueX2);} // if} else {offs1.setValue(i, valueX2);offs2.setValue(i, valueX1);} // if} // if} // ifreturn offSpring;}

转载于:https://www.cnblogs.com/cloud-ken/p/11251231.html

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

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

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

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

    0 前言 Gitee 代码地址: https://gitee.com/futurelqh/GA 模拟二进制交叉:Simulated binary crossover Introduction SBX ...

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

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

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

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

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

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

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

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

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

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

  8. Simulated Binary Crossover(SBX)的学习

    最近在做作业遇到一个Dejong's fifth function的multi modal的问题,用传统的GA方法尝试了很多次,的确没办法搞定,随机很多次也不一定在global optimum的地方得 ...

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

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

最新文章

  1. 样本方差除以n-1而不是n的原因
  2. 【BZOJ-3578】GTY的人类基因组计划2 set + map + Hash 乱搞
  3. Oracle关联查询-数据类型不一致问题 ORA-01722: 无效数字
  4. php函数、类和对象以及类的封装、继承、类的静态方法、静态属性
  5. linux用户组和权限分配
  6. 「读懂源码系列3」lodash 是如何实现深拷贝的(上)
  7. 基于动态规划DTW算法加速衡量两个不同的时间序列的相似性
  8. JAVA刷视频代码,Java+adb命令实现自动刷视频脚本
  9. 什么是云?云里雾里——最流行的云时代
  10. Windows10 Hyper-v 虚拟机安装点心云,实现闲置宽带共享。
  11. 免费各种查询API接口
  12. Git error: cannot spawn ssh: No such file or directory的一个解决办法
  13. 基于无线通讯病房远程通信呼叫和温度检测系统设计
  14. 配置 Spring Batch 批处理失败重试机制
  15. php zip解压,php解压缩zip和rar压缩包文件
  16. transporter上传卡正在交付_Transporter上传卡在——正在验证 APP - 正在通过App Store进行认证...
  17. CV影视TV版3.0.3最新版 家中观影利器
  18. CVE-2021-1732:Windows Win32k提权
  19. Linux-----05
  20. vue固定资产管理系统_Java 开源办公开发平台 O2OA V5.1.1 发布 | 支持 Vue、React、Angular...

热门文章

  1. 阿里云 企业邮箱域名解析(DNS)
  2. 计算机计算用函数平均分,excel表格中数据怎样算均分-excel里如何使用IF函数挑出数值算平均分啊...
  3. 计算机主板与检测,主板知识详解:CPU自动检测和硬件错误的侦测
  4. 小程序项目从Hbuilder转移到vscode步骤
  5. OKR如何与绩效考核并行?
  6. 猜数字游戏 由计算机,猜数字游戏玩法
  7. 一文解决关于建立时间和保持时间的困惑
  8. 外卖红包领取公众号简单搭建
  9. 解决PHP报错No input file specified
  10. RecyclerView 设置了GridLayoutManager 空白区域点击事件