基于DEAP库的python进化算法-7.多目标遗传算法NSGA-II

本文介绍了多目标优化问题及其特点,重点解析了NSGA-II算法,包括快速非支配排序、拥挤距离计算和精英保存策略,并展示了在DEAP库中的实现。NSGA-II通过这些策略解决非支配排序的复杂度和保持解的多样性,有效地求解多目标优化问题。
摘要由CSDN通过智能技术生成

一.多目标优化简介

1.多目标优化问题

在很多实际工程问题中,我们的优化目标不止一个,而是对多个目标函数求一个综合最优解。例如在物流配送问题中,不仅要求配送路径最短,还可能需要参与运输车辆最少等。
在这里插入图片描述
多目标优化问题通常有如下特点:

  • 各目标函数往往相互冲突,无法同时取到最优解。这种冲突使得解的搜索变得更加复杂;
  • 各目标函数的单位不同,不能简单比较。因此多目标优化问题的合理解集通常是Pareto最优解。
2.多目标优化求解思路

对于多目标优化问题,传统方法是将原问题通过加权方式变换为单目标优化问题,进而求得最优解。该方法有两大问题:

  • 权重的量化设定困难;
  • 多目标优化问题的求解结果是包含一组非支配解的解集,用这种方法每次只能求得一个不同解(运气好的话),要求解具有足够多样性的Pareto最优解集非常困难

遗传算法具有多点多方向搜索的特征,在一次搜索中可以得到多个Pareto最优解,因此更适合求解多目标优化问题。

而当前用于求解多目标优化问题的遗传算法一般有两种思路:

  • Pareto排序评价方法:其思想是构造基于解的优劣关系排序的适应值函数;在子代中更多保留支配解,从而在迭代一定次数后获得Pareto前沿。最经典的是Glodberg提出的Pareto ranking genetic algorithm,另外我们这里介绍的NSGA-II也是基于Pareto排序评价的方法。
  • 多目标函数加权方法:给多目标函数加以各种权重,转化为单目标优化问题;相对于传统方法的固定权重,这类方法通常会在遗传操作前以一定规律生成权重,指导个体的多方向搜索。代表性的算法有Ishibuchi的random weight GA和Gen-Cheng的adaptive weight GA等。

二.NSGA-II算法解析

NSGA-II(nondominated sorting genetic algorithm II)是2002年Deb教授提出的NSGA的改进型,这个算法主要解决了第一版NSGA的三个痛点:

  • 非支配排序的高计算复杂度
  • 共享参数难以确定
  • 缺少保存精英策略

针对这三个问题,在NSGA-II中,Deb提出了快速非支配排序算子,引入了保存精英策略,并用“拥挤距离”(crowding distance)替代了共享(sharing)。

在介绍NSGA-II的整体流程前,我们需要先了解快速非支配排序与拥挤距离的定义。

1.快速非支配排序(Fast non-dominated sort)

解的支配关系与Pareto最优解
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
快速非支配排序步骤:
快速非支配排序就是将解集分解为不同次序的Pareto前沿的过程。
它可以描述为:

  1. 为每个解p分配两个关键量:支配p的解个数n_p以及被p支配的解集S_p;
  2. 设置i=1,将n_p=0的个体归入F_i;
  3. 对于F_i中的个体,遍历每个解p的S_p,将其中每个解的n_p减1;
  4. i+=1,将n_p=0的解归入F_i;
  5. 重复3、4,直到解集中所有个体都被归入某一个F_i。
    在这里插入图片描述
    DEAP的实现
    DEAP内置了实现快速非支配排序操作的函数
tools.emo.sortNondominated(individuals, k, first_front_only=False)
参数:
individual:被排序的个体列表
k:需要选择的个体数目,注意这里不一定返回正好k个个体,需要看pareto前沿的个体个数
	假设设置k=100,而selectedPop + len(Front[i-1]) <100,返回的个体数是
	selectedPop+len(Front[i-1]) + len(Front[i]),应该是一个大于100的值。
first_front_only:如果设置为True,则对次序为1的前沿排序之后就返回

返回:
	Pareto前沿的列表
2.拥挤距离计算(Crowding distance assignment)

拥挤距离的定义
在NSGA-II中,为了衡量在同一个前沿中各个解质量的优劣,作者为每个解分配了一个拥挤距离,其背后的思想是让求得的Pareto最优解在objective space中尽量分散,也就有更大可能让解在Pareto最优前沿上均匀分布。
在这里插入图片描述
DEAP实现
DEAP中内置了计算拥挤距离的函数

tools.emo.assignCrowdingDist(individuals)

参数:
	individual:用来计算拥挤距离的个体列表
返回:
	没有返回值,拥挤距离保存在传入的individuals中的每个个体的individual.fitness.crowding_dist属性中
3.精英保存策略(Elitism)

比较操作
根据快速非支配排序和拥挤距离计算的结果,对族群中的个体进行排序:
在这里插入图片描述

  • 8
    点赞
  • 119
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值