Matlab从入门到精通(3)——多目标人工鱼群算法

多目标优化问题是优化问题重要分支之一,同样是是相当大一部分科研问题中的主要问题之一,常用的方法包括

  • 穷举法(理论可以找到最优解集合,就是太慢了,一般没人用这种)
  • 解析式推导最优解(大部分情况下推不出来或者解析式很复杂无法应用)
  • 智能优化算法(可以适用于各类优化问题,包括凸和非凸的,良好设计的情况下可以取得较好的效果)

这一章首先介绍智能优化算法中的多目标优化算法–多目标人工鱼群算法。



一、 人工鱼群算法的寻优原理

人工鱼群算法在寻优的过程中,每个都有觅食、聚群,追尾、随机移动四种行为,通过这四种行为可以使人工鱼跳出局部最优解:

  1. 聚群行为能够促使少出陷于局部最优解的人工鱼趋向全局最优解的人工鱼方向聚集,从而逃出局部最优解;
  2. 觅食行为中重复次数较少时,为人工鱼提供了随机移动的机会,从而可能跳出局部最优解;
  3. 随机步长使得人工鱼在前往局部最优解的途中,有可能转向全局最优解;
  4. 拥挤度因子限制了聚群的规模,使得人工鱼能够更广泛的寻优;
  5. 追尾行为加快了人工鱼向更优状态游动。

通过以上几种行为,鱼群会逐渐向最优解靠近,对于各种复杂的情况都能得到极好的优化效果。

Matlab从入门到精通(3)——多目标人工鱼群算法

Matlab从入门到精通(3)——多目标人工鱼群算法


二、多目标 人工鱼群算法实现的步骤

多目标人工鱼群算法相比单目标鱼群算法主要多了一个非支配排序的过程。

  • 初始化设置,包括种群规模N、每条人工鱼的初始位置、人工鱼的视野Visual、步长step、拥挤度因子δ、重复次数Trynumber;
  • 计算初始鱼群各个体的多目标函数和适应度函数,取最优人工鱼状态及其值赋予给公告牌;
  • 对每个个体进行评价,对其要执行的行为进行选择,包括觅食Pray、聚群Swarm、追尾Follow和评价行为;
  • 执行人工鱼的行为,更新自己,生成新鱼群;
  • 计算鱼群中各个鱼群得的多目标函数,执行非支配排序并更新外部集(存储所有的 Pareto解)
  • 若某个体适应度函数优于公告牌,则将公告牌更新为该个体;
  • 当公告牌上最优解达到满意误差界内或者达到迭代次数上限时算法结束,否则转步骤3。

多目标下的四种行为描述:

Matlab从入门到精通(3)——多目标人工鱼群算法

聚群Swarm行为:人工鱼探索当前邻居内的伙伴数量,并计算伙伴的中心位置,若中心位置的目标函数支配当前位置的目标函数,并且不是很拥挤,则当前位置向中心位置移动一步,否则执行觅食行为。此时需遵守两条规则:一是尽量向邻近伙伴的中心移动,二是避免过分拥挤。

追尾Follow行为: 人工鱼探索周围邻居鱼的最优位置,当最优位置的目标函数值支配当前位置的目标函数值,并且不是很拥挤,则当前位置向最优邻居鱼移动一步,否则执行觅食行为。

觅食Pray行为:人工鱼在当前解基础上随机进行选定一个方向单位移动,计算移动后解的多目标函数,并判断是该解支配当前解,则往该方向移动随机距离,否则重新选择方向进行尝试。多次尝试觅食失败后进行随机移动。

随机移动行为:人工鱼在当前解基础上随机进行选定一个方向随机移动。


三、结果演示

接下来我们用各种多目标测试测试函数来测试我们的多目标人工鱼群算法

首先是双目标测试函数,以下优化中为了体现性能优越,优化向量都是30维,大部分多目标优化算法维度低的时候还行,维度一高复杂度几何倍上涨就彻底歇菜,从下面结果来看人工鱼群还可以。

ZDT1
Matlab从入门到精通(3)——多目标人工鱼群算法

Matlab从入门到精通(3)——多目标人工鱼群算法

ZDT2
Matlab从入门到精通(3)——多目标人工鱼群算法


Matlab从入门到精通(3)——多目标人工鱼群算法

ZDT3
Matlab从入门到精通(3)——多目标人工鱼群算法

Matlab从入门到精通(3)——多目标人工鱼群算法

ZDT4
Matlab从入门到精通(3)——多目标人工鱼群算法

Matlab从入门到精通(3)——多目标人工鱼群算法

ZDT6
Matlab从入门到精通(3)——多目标人工鱼群算法

Matlab从入门到精通(3)——多目标人工鱼群算法

往期内容:


分享到:


相關文章: