/* 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的更多相关文章

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

    NSGA(非支配排序遗传算法).NSGA-II(带精英策略的快速非支配排序遗传算法),都是基于遗传算法的多目标优化算法,是基于pareto最优解讨论的多目标优化. 在官网: http://www.ii ...

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

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

  3. 多目标遗传算法 ------ NSGA-II (部分源码解析)目标函数 problemdef.c

    /* Test problem definitions */ # include <stdio.h> # include <stdlib.h> # include <ma ...

  4. 多目标遗传算法 ------ NSGA-II (部分源码解析) 拥挤距离计算 crowddist.c

    /* Crowding distance computation routines */ # include <stdio.h> # include <stdlib.h> # ...

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

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

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

    /* Routines for storing population data into files */ # include <stdio.h> # include <stdlib ...

  7. 多目标遗传算法 ------ NSGA-II (部分源码解析)README 算法的部分英文解释

    This is the Readme file for NSGA-II code. About the Algorithm--------------------------------------- ...

  8. 多目标遗传算法 ------ NSGA-II (部分源码解析) 实数、二进制编码的变异操作 mutation.c

    遗传算法的变异操作 /* Mutation routines */ # include <stdio.h> # include <stdlib.h> # include < ...

  9. 多目标遗传算法 ------ NSGA-II (部分源码解析) 临时种群生成新父代种群 fillnds.c

    /* Nond-domination based selection routines */ # include <stdio.h> # include <stdlib.h> ...

随机推荐

  1. app推广及主要代码

    app推广:      一.基本情况       我们把推广和调研都放在了一起,主要是调研,主要通过调查问卷和直接访问的方式,让调查的人能够看到我们app的主要功能, 然后做出评价和对此改善的意见.调 ...

  2. 什么是Consul

    什么是Consul Consul文档简要整理 什么是Consul? Consul是一个用来实现分布式系统的服务发现与配置的开源工具.他主要由多个组成部分: 服务发现:客户端通过Consul提供服务,类 ...

  3. TextView设置文字包含中英文时自动换行问题的终极解决方案

    情景,正常TextView中设置文本内容中包含中英文时会造成自动换行的问题,影响界面显示效果,如图: 网上很多解决途径,甚至有多三方框架处理,但是效果并不能达到,最终是要如下代码完美解决,效果图如下: ...

  4. PAT L3-021 神坛

    https://pintia.cn/problem-sets/994805046380707840/problems/994805046577840128 在古老的迈瑞城,巍然屹立着 n 块神石.长老 ...

  5. PP模块的主要功能及标准业务流程

    主要功能:1.SOP (Sales and operations Planning).2.资源分配计划划 (Distribution Resource Planning)3.生产计划编制 (Produ ...

  6. JIRA & GitHub

    JIRA & GitHub https://confluence.atlassian.com/adminjiracloud/connect-jira-cloud-to-github-81418 ...

  7. Delphi学习技巧

    我感觉学习最大的诀窍是, 尽快捕捉到设计者(Delphi VCL 的设计者.进而是 Windows 操作系统的设计者)的某些思路, 和大师的思路吻合了, 才能够融汇贯通, 同时从容使用它们的成果. 碰 ...

  8. CSS全屏布局的6种方式

    前面的话 全屏布局在实际工作中是很常用的,比如管理系统.监控平台等.本文将介绍关于全屏布局的6种思路 float [1]float + calc 通过calc()函数计算出.middle元素的高度,并 ...

  9. ubuntu 安装 postgresql

    安装环境: Ubuntu 10.04-desktop-i386 PostgreSQL 8.4 1. 安装PostgreSQL 输入如下命令 sudo apt-get install postgresq ...

  10. Sql 标识列 增长1000

    Sql 标识列 增长1000 的解决办法: 1. Open "SQL Server Configuration Manager" 2. Click "SQL Server ...