多目标优化学习:NSGA-II

多目标遗传算法 (本文中是NSGA-II)

其实该种算法较为取巧
多目标问题难点在于需要让多个目标尽可能处于最优解,不像传统的优化算法一样,用一个目标函数的值是否符合需求即可。
多个目标的情况下衡量是否最优属于向量优化问题,需要比较向量件的大小。
多目标问题定义如下:
min f(x)=[f1(x),f2(x),…,fn(x)]

支配解与非支配解的概念

多目标问题种多个目标存在冲突时,可用“支配”的概念决定解的好坏
假设打游戏刷道具,有两种道具,四个npc,每个npc掉落的道具数量不尽相同

怪物种类道具1道具2
A19080
B17085
C16570
D16022

两种道具都需要越多越好,因此我们发现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最优?frontlevelnpSp
A19080Y10CD
B17085Y10CD
C16570N21D
D16022N32

注释: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缺点

缺点之一就是选择压力太小了,应该增大选择压力
同时拥挤距离的计算是个很大的问题,过于复杂,虽然这也是遗传算法自身的缺点,但可以设法改进
再者就是应用于三维空间时有不足

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值