多目标遗传算法 ------ NSGA-II (部分源码解析)两个个体支配判断 dominance.c
/* Domination checking routines */ # include <stdio.h>
# include <stdlib.h>
# include <math.h> # include "global.h"
# include "rand.h" /* Routine for usual non-domination checking
It will return the following values
1 if a dominates b
-1 if b dominates a
0 if both a and b are non-dominated */ int check_dominance (individual *a, individual *b)
{
int i;
int flag1;
int flag2;
flag1 = ;
flag2 = ;
if (a->constr_violation< && b->constr_violation<)
{
if (a->constr_violation > b->constr_violation)
{
return ();
}
else
{
if (a->constr_violation < b->constr_violation)
{
return (-);
}
else
{
return ();
}
}
}
else
{
if (a->constr_violation < && b->constr_violation == )
{
return (-);
}
else
{
if (a->constr_violation == && b->constr_violation <)
{
return ();
}
else
{
for (i=; i<nobj; i++)
{
if (a->obj[i] < b->obj[i])
{
flag1 = ; }
else
{
if (a->obj[i] > b->obj[i])
{
flag2 = ;
}
}
}
if (flag1== && flag2==)
{
return ();
}
else
{
if (flag1== && flag2==)
{
return (-);
}
else
{
return ();
}
}
}
}
}
}
以上代码是判断两个个体的支配关系的。
基本遵循两个原则,首先是判断两个个体是是否超出限制条件,即判断 constr_violation 的大小。
如果个体 没有超过限制条件 则个体的 constr_violation >= 0,constr_violation 默认值 为 0 。
然后判断两个个体之间的支配关系。
以上代码含义基本为,首先判断两个个体是否 超出限制,即constr_violation<0 , 如果一个个体超出限制,另一个没有超出则直接选择 未超出限制的个体。
如果两个个体都超出限制了则选出 超出限制较小 的个体, 即 constr_violation 较大个体。
如果两个个体都超出限制了 而 constr_violation 相等, 则判断两个个体 支配关系为 互不支配。
如果两个个体 均没有超出限制, 则判断两个个体的支配关系。这里的具体操作是对两个个体的各个目标函数值进行大小判断,
如果 a 个体的目标函数有小于 b 个体的, flag1==1 。如果 b 个体的目标函数有小于 a 个体的, flag2==1 。
如果 flag1==1 flag2==0, 则 a 支配 b 。
如果 flag1==0 flag2==1, 则 b 支配 a 。
如果 flag1==1 flag2==1, 则 a b 互不支配 。
多目标遗传算法 ------ NSGA-II (部分源码解析)两个个体支配判断 dominance.c的更多相关文章
- 多目标遗传算法 ------ NSGA-II (部分源码解析)介绍
NSGA(非支配排序遗传算法).NSGA-II(带精英策略的快速非支配排序遗传算法),都是基于遗传算法的多目标优化算法,是基于pareto最优解讨论的多目标优化. 在官网: http://www.ii ...
- 多目标遗传算法 ------ NSGA-II (部分源码解析) 交叉操作 crossover.c
遗传算法中的交叉操作是 对NSGA-II 源码分析的 最后一部分, 这一部分也是我 从读该算法源代码和看该算法论文理解偏差最大的 函数模块. 这里,首先提一下,遗传算法的 交叉操作.变异操作都 ...
- 多目标遗传算法 ------ NSGA-II (部分源码解析)目标函数 problemdef.c
/* Test problem definitions */ # include <stdio.h> # include <stdlib.h> # include <ma ...
- 多目标遗传算法 ------ NSGA-II (部分源码解析) 拥挤距离计算 crowddist.c
/* Crowding distance computation routines */ # include <stdio.h> # include <stdlib.h> # ...
- 多目标遗传算法 ------ NSGA-II (部分源码解析)二元锦标赛选择 tourselect.c
tourselect.c 文件中共有两个函数: selection (population *old_pop, population *new_pop) individual* tournament ...
- 多目标遗传算法 ------ NSGA-II (部分源码解析)状态报告 打印 report.c
/* Routines for storing population data into files */ # include <stdio.h> # include <stdlib ...
- 多目标遗传算法 ------ NSGA-II (部分源码解析)README 算法的部分英文解释
This is the Readme file for NSGA-II code. About the Algorithm--------------------------------------- ...
- 多目标遗传算法 ------ NSGA-II (部分源码解析) 实数、二进制编码的变异操作 mutation.c
遗传算法的变异操作 /* Mutation routines */ # include <stdio.h> # include <stdlib.h> # include < ...
- 多目标遗传算法 ------ NSGA-II (部分源码解析) 临时种群生成新父代种群 fillnds.c
/* Nond-domination based selection routines */ # include <stdio.h> # include <stdlib.h> ...
随机推荐
- logstash 解析日志文件
input { file { path => "/usr/local/test/log.log" } } filter { grok { match => { &quo ...
- 小学四则运算APP 第二次冲刺 第四天
团队成员:陈淑筠.杨家安.陈曦 团队选题:小学四则运算APP 第二次冲刺阶段时间:11.29~12.09 本次发布的是合并后的选择题功能界面的设置: ChoiceSet.java: package c ...
- SprngMVC源码学习
运行helloWorld示例进入调试界面. DispatcherServlet:前端控制器 DispatcherServlet.doDispatch(HttpServletRequest, HttpS ...
- (Alpha)Let's-版本测试报告
测试中发现的Bug 我们在测试之前发布了新的版本Version1.1,发布新版本的同时也带来一些问题: 修复了上传图片画质问题的Bug 修复了搜索功能的部分Bug 增加了下拉刷新的功能 修复了部分界面 ...
- [转帖新闻]Windows 7时代即将终结:曾有多辉煌 如今就有多凄凉
Windows 7时代即将终结:曾有多辉煌 如今就有多凄凉 投递人 itwriter 发布于 2019-01-18 10:47 评论(4) 有834人阅读 [收藏] « » 文/屠敏 来源:CSDN( ...
- spring cloud实战与思考(四) JWT之Token主动失效
需求: JWT泄露.密码重置等场景下,需要将未过期但是已经不安全的JWT主动失效. 本文不再复述JWT的基础知识,不了解的小伙伴可以自行Google一下.这里主要是针对以上需求聊一聊解决方案.如果服务 ...
- SQL Server 公用表表达式(CTE)实现递归
公用表表达式简介: 公用表表达式 (CTE) 可以认为是在单个 SELECT.INSERT.UPDATE.DELETE 或 CREATE VIEW 语句的执行范围内定义的临时结果集.CTE 与派生表类 ...
- BZOJ4808马——二分图最大独立集
题目描述 众所周知,马后炮是中国象棋中很厉害的一招必杀技."马走日字".本来,如果在要去的方向有别的棋子挡住(俗 称"蹩马腿"),则不允许走过去.为了简化问题, ...
- JPQL设置自增长、只读、文本类型等的注解
JAVA中使用JPQL 一种设置id自动生成,自增长的方法 private long id; @Id @GeneratedValue(generator="_native") @G ...
- Windows Server 脚本记录Apache、Mysql 每分钟并发数
打开windows server 计划任务管理器.定时执行如下的Bat脚本即可. 在D盘新建一个monitor文件夹,创建ApacheMysql.bat文件.内容如下: 在monitor文件夹中新建m ...