多目标遗传算法 ------ NSGA-II (部分源码解析)状态报告 打印 report.c

 1 /* Routines for storing population data into files */
 2
 3 # include <stdio.h>
 4 # include <stdlib.h>
 5 # include <math.h>
 6
 7 # include "global.h"
 8 # include "rand.h"
 9
10 /* Function to print the information of a population in a file */
11 void report_pop (population *pop, FILE *fpt)
12 {
13     int i, j, k;
14     for (i=0; i<popsize; i++)
15     {
16         for (j=0; j<nobj; j++)
17         {
18             fprintf(fpt,"%e\t",pop->ind[i].obj[j]);
19         }
20         if (ncon!=0)
21         {
22             for (j=0; j<ncon; j++)
23             {
24                 fprintf(fpt,"%e\t",pop->ind[i].constr[j]);
25             }
26         }
27         if (nreal!=0)
28         {
29             for (j=0; j<nreal; j++)
30             {
31                 fprintf(fpt,"%e\t",pop->ind[i].xreal[j]);
32             }
33         }
34         if (nbin!=0)
35         {
36             for (j=0; j<nbin; j++)
37             {
38                 for (k=0; k<nbits[j]; k++)
39                 {
40                     fprintf(fpt,"%d\t",pop->ind[i].gene[j][k]);
41                 }
42             }
43         }
44         fprintf(fpt,"%e\t",pop->ind[i].constr_violation);
45         fprintf(fpt,"%d\t",pop->ind[i].rank);
46         fprintf(fpt,"%e\n",pop->ind[i].crowd_dist);
47     }
48     return;
49 }
50
51 /* Function to print the information of feasible and non-dominated population in a file */
52 void report_feasible (population *pop, FILE *fpt)
53 {
54     int i, j, k;
55     for (i=0; i<popsize; i++)
56     {
57         if (pop->ind[i].constr_violation == 0.0 && pop->ind[i].rank==1)
58         {
59             for (j=0; j<nobj; j++)
60             {
61                 fprintf(fpt,"%e\t",pop->ind[i].obj[j]);
62             }
63              if (ncon!=0)
64             {
65                 for (j=0; j<ncon; j++)
66                 {
67                     fprintf(fpt,"%e\t",pop->ind[i].constr[j]);
68                 }
69             }
70             if (nreal!=0)
71             {
72                 for (j=0; j<nreal; j++)
73                 {
74                     fprintf(fpt,"%e\t",pop->ind[i].xreal[j]);
75                 }
76             }
77             if (nbin!=0)
78             {
79                 for (j=0; j<nbin; j++)
80                 {
81                     for (k=0; k<nbits[j]; k++)
82                     {
83                         fprintf(fpt,"%d\t",pop->ind[i].gene[j][k]);
84                     }
85                 }
86             }
87             fprintf(fpt,"%e\t",pop->ind[i].constr_violation);
88             fprintf(fpt,"%d\t",pop->ind[i].rank);
89             fprintf(fpt,"%e\n",pop->ind[i].crowd_dist);
90         }
91     }
92     return;
93 }

report_pop   将种群中所有个体的   目标函数值, 限制条件值, 编码值  打印出来。

