遗传算法中的交叉操作是 对NSGA-II  源码分析的  最后一部分, 这一部分也是我 从读该算法源代码和看该算法论文理解偏差最大的  函数模块。

这里,首先提一下,遗传算法的  交叉操作、变异操作都是需要设定概率的, 即交叉概率和变异概率。

假设种群个体 大小为  popsize ,  那么交叉操作需要进行 popsize/2 次 ,   变异操作需要进行 popsize 次, 其中每次操作的时候都需要随机生成一个随机数来与给定的概率进行判断,若小于给定的概率则继续执行否则退出该操作。

如果继续操作的话  需要注意一个问题  对两个个体交叉 ,或  对单个个体进行变异  都是对 个体的所有变量  进行操作,其中变异对二进制编码的个体来说是对每个个体的每个变量 的二进制编码的 每个比特位进行变异。

包装函数,通过对标识位判断编码形式来决定 具体的核心功能 所调用的函数。

1 /*Crossover routines*/

2

3 # include

4 # include

5 # include

6

7 # include "global.h"

8 # include "rand.h"

9

10 /*Function to cross two individuals*/

11 void crossover (individual *parent1, individual *parent2, individual *child1, individual *child2)12 {13 if (nreal!=0)14 {15 realcross (parent1, parent2, child1, child2);16 }17 if (nbin!=0)18 {19 bincross (parent1, parent2, child1, child2);20 }21 return;22 }

实数编码的  两个个体交叉操作, 采用 SBX 方式交叉。需要交叉的两个个体  每个变量  都进行交叉操作。

1 /*Routine for real variable SBX crossover*/

2 void realcross (individual *parent1, individual *parent2, individual *child1, individual *child2)3 {4 inti;5 doublerand;6 doubley1, y2, yl, yu;7 doublealpha, beta, betaq;8 if (randomperc() <=pcross_real)9 {10 nrealcross++;11 for (i=0; ixreal[i] < parent2->xreal[i])16 {17 y1 = parent1->xreal[i];18 y2 = parent2->xreal[i];19 }20 else

21 {22 y1 = parent2->xreal[i];23 y2 = parent1->xreal[i];24 }25 if (fabs(parent1->xreal[i]-parent2->xreal[i]) >EPS)26 {27 yl =min_realvar[i];28 yu =max_realvar[i];29 rand =randomperc();30 beta = 1.0 + (2.0*(y1-yl)/(y2-y1));31 alpha = 2.0 - pow(beta,-(eta_c+1.0));32 if (rand <= (1.0/alpha))33 {34 betaq = pow ((rand*alpha),(1.0/(eta_c+1.0)));35 }36 else

37 {38 betaq = pow ((1.0/(2.0 - rand*alpha)),(1.0/(eta_c+1.0)));39 }40 child1->xreal[i] = 0.5*((y1+y2)-betaq*(y2-y1));41 beta = 1.0 + (2.0*(yu-y2)/(y2-y1));42 alpha = 2.0 - pow(beta,-(eta_c+1.0));43 if (rand <= (1.0/alpha))44 {45 betaq = pow ((rand*alpha),(1.0/(eta_c+1.0)));46 }47 else

48 {49 betaq = pow ((1.0/(2.0 - rand*alpha)),(1.0/(eta_c+1.0)));50 }51 child2->xreal[i] = 0.5*((y1+y2)+betaq*(y2-y1));52 if (child1->xreal[i]xreal[i]=yl;55 }56 if (child1->xreal[i]>yu)57 {58 child1->xreal[i]=yu;59 }60 if (child2->xreal[i]xreal[i]=yl;63 }64 if (child2->xreal[i]>yu)65 {66 child2->xreal[i]=yu;67 }68 }69 else

70 {71 child1->xreal[i] = parent1->xreal[i];72 child2->xreal[i] = parent2->xreal[i];73 }74 }75 else

76 {77 child1->xreal[i] = parent1->xreal[i];78 child2->xreal[i] = parent2->xreal[i];79 }80 }81 }82 else

83 {84 for (i=0; ixreal[i] = parent1->xreal[i];87 child2->xreal[i] = parent2->xreal[i];88 }89 }90 return;91 }

二进制编码  的   交叉操作:

(双点 交叉)  两个个体的  每个对应的变量  彼此交叉操作。这里每个变量的 二进制编码 段 随机选取两点, 将中间部门的二进制段  互换,两个交叉点。

1 /*Routine for two point binary crossover*/

2 void bincross (individual *parent1, individual *parent2, individual *child1, individual *child2)3 {4 inti, j;5 doublerand;6 inttemp, site1, site2;7 for (i=0; isite2)16 {17 temp =site1;18 site1 =site2;19 site2 =temp;20 }21 for (j=0; jgene[i][j] = parent1->gene[i][j];24 child2->gene[i][j] = parent2->gene[i][j];25 }26 for (j=site1; jgene[i][j] = parent2->gene[i][j];29 child2->gene[i][j] = parent1->gene[i][j];30 }31 for (j=site2; jgene[i][j] = parent1->gene[i][j];34 child2->gene[i][j] = parent2->gene[i][j];35 }36 }37 else

