多目标遗传算法 (本文中是NSGA-II)
其实该种算法较为取巧
多目标问题难点在于需要让多个目标尽可能处于最优解,不像传统的优化算法一样,用一个目标函数的值是否符合需求即可。
多个目标的情况下衡量是否最优属于向量优化问题,需要比较向量件的大小。
多目标问题定义如下:
min f(x)=[f1(x),f2(x),…,fn(x)]
支配解与非支配解的概念
多目标问题种多个目标存在冲突时,可用“支配”的概念决定解的好坏
假设打游戏刷道具,有两种道具,四个npc,每个npc掉落的道具数量不尽相同
怪物种类 | 道具1 | 道具2 |
---|---|---|
A | 190 | 80 |
B | 170 | 85 |
C | 165 | 70 |
D | 160 | 22 |
两种道具都需要越多越好,因此我们发现A、B全面优于C、D,说明在道具1、道具2的目标上,{A,B}支配{C,D},同时{C,D}中C支配D,也就是说A,B,C可支配D
AB两种小怪掉落的道具各有千秋,不能单纯的说谁比谁绝对好,即谁支配谁,因此我们说AB两种解的情况为“非支配”情况。如果我们额能找到一组解,它们不互相支配,也不受其他解支配,我们称之为“pareto最优”解,在上面刷怪的粒子中,AB都属于pareto最优前沿
多目标优化的目的即找到一组小怪,它们掉落的道具各有优点,都是你刷怪的最好选择,这组小怪就被称为pareto最优解,一个最优的可行解集。
以下是较为官方的定义:
非支配解: 假设任何二解S1 及S2 对所有目标而言,S1均优于S2,则我们称S1 支配S2,若S1 的解没有被其他解所支配,则S1 称为非支配解(不受支配解),也称Pareto解(帕雷托解)
支配解: 若解S2的所有目标均劣于S1,则称S1优于S2,也称S1支配S2,S2为受支配解。
Pareto前沿面: 找到所有Pareto解之后,这些解组成的平面叫做Pareto前沿面(Non-dominated front)。在目标函数较多时,前沿面通常为超曲面。
多目标遗传
首先将一群具有多个目标的个体(解集,或者说线代里的向量形式)作为父代初始种群,在每一次迭代中,GA操作后合并父代于自带。通过非支配排序,我们将所有个体分不到不同的pareto最优前沿层次。然后根据不同层次的顺序从pareto最优前沿选择个体作为下一个种群。出于遗传算法中的“物种多样性”保护,还计算量“拥挤距离”。拥挤距离比较将算法各阶段的选择过程引向一致的前沿。
让我们再看看刷怪的例子
放过这几个小怪吧
怪物种类 | 道具1 | 道具2 | 属于pareto最优? | frontlevel | np | Sp |
---|---|---|---|---|---|---|
A | 190 | 80 | Y | 1 | 0 | CD |
B | 170 | 85 | Y | 1 | 0 | CD |
C | 165 | 70 | N | 2 | 1 | D |
D | 160 | 22 | N | 3 | 2 |
注释:frontlevel为最优等级,np即有多少解支配当前解,Sp表示当前解支配了哪些解
多目标遗传流程图
步骤描述:
步骤1:编码。遗传算法在进行搜索之前,将变量编成一个定长的编码——用二进制字符串来表示,这些字符串的不同组合,
便构成了搜索空间不同的搜索点。
步骤2:产生初始群体。随机产生N个字符串,每个字符串代表一个个体。
步骤3:按目标函数的个数分割子群体,对每个子群体进行如下操作:
1)计算目标函数值(此步调用ANSYs有限元程序,将ANSYS有限元程序得到的后处理结果传给MATLAB程序作为目标函数值);
2)计算每个个体的适应度,本文中采用线性排序法和选择压差为2估算适应度;
3)用随机遍历抽样方法在每个子种群中选择个体。
步骤4:将每个子种群中选择出的个体进行合并。
步骤5:交叉操作。本文中采用的是单点交叉操作。
步骤6:变异。对个体按给定的概率进行变异,形成新一代群体。
步骤7:将步骤6产生的个体合重复进行步骤3~ 步骤6的操作,直至完成规定的遗传迭代总次数。
遗传算法 化解码公式
f(x), x∈[lower_bound, upper_bound]
x = lower_bound + decimal(chromosome)×(upper_bound-lower_bound)/(2^chromosome_size-1)
其中:
lower_bound: 函数定义域的下限
upper_bound: 函数定义域的上限
chromosome_size: 染色体的长度
用这个公式可将个体染色体转化为在定义域范围内的解
nsga-II缺点
缺点之一就是选择压力太小了,应该增大选择压力
同时拥挤距离的计算是个很大的问题,过于复杂,虽然这也是遗传算法自身的缺点,但可以设法改进
再者就是应用于三维空间时有不足