基于NSGA-II算法的多目标多旅行商问题建模求解

news2024/11/24 12:43:43

基于NSGA-II算法的多目标多旅行商问题建模求解

  • 1引言
  • 2多目标多旅行商问题
  • 3多目标遗传算法NSGA-II
    • 3.1 编码
    • 3.2选择(锦标赛选择)
    • 3.3 交叉(顺序交叉)
    • 3.4 变异
    • 3.5快速非支配排序
      • 3.5.1符号说明
      • 3.5.2快速非支配排序[^7][^6]
      • 3.5.3快速非支配排序举例[^4]
    • 3.6拥挤比较算子
    • 3.7精英策略
    • 3.8 NSGA-II算法流程
  • 参考

1引言

NSGA-II算法学习过程中涉及到了较多内容,除了遗传算法中,核心步骤选择交叉变异外,又融入了快速非支配排序拥挤度计算等内容。

在GA中,选择通常采用轮盘赌选择策略,为了加快收敛保留全局最优解,在采用轮盘赌的同时,通常引入精英保留(精英策略)提升算法性能。对于交叉变异,通常在原染色体上进行,生成子代染色后,直接替换掉原染色体。

在NSGA-II中,每次迭代过程中,为了保证多样性,探索解空间,选择(采用的锦标赛选择)、交叉变异产生子代种群后不会进行替换。此时有原种群P,及选择交叉变异后得到子代种群Q,P、Q种群规模均为N,合并P和Q为2N的新种群R。精英策略则通过快速非支配排序拥挤度计算保留种群R种的精英解,淘汰差解,得到新父代种群P’。

2多目标多旅行商问题

对于多目标多旅行商问题:

  • 若旅行商数量不固定,相关文献1有以min{f1=最小化旅行商数量,f2=各旅行商之间行驶距离平衡}为目标。求解方法为:采用聚类方法,采用聚类方法确定旅行商数量,转化为旅行商固定的情况,此时仅优化目标f2即可。由于采用了聚类方法,导致第一目标函数旅行商数量固定,无需再使用多目标算法。
  • 若旅行商数量固定,有的文献2以min{f1=所有旅行商行驶距离之和最小,f2=各旅行商之间行驶距离平衡}。求解方法可采用智能优化算法,如NSGA-II,编码方式为两层编码(两部分编码)2,第一层编码为不包含分隔符的传统 TSP 问题遗传编码,第二层编码用于记录该方案中在何处分隔,1 个分隔符位表示有 2 个旅行商。详见第3章。

本文研究的场景为旅行商数量固定的情况。问题描述为:
𝑚个推销员从同一座中心城市出发,访问其中一定数量的城市并且每座城市只能被某一个推销员访问一次,最后返回到中心城市,通常这种问题模型被称之为单仓库多旅行商问题(Single-Depot Multiple Travelling Salesman Problem, SD-MTSP);
在这里插入图片描述
其中,等式(2-1)表示需要同时最小化两个目标函数。等式(2-2)表示所有推销员的总路程,等式(2-3)代表着推销员中最长路线与最短路线的差值(平衡度)。等式(2-5)与等式(2-6)的含义是编号为 0 的中心城市的入度和出度都必须为𝑚,即代表𝑚个推销员均从中心城市出发并且完成行程后都回到了中心城市。等式(2-7)与等式(2-8)则表示除中心城市外的其他所有城市的出度和入度均为 1,即每个城市能且只能被推销员中的一个人访问。

3多目标遗传算法NSGA-II

3.1 编码

设一种多旅行商问题的城市个数是 10,推销员人数为 3,在编码的时候,将城市按照自然数 0,1,…,9 进行编号,其中 0 为中心城市,即所有推销员的起始和终止点。图 3.1 展示出了上述编码方式下的一种解方案,其中染色体上的第一部分为 10 个自然数的一种排列,而第二部分则将第一部分分割成了三份,分别表示三个推销员所需要拜访的城市,其排列顺序就是拜访顺序,即三个推销员的路径分别为:0->1->2->3->0,0->4->5->6->7->0,0->8->9->0。设城市的位置关系如图 3.2
左所示,则图 3.1 的个体所代表的解如图 3.2 右所示。
在这里插入图片描述

3.2选择(锦标赛选择)

锦标赛方法选择策略每次从种群中取出一定数量个体(放回抽样),然后选择其中最好的一个进入子代种群。重复该操作,直到新的种群规模达到原来的种群规模。具体的操作步骤如下:

  1. 确定每次选择的个体数量。一般选择2个(二元锦标赛)。
  2. 从种群中随机选择个个体(每个个体入选概率相同) 构成组,根据每个个体的适应度值,选择其中适应度值最好的个体进入子代种群。
  3. 重复步骤2,得到的个体构成新一代种群。

3.3 交叉(顺序交叉)

采用顺序交叉3,本文编码为两部分编码,对第一部分进行顺序交叉,第二部分保持不变。在两个父代染色体中随机选择起始和结束位置,将父代染色体1该区域内的基因复制到子代1相同位置上,再在父代染色体2上将子代1中缺少的基因按照顺序填入。具体步骤如下:

  1. 随机选择一对染色体(父代)中几个基因的起止位置(两染色体被选位置相同)。

  2. 生成一个子代,并保证子代中被选中的基因的位置与父代相同。

  3. 先找出第一步选中的基因在另一个父代中的位置,再将其余基因按顺序放入上一步生成的子代中。

3.4 变异

采用2-opt作为变异方式,只对第一部分。

3.5快速非支配排序

3.5.1符号说明

  1. 支配计数 n p n_p np,即支配解p的解的数量。
  2. Sp:解p支配的解的集合。
  3. P种群,p个体索引
  4. F i F_i Fi第i层非支配解集
  5. p_{rank}个体p的帕累托层级

3.5.2快速非支配排序45

在这里插入图片描述

3.5.3快速非支配排序举例6

在这里插入图片描述
最小化双目标问题,如上图所示,对解c而言,解c被a,b两个解支配,所以 n c n_c nc为2。对解b而言,解b支配c,d,e,所以 S b = { c , d , e } S_b=\{c,d,e\} Sb={c,d,e}

3.6拥挤比较算子

密度估计:对同一前沿面的解按照目标函数值排序,计算每个解在该目标函数下两侧解的目标函数归一化差值,然后将所有目标函数下的分量累加作为拥挤系数。
在这里插入图片描述
从几何角度理解拥挤距离,以两个目标函数为例,下图中黑点和白点分别为两个非支配前沿,对于解 i i i,从与 i i i在同一非支配前沿中选择与解 i i i最相近的两个点 i − 1 i-1 i1 i + 1 i+1 i+1为顶点组成一个长方形(cuboid),拥挤距离即为长方形周长。
在这里插入图片描述

3.7精英策略

精英保留策略,核心思想是把群体在进化过程中迄今出现的最好个体不进行遗传操作而直接复制到下一代中,理论上证明了具有精英保留的标准遗传算法是全局收敛的,具体步骤如下:

  1. 将父代种群P和子代种群Q合并,组成种群规模大小为2N的新种群R
  2. 将R进行非支配排序,并计算每个个体的拥挤度。
  3. 将非支配排序得到的非支配集F1,放到新父代种群P’中。若此时此时P’种群规模<N,则继续添加非支配集F2。当种群规模超出N时,则采用拥挤度比较算子添加个体至P ′ ^\prime ,使P ′ ^\prime 种群规模达到N

在这里插入图片描述

3.8 NSGA-II算法流程

step1:初始化种群P,设置最大迭代次数G,令当前迭代次数g=1。
step2:计算目标函数值,进行快速非支配排序。
step3:对P进行选择、交叉、变异,生成子代种群Q
step4:合并PQ得到R,对R进行快速非支配排序,拥挤度计算,生成P’。【精英选择策略
step5:对新父代种群进行选择(只采用锦标赛选择方法7 ,基于序值拥挤度距离进行选择)、交叉、变异,生成新子代种群Q’,令P:=P’Q:=Q’
step6:判断G>g?,是则转step4;否则结束。

