[笔记]带精英策略的非支配排序的遗传算法NSGAII

啊要出分数线了好紧张. 赶紧复习复习以前学的东西_(:з」∠)_

竟然写了大半天, 全都忘光了, 怕不是要凉 (/゚Д゚)/

遗传算法(Genetic Algorithm)

此处使用二进制编码法形成染色体.

种群初始化: 随机将染色体的某些 DNA 置 1, 进行 M 次, 形成 M 个不重复的个体组成第一代种群.

适应度评价: 对每个个体运行适应度评价函数, 区分群体中个体好坏. 并按照一定策略选择出部分适应度高的个体, 作为下一代的父代.

交叉与变异: 对挑选出的父代, 每次随机选择两个染色体, 在一定概率下将两者的某些 DNA 进行交换, 形成两个新的个体, 即为染色体的交叉; 同时上述新产生的个体有一定概率发生染色体变异, 即对染色体的某些位取反. 最后形成新的子代. 遗传算法就是上述步骤的反复.

非支配排序遗传算法(Non-Dominated Sorting Genetic Algorithm, NSGA)

有时候我们的优化目标不止一个, 比如买菜时同时要求菜越新鲜越好, 且单价越便宜越好. 这便是多目标优化问题. 面对此类问题时, 无法用 1 个指标衡量染色体的好坏, 在判断两个染色体孰优孰劣时将会产生困难. NSGA 解决多目标问题和普通 GA 的主要区别就是在选择算子执行之前对个体关系的分层, 而选择算子, 交叉算子, 变异算子没有区别.

Pareto 支配关系

Pareto 最优解给出了多目标问题的判别的方法.

对于最小化多目标问题, n 个目标分量 f i f_i fi ( i = 1 , . . . , n ) (i=1,...,n) (i=1,...,n) 组成的向量 f ‾ ( X ‾ ) = ( f 1 ( X ‾ ) , f 2 ( X ‾ ) , . . . , f n ( X ‾ ) ) \overline{f}(\overline{X})=(f_1(\overline{X}), f_2(\overline{X}), ..., f_n(\overline{X})) f(X)=(f1(X),f2(X),...,fn(X)), 给定两个决策变量 X ‾ u , X ‾ v   U \overline{X}_u, \overline{X}_v \ U Xu,Xv U:

  • 当且仅当 ∀ i ∈ { 1 , . . . , n } \forall i \in \{1, ..., n\} i{1,...,n} 时, 都有 f i ( X ‾ u ) < f i ( X ‾ v ) f_i(\overline{X}_u) < f_i(\overline{X}_v) fi(Xu)<fi(Xv), 则 X ‾ u \overline{X}_u Xu 支配 X ‾ v \overline{X}_v Xv.
  • 当且仅当 ∀ i ∈ { 1 , . . . , n } \forall i \in \{1, ..., n\} i{1,...,n} 时, 都有 f i ( X ‾ u ) ⩽ f i ( X ‾ v ) f_i(\overline{X}_u) \leqslant f_i(\overline{X}_v) fi(Xu)fi(Xv), 且至少存在一个 j ∈ { 1 , . . . , n } j \in \{1, ..., n\} j{1,...,n} 使得 f j ( X ‾ u ) = f j ( X ‾ v ) f_j(\overline{X}_u) = f_j(\overline{X}_v) fj(Xu)=fj(Xv), 则 X ‾ u \overline{X}_u Xu 弱支配 X ‾ v \overline{X}_v Xv.
  • 当且仅当 ∃ i ∈ { 1 , . . . , n } \exists i \in \{1, ..., n\} i{1,...,n}, 使 f i ( X ‾ u ) < f i ( X ‾ v ) f_i(\overline{X}_u) < f_i(\overline{X}_v) fi(Xu)<fi(Xv), 且 ∃ j ∈ { 1 , . . . , n } \exists j \in \{1, ..., n\} j{1,...,n}, 使 f j ( X ‾ u ) > f j ( X ‾ v ) f_j(\overline{X}_u) > f_j(\overline{X}_v) fj(Xu)>fj(Xv), 则 X ‾ u \overline{X}_u Xu X ‾ v \overline{X}_v Xv 互不支配.

X ‾ u \overline{X}_u Xu 为 Pareto 最优解, 则不存在 X ‾ v ∈ U \overline{X}_v \in U XvU 支配 X ‾ u \overline{X}_u Xu.

非支配排序

对于互不支配的染色体, 我们称这些染色体处于同一层. 则所有的染色体可以被划分到若干层. 非支配排序就是将染色体分层的排序算法, 分得的层称为第一级非支配层, 第二级非支配层… 其中第一级非支配层处于 Pareto 前沿(Pareto Front).

