/* 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. js返回值 数组去重

    function myfun(arr){ var arr1 = new Array(); var len = arr.length; ;i <len ;i++){ ) { arr1.push(a ...

  2. 重温Delphi之:面向对象

    任何一门语言,只要具备了"封装,继承,多态"这三项基本能力,不管其实现方式是直接或曲折.复杂或简洁,就可以称之为“面向对象”的语言. Delphi当年的迅速走红,是以其RAD快速开 ...

  3. __add__运行过程

  4. BZOJ5249 九省联考2018IIIDX(线段树+贪心)

    显然这形成了一个树形结构.考虑这样一种贪心:按照曲目顺序,每次取消其父亲的预留,并选择当前可选择(保证其子树有合法选择且满足预留)的最大值,然后对其子树预留出大于等于他的一些值.这个做法显然是正确的. ...

  5. BZOJ1045 HAOI2008糖果传递(贪心)

    显然最后每个小朋友所拥有的糖果数就是糖果数总和的平均数.设该平均数为t. 环的问题一般断成链,但这个题似乎没有什么很好的办法在枚举断点的时候快速算出答案(我甚至不知道会不会有断点) 于是我们假装把他断 ...

  6. Python解惑:整数比较

    在 Python 中一切都是对象,毫无例外整数也是对象,对象之间比较是否相等可以用==,也可以用is.==和is操作的区别是: is比较的是两个对象的id值是否相等,也就是比较俩对象是否为同一个实例对 ...

  7. 平衡树Splay

    维护区间添加,删除,前驱,后继,排名,逆排名 普通平衡树 #include <cstdio> #define ls t[now].ch[0] #define rs t[now].ch[1] ...

  8. 省选前的th题

    沙茶博主终于整完了知识点并学完了早该在NOIP之前学的知识们 于是终于开始见题了,之前那个奇怪的题单的结果就是这个了 题目按沙茶博主的做题顺序排序 个人感觉(暂时)意义不大的已被自动忽略 洛谷 491 ...

  9. EXGCD 扩展欧几里得

    推荐:https://www.zybuluo.com/samzhang/note/541890 扩展欧几里得,就是求出来ax+by=gcd(x,y)的x,y 为什么有解? 根据裴蜀定理,存在u,v使得 ...

  10. CF 991

    843名... 正规比赛肯定要掉分了...... 就算C没WA也是765名...为什么会这么菜呢? A,水.我加了两个特判. B,水.以 n * 4.5 为目标即可. C,裸二分,可耻的WA了一次是为 ...