宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

SPEA以及SPEA2也算是和NSGAII 可以说得上并列的有名的多目标问题的优化算法了。并且NSGAII,SPEA,以及SPEA2会经常拿来和自己的算法来做对比,在写论文的时候。今天特意复习了下SPEA,下面总结一下这个算法,主要是描述一下流程,如果到最后还有啥没说全的就再补充下:
1:首先初始化一个archive的集合P1,以及一个常用的population的集合P。设置P1的大小是N1,P的大小是N。初始的时候P1是空的,而P是已经初始化好的种群个体。
2:对P1进行评价,选出来里面的pareto front为1(下面用PF1来代替了)的个体,copy到P1中,如果PF1的数量大于N1的话,这个接下来再说,目前假定PF1的数量小于N1。
3:此时P1中也有了个体,那么先给P1中的个体分配fitness,分配的思路是 f(i)=SiN+1 . i 就是P1中的个体,Si代表它在P中支配的个体的数量,然后再除以 N+1 保证这个值小于1。
4:接着再给P中的个体安排fitness,对于P中的个体来说 f(i)=1+∑S(j) 。 j 是代表在P1中支配i的个体。所以,在P中被别人支配的越多的个体,它的fitness就越大啊
5:接着再说下再进行crossover,有个选择parent的过程,这里也是用的tournament的方法,那么选择的依据是什么?就是合并P和P1,从里面选择fitness最小的。这个地方和NSGAII不同的就是没涉及到crowding。
6:再说下在步骤2中,如果PF1的数量大于N1的话,就选择crowding最大的(这个crowding和NSGAII中的不一样,此时用的是一种CLUSTERING的方法,这里不再多说了)。并且在每次从PF1中copy到P1的时候,还是要重新计算下,此时都在PF1中才行,不满足的要删除掉。