参考


  1. 胡士娟,鲁海燕,向蕾等.求解MMTSP的模糊聚类单亲遗传算法[J].计算机科学,2020,47(06):219-224. ↩︎

  2. 杨帅. 求解多旅行商问题的进化多目标优化和决策算法研究[D/OL]. 武汉科技大学, 2020. https://kns.cnki.net/KCMS/detail/detail.aspx?dbcode=CMFD&dbname=CMFD202101&filename=1020105561.nh&v=. ↩︎ ↩︎

  3. 遗传算法一些交叉算子 ↩︎

  4. NNSGA-II:快速精英多目标遗传算法(论文+代码解读) ↩︎

  5. NSGA II算法详解 ↩︎

  6. 多目标优化经典算法——NSGA-II ↩︎

  7. 韩亚星. B2B模式下果蔬产品同城配送路径优化研究[D/OL]. 大连海事大学, 2019. https://kns.cnki.net/KCMS/detail/detail.aspx?dbcode=CMFD&dbname=CMFD202001&filename=1020016871.nh&v=. ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/685241.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言王国探险记之变量的前世今生

王国探险记系列 文章目录&#xff08;2&#xff09; 前言 一、变量是什么&#xff1f; 二、变量如何定义&#xff1f; 注意&#xff1a;当你赋值小数的时候&#xff0c;编译器会自然认为你是一个double类型的&#xff0c;所以你在使用float类型的时候要在小数后面加个f&…

Go语言基础:基本数据类型

一、整型 1. 整型分类 整型分为以下两个大类&#xff1a; &#xff08;1&#xff09;按长度分为&#xff1a;int8、int16、int32、int64 &#xff08;2&#xff09;对应的无符号整型&#xff1a;uint8、uint16、uint32、uint64 其中&#xff0c;uint8就是我们熟知的byte型&…

关于spring mvc 的ViewResolver的问题

今天在一个项目使用springboot的spring mvc的时候遇到了一个问题&#xff1a;在controller中使用返回字符串redirect:/xxxx/xxx进行重定向失败&#xff0c;出现了无法解析redirect:/xxxx/xxx。 找了半天才发现视图解析器ViewResolver中没有添加InternalResourceViewResolver 项…

微服务(总): eureka与nacos的区别及心跳配置修改