report_pop   种群中的非支配个体并且限制条件总和为0   (constr_violation == 0.0的个体的   目标函数值, 限制条件值, 编码值  打印出来。

时间: 2024-12-27 09:38:41

多目标遗传算法 ------ NSGA-II (部分源码解析)状态报告 打印 report.c的相关文章

多目标遗传算法 ------ NSGA-II (部分源码解析)介绍

NSGA(非支配排序遗传算法).NSGA-II(带精英策略的快速非支配排序遗传算法),都是基于遗传算法的多目标优化算法,是基于pareto最优解讨论的多目标优化. 在官网: http://www.iitk.ac.in/kangal/codes.shtml 可以下载到  NSGA-II  的C语言版源码,下载最新版后打开如下: 其中,nsga2r.c  为主文件,打开后找到核心代码,如下: 1 for (i=2; i<=ngen; i++) 2 { 3 selection (parent_pop,

多目标遗传算法 ------ NSGA-II (部分源码解析) 交叉操作 crossover.c

遗传算法中的交叉操作是 对NSGA-II  源码分析的  最后一部分, 这一部分也是我 从读该算法源代码和看该算法论文理解偏差最大的  函数模块. 这里,首先提一下,遗传算法的  交叉操作.变异操作都是需要设定概率的, 即交叉概率和变异概率. 假设种群个体 大小为  popsize ,  那么交叉操作需要进行 popsize/2 次 ,   变异操作需要进行 popsize 次, 其中每次操作的时候都需要随机生成一个随机数来与给定的概率进行判断,若小于给定的概率则继续执行否则退出该操作. 如果继

多目标遗传算法 ------ NSGA-II (部分源码解析)两个个体支配判断 dominance.c

1 /* Domination checking routines */ 2 3 # include <stdio.h> 4 # include <stdlib.h> 5 # include <math.h> 6 7 # include "global.h" 8 # include "rand.h" 9 10 /* Routine for usual non-domination checking 11 It will retur

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

tourselect.c  文件中共有两个函数: selection (population *old_pop, population *new_pop) individual* tournament (individual *ind1, individual *ind2) 首先,第一个函数代码如下: 1 /* Routine for tournament selection, it creates a new_pop from old_pop by performing tournament

多目标遗传算法 ------ NSGA-II (部分源码解析)辅助变量 双链表操作 list.c

1 /* A custom doubly linked list implemenation */ 2 3 # include <stdio.h> 4 # include <stdlib.h> 5 # include <math.h> 6 7 # include "global.h" 8 # include "rand.h" 9 10 /* Insert an element X into the list at location

多目标遗传算法 ------ NSGA-II (部分源码解析)父、子种群合并 merge.c

1 /* Routine for mergeing two populations */ 2 3 # include <stdio.h> 4 # include <stdlib.h> 5 # include <math.h> 6 7 # include "global.h" 8 # include "rand.h" 9 10 /* Routine to merge two populations into one */ 11 vo

YOLOv3目标检测:原理与Darknet源码解析

Linux创始人Linus Torvalds有一句名言:Talk is cheap. Show me the code. (冗谈不够,放码过来!). 代码阅读是从入门到提高的必由之路.尤其对深度学习,许多框架隐藏了神经网络底层的实现,只能在上层调包使用,对其内部原理很难认识清晰,不利于进一步优化和创新. YOLOv3是一种基于深度学习的端到端实时目标检测方法,以速度快见长. YOLOv3的实现Darknet是使用C语言开发的轻型开源深度学习框架,依赖少,可移植性好,可以作为很好的代码阅读案例,让

第三十六节,目标检测之yolo源码解析

在一个月前,我就已经介绍了yolo目标检测的原理,后来也把tensorflow实现代码仔细看了一遍.但是由于这个暑假事情比较大,就一直搁浅了下来,趁今天有时间,就把源码解析一下.关于yolo目标检测的原理请参考前面一篇文章:第三十五节,目标检测之YOLO算法详解 在讲解源码之前,我们需要做一些准备工作: 下载源码,本文所使用的yolo源码来源于网址:https://github.com/hizhangp/yolo_tensorflow 下载训练所使用的数据集,我们仍然使用以VOC 2012数据集

【特征匹配】RANSAC算法原理与源码解析

转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/50217655 随机抽样一致性(RANSAC)算法,可以在一组包含"外点"的数据集中,采用不断迭代的方法,寻找最优参数模型,不符合最优模型的点,被定义为"外点".在图像配准以及拼接上得到广泛的应用,本文将对RANSAC算法在OpenCV中角点误匹配对的检测中进行解析. 1.RANSAC原理 OpenCV中滤除误匹配对采用RANSAC算法寻找一个最佳