一、问题描述
利用进化多目标优化算法NSGA-II求解多目标函数优化问题,选择三个多目标优化问题(包括函数表达式、决策变量取值范围)进行求解。本文选取两目标优化ZDT问题集中的三个问题,ZDT问题集均基于以下f1和f2的优化,其表达式如下,其中g(x)一般是收敛的。
minf1(x)
minf2(x)=g(x)h(f1(x),g(x))
选取的三个函数分别为:
ZDT1:
f1(x)g(x)h(f1,g)0≤xi=x1=1+n−19i=2∑nxi=1−f1/g
≤1i=1,…,n
ZDT2:
f1(x)g(x)h(f1,g)0≤xi=x1=1+n−19i=2∑nxi=1−(f1/g)2≤1i=1,…,n
ZDT4:
f1(x)=g(x)=h(f1,g)=1−f1/g
−10≤xi≤10x11+10(n−1)+∑i=2n(xi2−10cos(4πxi))0≤x1≤1i=2,…,n
二、解决思路和方案
NSGA-II算法适合应用于复杂的、多目标优化问题,其解决了NSGA的主要缺陷,实现快速、准确的搜索性能。NSGA的非支配排序的时间复杂度很大,在种群规模较大时排序的速度会很慢,而NSGA-II使用带精英策略的快速非支配排序,减小了时间复杂度,排序速度有大幅的提升。同时,精英策略保证找到的最优解不会被抛弃,提高了搜索性能。另一方面NSGA使用共享函数来使解分布均匀,共享函数方法在保持多样性的性能很大程度上依赖于所选择的共享参数;种群中的每个个体都要与其余的个体相比较,共享函数的复杂度很高,NSGA-II重新定义了拥挤距离来代替共享参数。NSGA-II算法步骤如下:
(1)首先,采用实数编码方法随机产生规模为50的初始种群pop,利用二元锦标赛方法(对pop中个体进行快速非支配排序和拥挤距离比较)产生父代种群P。
快速非支配排序结果的排序值越小,说明被被其余个体支配的次数越小,有着越大的概率被选择。拥挤距离的计算方法为该个体与相邻的两个个体组成的矩形的长宽和。在排序值相同的情况下,保留拥挤距离更大的个体。
(2)通过交叉、变异操作得到子代种群Q,将父代种群P与子代种群Q合并为R。
交叉采用模拟二进制交叉方法(SBX),交叉分布指数设置为1。变异采用单点变异,变异算子设置为0.1。
(3)利用精英策略产生下一代种群,即对R中个体进行快速非支配排序,同时对每个非支配层中的个体进行拥挤度计算,根据非支配关系以及个体的拥挤度选取合适的个体组成下一代种群。设置迭代次数为500。
本文使用python语言进行仿真实现,求解每个最优化函数的最优前端,将其可视化。
三、仿真结果及分析
(1)ZDT1 仿真结果
ZDT1经过500次迭代,最优前端由蓝点绘制而成,绿色的为理论参考集,可以看到求解结果和理论值基本吻合,且前端的分布比较均匀。其他函数同,其他函数便不进行解释,只进行结果展示。
图3.1 ZDT1最优前端
(2)ZDT2仿真结果
图3.2 ZDT2最优前端
(3)ZDT4 仿真结果
图3.3 ZDT4最优前端