38 {39 for (j=0; jgene[i][j] = parent1->gene[i][j];42 child2->gene[i][j] = parent2->gene[i][j];43 }44 }45 }46 return;47 }

锦标赛算法c语言,多目标遗传算法 ------ NSGA-II (部分源码解析) 交叉操作 crossover.c(示例代码)...相关推荐

  1. 遗传算法锦标赛选择java实现_多目标遗传算法 ------ NSGA-II (部分源码解析)二元锦标赛选择 tourselect.c...

    tourselect.c  文件中共有两个函数: selection (population *old_pop, population *new_pop) individual* tournament ...

  2. 视频教程-YOLOv3目标检测:原理与源码解析-计算机视觉

    YOLOv3目标检测:原理与源码解析 大学教授,美国归国博士.博士生导师:人工智能公司专家顾问:长期从事人工智能.物联网.大数据研究:已发表学术论文100多篇,授权发明专利10多项 白勇 ¥78.00 ...

  3. 多目标遗传算法NSGA

    多目标遗传算法NSGA 因所读的一篇论文中,为了解决多目标的最优解问题,作者使用了一种称为NSGA-II(Improved Non-dominated Sorting Genetic Algorith ...

  4. Opencv多语言自然场景文本识别系统(源码&教程)

    1. 研究背景 人类在自然场景中可以快速定位并识别看到的文字信息,但是想要计算机做到和人类一样是比较困难的.开发人员一直想要让机器也能识别图像中的文字信息.当然,对于自然场景来说,图像中的信息复杂甚至 ...

  5. mysql 线程池源码模块_易语言Mysql线程池2.0模块源码

    易语言Mysql线程池2.0模块源码 易语言Mysql线程池2.0模块源码 系统结构:GetThis,初始化,关闭类线程,线程_测试,其他_附加文本,连接池初始化,取mysql句柄,释放mysql句柄 ...

  6. C语言实现哈希表(附完整源码)

    C语言实现哈希表 C语言实现哈希表附完整源码 C语言实现哈希表附完整源码 #include<stdio.h> #include<stdlib.h> #define SUCCES ...

  7. matlab 双层规划求解,双层规划模型的遗传算法求解的Matlab源码

    双层规划模型的遗传算法求解的Matlab源码 双层规划模型的遗传算法求解的Matlab源码 function [BESTX,BESTY,ALLX,ALLY]=GAU (KU,KD,NU,ND,PmU, ...

  8. WoShop跨境电商USDT支付语言插件全开源无加密商城源码

    WoShop跨境电商USDT支付语言插件全开源无加密商城源码 基于现场直播+购物模式,用户可以"边看边买"现场直播商城平台,全终端支持,统一管理后台,传播更强,管理更方便,支持私有 ...

  9. 通过语言包,让云豹短视频源码实现国际化运营

    本文以ios版本的云豹短视频源码为例,讲述如何通过加入语言包,让云豹短视频源码实现国际化运营. 一.配置 在Xcode中依次选中 projext – Localizations – 自己需要的语言[e ...

最新文章

  1. could not export python function call python_value. Remove calls to Python functions before export
  2. jdbc之防sql注入攻击
  3. VCSA中配置时间和时区,实测至6.5适用
  4. html的混合标记,HTML XPath:提取与多个标签混合的文本?
  5. Oracle序列小结
  6. Base64算法的编程使用
  7. python安装gz文件_python tar.gz怎么安装-问答-阿里云开发者社区-阿里云
  8. ajax是宏任务还是微任务,(滴滴面试)事件循环Event Loop及微任务和宏任务的执行过程详解...
  9. springboot初始化逻辑_详解Spring Boot中初始化资源的几种方式
  10. 114企业网重金收购114库网
  11. 表单复选框按钮全选-取消全选小案例
  12. Bibtex 参考文献样式
  13. mac下后端开发常用软件
  14. 从零开始Android游戏编程(第二版) 前言
  15. 新开的淘宝店铺要怎么操作才能排名靠前?
  16. django+pyecharts制作工单系统实时刷新可视化仪表盘并设置报表定时发送
  17. 【NX二次开发】单位化向量
  18. 全波形反演的深度学习方法: 第 1 章 基本概念
  19. 物理服务器迁移问题总结
  20. 按许用压力角设计最小尺寸的摆动从动杆平面凸轮的解析法.华大年

热门文章

  1. win8.1或win10 UEFI + GPT 安装
  2. Java 面向对象测试题-1
  3. 三菱FX5U-高速脉冲输入的频率测量
  4. oracle11.2.0.1forwindows2012r2 standard打psu补丁
  5. 一周的第一天是星期日还是星期一?
  6. cad打印本计算机未配置,cad无法打印怎么设置_cad图纸无法打印的处理方法
  7. 新文联播第9期 | 通过 fNIRS 看社会地位与信任整合的人际同步机制
  8. PHP在线混淆加密教程分享+基本无解
  9. JavaScript中计算N次方的方法**和math.pow()-讲解
  10. 【运维面试】面试官:http的状态码你了解多少?