最近在学习MOEA/D算法,在学习过程中学习到一些东西,在此做一下记录。
- MOEA/D算法是将多目标优化问题转化成一系列小的单目标优化问题,然后利用一定数量的相邻问题的信息使用进化算法对这些子问题进行优化,进行N次迭代后,最后得到一组Pareto解。
- 算法详解:
- 输入:
- 要求解的多目标问题MOP
- 算法终止条件
- 子问题数目
- 均匀分布的权重向量
- 每个权重向量的邻居个数T
- 输出:EP
- 步骤
- 初始化
- 设置EP为空
- 使用欧氏距离计算找到每个元素的T个近邻
- 通过具体问题的解决方法产生一个初始种群
- 通过基于问题的特定方法产生当前最优解Z
- 更新:对于每个子问题,循环做以下处理:
- 从T个近邻中随机取2个元素,运用遗传算法产生一个新解y
- 对新解运用基于测试问题的修复的改进计算得到一个新的解y'
- 若新解y'要由于原解,则更新之。(将原EP中被新解y'支配的元素移除,将新解y'添加其中)
- 终止:当达到终止条件之后,终止程序,输出EP
- 初始化
- 输入:
- 优点:
- 由于多问题分解的操作的存在,该方法在保持解的分布性方面有很大的优势
- 采用分析相邻问题的信息来优化,能避免陷入局部最优
- 降低了传统的MOEA多样性保持和适应度保持的难度
- 可将目标归一化技术纳入MOEA/D中来处理不同比例的目标
- 自己理解的小tip:
- MOEA/D使用均匀的权重λ,目的是为了能够最终在每个λ上找到一个问题的解,只要算法运行迭代的次数足够,算法就能够产生一个均匀分布的解集。