Strength Pareto Evolutionary Algorithm (SPEA)
算法步骤:
Step1:初始化种群P(大小为N)和空的外部储备集P‘(大小为N’)
Step2:将P中的非支配解复制到P’
Sep3:如果P’大小超过N’,通过聚类的方法移除
Step4:计算P和P’中的所有个体适应值
Step5:从P+P’中进行选择操作,直到交配池填满
Step6:交配池中个体进行变异和交叉操作
Step7:是否达到最大迭代次数,if 停止, else Step2.
关于适应值分配
对于P’来说,fi=si=nN+1f_i=s_i=\frac{n}{N+1}fi=si=N+1n 其中si∈[0,1)s_i\in[0,1)si∈[0,1),n是P’中每个个体i支配P中的解的个数,加1保证取值在0到1区间内
对于P来说,fjf_jfj=1+∑i,j≺‾isi\sum_{i,j\underline{\prec}{i}}s_i∑i,j≺isi wherefj∈[1,N)where f_j\in[1,N)wherefj∈[1,N),sis_isi表示中种群P中的个体j被非支配解集P’中个体i支配。即P中所有支配j的个体。加1保证P’中的适应度均比P好(适应度值越小,具体有更高的保留到下一代的概率)。如下图所示,
文献中提到的聚类方法
当非支配解集增加导致选择压力减小,减慢搜索速度。
聚类步骤:
Step1:初始化聚类集合C,P’中的每个个体构成一个聚类。C=∪i{{i}}C=\cup_i\{\{i\}\}C=∪i{{i}}
Step2:if |C|≤\leq≤N’ (即簇的所有个体小于给定的最大值), go step5, else Step3.
Step3:计算不同簇间两个个体的距离
d=1∣c1∣⋅∣c2∣⋅∑i1∈c1,i2∈c2∣∣i1−i2∣∣d=\frac{1}{|c_1|\cdot|c_2|}\cdot\sum_{i_1\in{c_1},i_2\in{c_2}}\lvert\vert{i_1-i_2}\vert\vertd=∣c1∣⋅∣c2∣1⋅i1∈c1,i2∈c2∑∣∣i1−i2∣∣
Step4:将存在最小距离d的两个簇合并,go to Step2。
Step5:从每个簇中选择一个具有代表个体。(簇内某个个体到其他个体的平均距离最小的个体)作为代表解。
参考文献:Multiobjective Evolutionary Algorithms:A Comparative Case Study and the Strength Pareto Approach
算法升级SPEA2-----Improving the Strength Pareto Evolutionary Algorithm
SPEA缺点:
1.当archive中只有一个,多个个体具有相同适应值。选择压力减小,退化成随机搜索算法
2.聚类只用在储备集archive而为用在中种群所有个体中,丢失外部解集。
3.
与SPEA不同之处:
- 适应度计算
- 邻近估计,更加精准搜索
- 新的存档截断方法,保证边界值的保留
- archive大小固定
算法步骤:
NNN(种群大小),N‾(archive大小)\overline{N}(archive大小)N(archive大小),T(最大迭代次数)T(最大迭代次数)T(最大迭代次数)
Step1:初始化,种群P0P_0P0,空的archiveP‾0\overline{P}_0P0,t=0t=0t=0
Step2:计算适应度
Step3:环境选择:将PtP_tPt和P‾t\overline{P}_tPt中的所有非支配解集复制到P‾t+1\overline{P}_{t+1}Pt+1
如果P‾t+1\overline{P}_{t+1}Pt+1个数>N‾\overline{N}N,进行剪枝操作
否则,选择PtP_tPt和P‾t\overline{P}_tPt中的支配解集添加到P‾t+1\overline{P}_{t+1}Pt+1中,具体下方的环境选择
Step4:t>T的或者满足其他的终止条件,将A作为PT+1中非支配解所代表的决策变量集合输出
Step5:选择操作,对P‾t+1\overline{P}_{t+1}Pt+1进行锦标赛选择放入交配池
Step6:交配池中的个体进行重组和变异,,将结果存入集合P‾t+1\overline{P}_{t+1}Pt+1,迭代次数+1回到Step2.
适应度计算:
S(i)=∣{j∣j∈Pt+P‾t∧j≺i}∣S(i)=|\{j|j\in{P_t+\overline{P}_t}\land{}j\prec{i}\}|S(i)=∣{j∣j∈Pt+Pt∧j≺i}∣
R(i)=∑j∈Pt+P‾t,i≺jS(j)R(i)=\sum_{j\in{}P_t+\overline{P}_t,i\prec{j}}{S(j)}R(i)=∑j∈Pt+Pt,i≺jS(j)
其中s(i)s(i)s(i)表示个体i支配的个体数。R(i)表示原始适应值,表示个体i,支配i的每个个体j支配的所有个体数之和
当多个个体不相互支配时,R(i)难以实现其作用,因此,在SPEA2中。选k邻近估算密度。计算每个个体到储备集和种群中所有个体的距离,按照递增排序,选第k个作为σik\sigma^k_iσik
D(i)=1σik+2D(i)=\frac{1}{\sigma^k_i+2}D(i)=σik+21其中k=N+N‾k=\sqrt{N+\overline{N}}k=N+N,分母加2保证值(0,1)
F(i)=R(i)+D(i)F(i)=R(i)+D(i)F(i)=R(i)+D(i)
环境选择
(1)∣p‾t+1∣<∣N‾∣|\overline{p}_{t+1}|<|\overline{N}|∣pt+1∣<∣N∣,Pt+P‾tP_t+\overline{P}_tPt+Pt中所有个体根据适应度排序选择前N‾−∣p‾t+1∣\overline{N}-|\overline{p}_{t+1}|N−∣pt+1∣个
(2)∣p‾t+1∣>∣N‾∣|\overline{p}_{t+1}|>|\overline{N}|∣pt+1∣>∣N∣,其中j∈P‾t+1j\in\overline{P}_{t+1}j∈Pt+1.每次迭代中淘汰个体i,其中i满足
i≤dj: ⟺ ∀0<k<∣P‾t+1∣:σik=σjk∨∃0<k<∣P‾t+1∣:[(∀0<l<k:σil=σjl)∧σik<σjk]i\leq_dj:\iff \forall0<k<|\overline{P}_{t+1}|:\sigma_i^k=\sigma_j^k\lor\exist 0<k<|\overline{P}_{t+1}|:[(\forall 0<l<k:\sigma_i^l=\sigma_j^l)\land\sigma_i^k<\sigma_j^k]i≤dj:⟺∀0<k<∣Pt+1∣:σik=σjk∨∃0<k<∣Pt+1∣:[(∀0<l<k:σil=σjl)∧σik<σjk]其中σik\sigma_i^kσik
代表个体i与第k个邻居的距离,上面公式表示具有最小距离的个体被选中删除,如果有多个个体都是距离最小值,则考虑第二个最小距离值,以此类推.具体情况如下图:
参考文献:SPEA2: Improving the Strength Pareto Evolutionary Algorithm