非支配排序步骤如下:

  • (1)设 i = 1 i = 1 i=1;
  • (2)对所有的 j = 1 , 2 , . . . , N ( j ≠ i ) j = 1, 2, ..., N (j \ne i) j=1,2,...,N(j=i), 基于适应度函数比较个体 x i x_i xi, x j x_j xj 之间的支配关系;
  • (3)若不存在任何一个个体 x j x_j xj 优于 x i x_i xi, 则标记 x i x_i xi 为非支配个体;
  • (4)令 i = i + 1 i = i + 1 i=i+1, 转到 (1), 重复直至找到所有非支配个体.

上述步骤将得到第一级非支配层, 过滤第一层所有个体后再次运行非支配排序, 即可得到第二级非支配层.

可以看到每找一层的时间复杂度是 O ( M N 2 ) O(MN^2) O(MN2) ( M M M 为目标数, N N N 为种群大小), 最多要找 N N N 次, 所以一共的时间复杂度到了 O ( M N 3 ) O(MN^3) O(MN3).

虚拟适应度(略)

为了算法更快地收敛, 虚拟适应度越大(层数越低)的个体应该有更多机会进入下一代. 但同时, 我们期望的 Pareto 最优解集应该是均匀分布的(而不是都挤在一个或几个点附近), 因此还要保证当前非支配层上的个体具有多样性。NSGA 中引入了基于拥挤策略的小生境(NIChe)技术, 对每个个体计算共享适应度.

带精英策略的非支配排序遗传算法(NSGA-II)

NSGA-II 是 NSGA 的改进. NSGA-II 相对于 NSGA,

  1. 提出了快速非支配排序算子, 将非支配排序从 O ( M N 3 ) O(MN^3) O(MN3) 优化到了 O ( M N 2 ) O(MN^2) O(MN2) ( M M M 为目标数, N N N 为种群大小);
  2. 提出了拥挤距离算子;
  3. 提出了精英策略选择算子.

NSGA-II 流程图

Created with Raphaël 2.2.0 开始 随机生成第一代种群 计算每个个体的所有目标 快速非支配排序 拥挤距离计算 运行代数大于最大代数? 输出 Pareto 前沿 结束 选择优秀个体组成新的父代 选择, 交叉, 变异 父代与子代合并 yes no

快速支配排序算子

  • (1)对种群 P P P 中的每个个体 p p p, 计算 p p p 在种群 P P P 中支配的个体数 n p n_p np, 并将这些被 p p p 支配的个体存入 S p S_p Sp 中(即每个个体都要两两比较一次, 共比较 N ( N − 1 ) ) 2 \frac{N(N-1))}{2} 2N(N1)) 次, 每次比较要遍历 M M M 个目标, 时间复杂度 O ( M N 2 ) O(MN^2) O(MN2));
  • (2) l a y e r = 1 layer = 1 layer=1;
  • (3)找出所有 n p = 0 n_p = 0 np=0 的个体, 保存在数组 F l a y e r F_{layer} Flayer 中;
  • (4)对于 F l a y e r F_{layer} Flayer 中的每个个体 p p p 的支配集 S p S_p Sp: 遍历 S p S_p Sp, 对 S p S_p Sp 中每个个体 l l l, 执行 n l = n l − 1 n_l = n_l - 1 nl=nl1;
  • (5) l a y e r = l a y e r + 1 layer = layer + 1 layer=layer+1, 重复(3).

拥挤距离算子

  • (1)对每个个体 p p p 令拥挤距离 d p = 0 , p = 1 , 2 , . . . , N d_p = 0, p = 1, 2, ..., N dp=0,p=1,2,...,N
  • (2)对 M M M 个目标的每个目标函数 f m f_m fm:
    • 1)根据目标 f m f_m fm 的数值大小, 对每个个体排序;
    • 2)对每个个体 p p p, 计算 d p = d p + ( f m ( p + 1 ) − f m ( p − 1 ) ) d_p = d_p + (f_m(p+1) - f_m(p-1)) dp=dp+(fm(p+1)fm(p1))
      (其中第一个和最后一个个体拥挤距离设为无穷 d 1 = d N = ∞ d_1 = d_N = \infty d1=dN=)

选择时优先选择拥挤距离 d d d 大的.

精英策略选择算子

即保留父代优良个体直接进入子代, 以防止 Pareto 前沿的解丢失. 具体操作就可以直接把父代子代合并到一起进行非支配排序.

  • 13
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值