目录 简介: 1. nacos与eureka的区别 1.0 功能方面 1.1 连接方式不同 1.2 服务异常后多久剔除 1.2.1 eureka介绍: 1.2.2 nacos介绍: 1.3 操作的方式 1.3.1 nacos 专门的可视化界面(如图) 1.3.2 eureka 比较简约(如图) 1.4 保护机制介绍 1.4.1 CAP原则简介:(取自百…

Redis入门(5)-set

Redis中set的元素具有无序性与不可重复性 1.sadd key member[member] 添加元素&#xff0c;若元素存在返回0若不存在则添加 sadd DB mysql oracle sadd DB mysql sadd DB db22.smembers key 查看set中所有元素 smembers DB3.sismember key member 判断元素在set中是否存…

好书精读】网络是怎样连接的 —— 信号在网线和集线器中传输

&#xff08; 该图由我使用 AI 绘制 &#xff09; 目录 每个包都是独立传输的 防止网线中的信号衰减很重要 “双绞”是为了抑制噪声 集线器将信号发往所有线路 每个包都是独立传输的 从计算机发送出来的网络包会通过集线器 、 路由器等设备被转发 &#xff0c; 最 终到达…

智安网络|弹性网络与网络安全:保卫数字世界的关键联结

随着数字化时代的来临&#xff0c;弹性网络和网络安全成为了信息交流和数据传输的关键基础。弹性网络为用户提供了高度可靠、灵活可扩展和强大的网络基础设施&#xff0c;而网络安全则旨在保护这个网络生态系统不受威胁。 弹性网络的定义与重要性 弹性网络的重要性&#xff1a…

【Leetcode60天带刷】day36——56. 合并区间,738.单调递增的数字

​ 题目&#xff1a; 56. 合并区间 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a;…

python基础学习9【MinMaxScale()、StandScale()、DecimalScale、transformer】

标准化数据【离差标准化数据、标准差标准化数据、小数定标标准化数据】 离差标准化数据&#xff1a; 数据的整体分布情况并不会随离差标准化而发生改变&#xff0c;原先取值较大的数据&#xff0c;在做完离差标准化后的值依旧较大&#xff1b; 对原始数据的一种线性变换&…

模拟电路系列分享-运放的关键参数

目录 概要 整体架构流程 技术名词解释 1.输入失调电压 2.输入失调电压对电路的影响 3.数据手册中关于失调电压的描述 技术细节 小结&#xff1a; 概要 提示&#xff1a;这里可以添加技术概要 实际运放与理想运放具有很多差别。理想运放就像一个十全十美的人&#xff0…

C语言王国探险记之数据类型

王国探险记系列 文章目录&#xff08;1&#xff09; 目录 1&#xff0c;写程序和数据类型有啥关系&#xff1f; 2.C语言里面都有啥数据类型&#xff1f; 1&#xff0c;数据类型的介绍 2&#xff0c;为什么浮点数描述的是小数 3&#xff0c;区分程序中的数字那些是整型&am…

02_深入浅出vite(二)--vue3全家桶+ts构建后管系统

安装基础包 npm create vitelatest # 这里选择的是VueTypescript的组合 cd vue-admin npm install# 先安装基础包 npm install vue-router4 npm i pinia npm i axios npm install sass --save-dev npm install element-plus --save npm install element-plus/icons-vue npm in…

SQL Server数据库 -- 表的基础查询

文章目录 一、单表查询基本结构二、单表查询结构语法 select聚合函数where模糊查询order bygroup byhaving三、多表查询基本结构四、多表查询结构语法 内连接自连接外连接五、总结 前言 学习了数据库&#xff0c;在以后公司等地方&#xff0c;你可能不会用到创建数据库或者表格…

LeetCode 双周赛 107(2023/06/24)滑动窗口与离散化

本文已收录到 AndroidFamily&#xff0c;技术和职场问题&#xff0c;请关注公众号 [彭旭锐] 和 [BaguTree Pro] 知识星球提问。 往期回顾&#xff1a;LeetCode 单周赛第 348 场 数位 DP 模版学会了吗&#xff1f; T1. 最大字符串配对数目&#xff08;Easy&#xff09; 标签&…

FlutterUnit 已上架 iOS,暗色模式全面支持

theme: cyanosis 一、FlutterUnit 的全平台支持 FlutterUnit 是我的一个开源项目&#xff0c;基于 Flutter 构建的一个 全平台 应用程序。现在很荣幸地宣布: FlutterUnit 已经上架 iOS 的 App Store &#xff0c;自此主流的几大平台均已提供体验。 项目地址: https://github.co…

Chrome Edge Firefox Safari 如何清除 DNS 缓存

Chrome Edge Firefox Safari 如何清除 DNS 缓存 如何清除浏览器的 DNS 缓存 (Chrome, Firefox, Safari) Chrome Chromium Edge Firefox Safari clear DNS Cache, flush DNS cache 请访问原文链接&#xff1a;https://sysin.org/blog/clear-browser-dns-cache/&#xff0c;查…

前端Vue仿京东天猫商品属性选择器自定义单选按钮

前端Vue仿京东天猫商品属性选择器自定义单选按钮&#xff0c; 下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13176 效果图如下&#xff1a; # cc-radioBtnBox #### 使用方法 使用方法 <!-- attrArr&#xff1a;属性数据 clic…

改进YOLOv5/YOLOv8:复现结合即插即用 | 高效多尺度注意力(EMA),模块成为YOLOv5改进的小帮手

高效多尺度注意力(EMA) 论文介绍简介EMA模块图像分类实验目标检测实验yolov5加入方法yolo注册yaml文件3563.pdf](https://arxiv.org/ftp/arxiv/papers/2305/2305.13563.pdf) 论文介绍 通道或空间的显著有效性 注意机制对产生更多可辨识的 特征表示的显著效果,在各种计算机视…

深度学习-数据增强与扩充

数据增强可以说是数据驱动下的深度学习必经之路,掌握数据,相当于掌握当下主流方向的自动驾驶的命脉,是人工智能不可或缺的资源。本文将介绍最新的利用大模型扩充数据的方式! 先看下变色效果: 左褐色背景图 为原图,右侧为处理后的图! ​ AI day也在自动标注数据方面,着重…

软件测试技术-期末理论知识复习速成

第一章 软件测试概述 什么是软件缺陷&#xff0c;发生软件缺陷的原因是什么&#xff1f; 答&#xff1a;软件缺陷指的是在软件开发过程中出现的错误、缺陷或故障&#xff0c;导致软件无法按照预期的功能运行或者产生错误的结果。 导致软件缺陷的原因可能有&#xff1a;&#…