CRO和MOEAD的结合:
在理解了CRO 算法以及MOEAD算法之后,结合两者的特点进行合并是一个很难的问题,具体问题体现在CRO算法的种群是变动的,而MOEAD中种群数目是固定的,那么如何将CRO的精髓纳入到MOEAD中是一个很重要的知识点,以下是一些剖析:
就单目标CRO算法来说,往往参加进化的种群是变化的,这样的原因主要是化学反应中的两个基础反应:分解反应和合成反应。化学反应中的分子类(应用面向对象编程语言)包括分子结构(解),分子势能(目标函数值),分子动能(分子跳出局部最优解的能力),撞击数(分子参加撞击的数目),最小撞击数,最小势能对应的解结构,最小势能值,如下表格:
一般来说,将CRO 应用到多目标的时候最终的目的是得到一个近似最优解,即是目标函数值(势能值)最小的那个解,而为了得到这个近似最优解,往往对应种群的个数是否变化没有定性的要求,比如遗传算法中种群是固定的多个个体,而变领域搜索和模拟退火算法都是一个解的,所以说只要是最终得到的解是每一次迭代之后的解优化后的结果,那么最终会得到一个近似最优解。对CRO算法来说,分子结构中的最小结构体是该分子每一次化学反应后得到的新分子和旧反应物对比之后得到的目前在该分子下的最优解,当达到MaxIter之后种群个数可能会变成1(这种情况一般很少出现),也可能会大于或者等于甚至小于popsize,那么无论种群数变成了多少,总之种群中每个个体都得到了在该分子进化迭代后的最优解,那么对这些最终留下的种群的每个个体选择出最优的个体,那么既可以得到相对更优的近似最优解。综上可以看出,CRO是相对其他算法的优势就在于每一次都能留住最优的个体,那么最终的个体再次进行选优,那么近似最优解就会有很大的提高。当然有一点需要突出说明的是,CRO算法中的operator是根据问题而设立的,可能一个算子只适用用于某一个问题或者某一类问题,所以说合理的设计化学反应算子对于问题的求解具有很重要的作用。
那么,借助于MOEAD 提出的分解框架,将CRO算法修改以适用于多目标算法就存在两者之间的冲突,这个冲突主要就在于种群的变与不变上,那么如何改变这一个难点呢?试想一下,MOEAD里面的交叉和变异操作的目的是什么?是为了生成新解,即从该个体的邻域中选择出一个或者两个分子,并将这些操作产生的新解和原来的解进行比较,比较的依据就是标量函数值,那么回到CRO算法中的化学反应中来,就可以类比,化学反应算法中的四个基本化学反应的目的是什么,是为了得到新的解,那么得到的新的解,可能会出现新生成了一个新解或者说新生成了两个新解,那么这样类比的话就是相当于将化学反应类比为了交叉变异操作,事实上这也是一样的,只不过概念不同罢了,那么得到的新解在替换原来解的过程中,会发现分子的邻居数目可能会变化,那么这样来看的话就是说MOCRO里面的分子的邻居就相当于单目标的CRO中的种群,都是变化的,那么再将更新后的分子种群中的
每一个个体和该分子进行比较,即可更新该分子,而该分子的数目(即参加进化的个体是变化的,而最终得到的个体是不变的,这样就能得到popsize个帕累托前沿点,进而形成 PF)是固定的,只不过是每个分子的邻居数目变化了而已,这样就完美的解决了CRO和MOCROD之间的矛盾。