编辑: jingluoshutong | 2017-08-26 |
Nnewi 为Pi 调整后的规模. 算法1 多种群竞争协调过程. 1) for i =
0 : nsubPop ?
1 do 2) 按照式(15)计算Pi 的新规模. 3) end for 4) 找到新规模中小于Nmin 的种群,将找到的种 群的新规模重新设置为Nmin. 5) 找到拥有最大新规模的种群Pk. 6) 计算Nnewi 的总和,记为total. 7) if total<
N do 8) Nnewk = Nnewk + (N ? total). 9) else if total>
N do 10) Nnewk = Nnewk ? (total ? N). 11) end if 12) for i =
0 : nsubPop ?
1 do 13) while当前规模Ni 大于新规模Nnewi do 14) 在Pi 中随机选择一个个体删除. 15) Ni = Ni ? 1. 16) end while 17) while当前规模Ni 小于新规模Nnewi do 18) 在Pi 中随机选择一个个体并且在EXA 中随机选择一个或两个个体作为父代,用Pi 的交叉 算子交叉产生新的个体,并添加到Pi. 19) Ni = Ni + 1. 20) end while 21) end for. 2.3 分类局部搜索 为了进一步提高EXA的质量,首先根据个体在 目标空间的距离将EXA分为nsubEXA 个子集(EXAi 第10期 王显鹏 等: 考虑安全约束的连退生产过程多目标操作优化
1743 表示第i个子集),在目标空间中相邻的个体被归到同 一个子外部档案集中;
然后在类内进行局部搜索. 在 目标空间距离相近的类内进行搜索,能加快算法的收 敛速度;
同时,目标空间中不同区域的类又能够保证 解的分散性. 算法2给出了类内局部搜索的过程. 算法2 类内局部搜索. 1) for i =
0 : nsubEXA ?
1 do 2) for j =
0 : |EXA|/nsubEXA ?
1 do 3) if EXAi 中包含的个体数等于1 do 4) 用EXAi 中的个体复制并产生一个新个 体. 5) 在[0, d ? 1]之间随机产生一个整数,将 新个体在该数对应的位置处的值设置为在其上下界 范围内随机产生的数. 6) else 7) 根据文献[13]中自适应选择交叉算子的 方法选择一个交叉算子. 8) 在EXAi 中随机选择不同的个体作为父 代,根据上一步选择的交叉算子进行交叉操作以产生 新个体. 9) end if 10) 评价新个体. 11) 将新个体添加到集合A. 12) end for 13) end for 14) 用集合A中的个体更新EXA. 2.4 算法流程 在MOEA-CMCC 中采用 Deb 等[10] 提出的方法 更新EXA. 另外,设置了EXA中的最大规模nEXA,一旦EXA的规模超过nEXA,便删除最拥挤的个体.算法 3给出了MOEA-CMCC的整体流程. 算法3 MOEA-CMCC的整体流程. 1) 设定迭代次数g = 0;
初始化每个种群Pi = {Xi0, Xi1,XiNi?1}, Ni = N/nsubPop 为每个种 群包含的个体数,并为每个种群分别分配一个不同的 交叉算子;
将初始种群中的非支配解存于EXA. 2) while没有达到终止条件do 3) if g 是nclass 的倍数并且EXA的个数>
80 do 4) 将当前EXA记录于tempEXA. 5) 将tempEXA分为nsubEXA 个子外部档案 集. 6) end if 7) 根据算法2进行类内局部搜索. 8) if g是ncomplete 的倍数do 9) 根据算法1进行多种群的竞争协调. 10) end if 11) for i =
0 : nsubPop ?
1 do 12) for i =
0 : Ni ?
1 do 13) 交叉操作:按照当前种群Pi 被分配的 交叉算子,用当前个体Xij 与在EXA中随机选择的一 个或两个个体作为父代进行交叉操作以产生新个体 Xnew. 14) Xij = Xnew. 15) 按2.1节中的方法对Xij 进行变异操 作. 16) 评价Xij 17) end for 18) 用Pi 更新外部档案集EXA. 19) end for 20) g = g + 1. 21) end while 22) 输出获得的可行的非支配解.
3 数值实验与分析 3.1 实验环境与参数设置 本文提出的MOEA-CMCC算法使用C++实现, 所有实验均是在 CPU 为Intel Core i5-3550, 内存 4.0 GB的个人电脑上进........