领域搜索算法之经典The Lin-Kernighan algorithm

news2024/11/26 3:34:58

领域搜索算法之经典The Lin-Kernighan algorithm

  • The Lin-Kernighan algorithm
  • 关于算法性能提升的约束
  • 参考文献

领域搜索算法是TSP问题中的三大经典搜索算法之一,另外两种分别是回路构造算法和组合算法。
而这篇文章要介绍的The Lin-Kernighan algorithm属于领域搜索算法。顾名思义,就是在已有的可行解的领域范围内进行搜索更好的解。
文章不是科普性的文章,专业性更强,开门见山。
LKH算法是对原有的3-opt算法的改进,速度更快,效率更高。
也是因为学习该算法,纠正了笔者之前对3-opt的错误理解,同时也作为学习笔记分享给大家
下面看算法的伪代码

The Lin-Kernighan algorithm

需要提前说明的是
问题背景是对称的TSP问题,图是无向完全图,距离矩阵是dij对称的
T是初始可行解,T=(t1,t2,t3,…,tn)
xi,表示T中边,yi表示不属于T中的边,i可取1-n
Gi表示,将xi替换成yi所得到的收益,即总花费是否减少
在这里插入图片描述

1.生成初始可行解T
2.置i=1,选择t1
3 选择x1为(t1,t2)且x1属于T,是T的边(注意算法中xi都属于T,yi都不属于T,xi是要从T中删除的边,
而yi是要加入T中以形成T‘的边)
这里的==选择==是穷举出所有可能的情况
4.同样选择y1不属于T,且G1>0(G1表示删去x1,加入y1所得到的收益为正,即花销减小了)
如果不满足则跳到12
5.令 i += 1
6.在T中选择xi=(t2i-1,t2i)且满足以下的条件
①t2i可以和t1直接相连,若是这样,就可直接构成新的T’,跳到2。②ys和以xi不相等
7.选择yi=(t2i,t2i+1)且不属于T,满足下面三个条件:
①Gi收益>0。②yi != xs(s为下标)。③xi+1是存在的
且又有,如果yi存在,跳到5
8.如果y2没有被穷举完,回到7
9.如果x2没有被穷举完,回到6
10.如果y1没有被穷举完,回到4
11.如果x1没有被穷举完,回到3
12.如果t1没有被穷举完,回到3
13.停止算法或者回到步骤1

以上是对算法的解释,下面对一些有疑难的地方进行重点输出自己的解释
该算法是逐步确定3-opt算法中的三天需要交换的边,顺序是x1,y1,x2,如果收益为正,则更新,否则找x1,y1,x3。如果收益为负,继续找x1,y2,x2,继续找x1,x2,y3.这是一层一层的像栈一样的顺序,所以才会有之后8-12的回溯操作,逐步回溯到问题的最开始,就像树的分支一样。
值得注意的是:LKH算法与原始的3-opt算法不一样的是,它参加交换的第三条边是不属于T的,即自己生成的。

随着时间和研究的推进,LKH的进一步改进也涌现出来,具体可以参看参考文献

关于算法性能提升的约束

用以上LKH算法寻优的过程中,还会遇到很多极端的情况,此时可以设置一些优化算法的约束,文献中用的语言比较抽象,笔者对其进行理解翻译和解释,当然还有其他约束有待发现和补充,要介绍的约束如下:
a 交换之后可以形成闭合回路
b T‘的收益为正
c 环路是闭合的(其实a和c很大一部分是重复的)
d 先前被取出的边不能加入,先前加入过的边不能被再删除
e yi=(t2i,t2i+1)的下一条边必须是和y2i的距离是最近的5个城市之一
f 对于i>=4时,xi中i下标较小的边不能再被拆分
g 寻优截止,当收益不再为正时
h 重新构成回路的时候,连接采用贪心的连接方法

参考文献

Helsgaun K. Version 1.2 (August 2001)[J].

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

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

相关文章

精华文稿|迈向统一的点云三维物体检测框架

分享嘉宾 | 杨泽同 文稿整理 | William 嘉宾介绍 Introduction 3D检测是在三维世界中去定位和分类不同的物体,与传统2D检测的区别在于它有一个深度信息。目前,大部分的工作是倾向于用点云去做三维检测,点云实际上是通过传感器去扫描出来的一…

Redis 的安装 + SpringBoot 集成 Redis

1.安装 Redis此处的 Redis 安装是针对 Linux 版本的安装, 因为 Redis 官方没有提供 Windows 版本, 只提供了 Linux 版本. 但是我们可以通过Windows 去远程连接 Redis.1.1 使用 yum 安装 Redis使用如下命令, 将 Redis 安装到 Linux 服务器:yum -y install redis1.2 启动 Redis使…

科技云报道:开源真的香,风险知多少?

科技云报道原创。 过去几年,开源界一片火热,开源软件技术已全面进军操作系统、云原生、人工智能、大数据、半导体、物联网等行业领域。 数据显示,我国超九成企业在使用或正计划使用开源技术。 与此同时,全球各大开源组织相继兴…

苹果手机专用蓝牙耳机有哪些?与iphone兼容性好的蓝牙耳机

蓝牙耳机摆脱了线缆的束缚,在地以各种方式轻松通话。自从蓝牙耳机问世以来,一直是行动商务族提升效率的好工具,苹果产品一直都是受欢迎的数码产品,下面推荐几款与iphone兼容性好的蓝牙耳机。 第一款:南卡小音舱蓝牙耳…

Springboot部署阿里云短信服务

一、阿里云短信模板配置(获取SignName[签名名称]、TemplateCode[模板CODE]) 1. 进入阿里云首页直接搜索短信服务,并点击国内消息进入国内文本短信管理页面 2. 选择签名管理点击添加签名 填写签名信息并提交 注:下面的签名来源如…

全栈自动化测试技术笔记(一):前期调研怎么做

昨天下午在家整理书架,把很多看完的书清理打包好,预约了公益捐赠机构上门回收。 整理的过程中无意翻出了几年前的工作记事本,里面记录了很多我刚开始做自动化和性能测试时的笔记。 虽然站在现在的角度来看,那个时候无论是技术细…

【Java 面试合集】描述下Objec类中常用的方法(未完待续中...)

描述下Objec类中常用的方法 1. 概述 首先我们要知道Object 类是所有的对象的基类,也就是所有的方法都是可以被重写的。 那么到底哪些方法是我们常用的方法呢??? cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringw…

你知道 GO 中什么情况会变量逃逸吗?

你知道 GO 中什么情况会变量逃逸吗?首先我们先来看看什么是变量逃逸 Go 语言将这个以前我们写 C/C 时候需要做的内存规划和分配,全部整合到了 GO 的编译器中,GO 中将这个称为 变量逃逸 GO 通过编译器分析代码的特征和代码的生命周期&#x…

在RT-Thread STM32F407平台下配置SPI flash为U盘

记录下SPI Flash U盘实现过程中踩过的坑,与您分享。前提条件是,需要先将SPI Flash 配置到elm fal文件系统,并挂载成功。如下图然后开始配置USB1,在CubeMX,选择SUB_OTG_FS2 选择USB Device3,确认USB时钟为48…

流程控制之循环

文章目录五、流程控制之循环5.1 步进循环语句for5.1.1 带列表的for循环语句5.1.2 不带列表的for循环语句5.1.3 类C风格的for循环语句5.2 while循环语句5.2.1 while循环读取文件5.2.2 while循环语句示例5.3 until循环语句5.4 select循环语句5.5 嵌套循环5.4 利用break和continue…

【八大数据排序法】堆积树排序法的图形理解和案例实现 | C++

第二十一章 堆积树排序法 目录 第二十一章 堆积树排序法 ●前言 ●认识排序 1.简要介绍 2.图形理解 3.算法分析 ●二、案例实现 1.案例一 ● 总结 前言 排序算法是我们在程序设计中经常见到和使用的一种算法,它主要是将一堆不规则的数据按照递增…

BinaryAI全新代码匹配模型BAI-2.0上线,“大模型”时代的安全实践

导语BinaryAI(https://www.binaryai.net)科恩实验室在2021年8月首次发布二进制安全智能分析平台—BinaryAI,BinaryAI可精准高效识别二进制文件的第三方组件及其版本号,旨在推动SCA(Software Composition Analysis&…

网络通信协议是什么?

网络通信基本模式 常见的通信模式有如下2种形式:Client-Server(CS) 、 Browser/Server(BS) 实现网络编程关键的三要素 IP地址:设备在网络中的地址,是唯一的标识。 端口:应用程序在设备中唯一的标识。 协议: 数据在网络中传输的…

7、单行函数

文章目录1 函数的理解1.1 什么是函数1.2 不同DBMS函数的差异1.3 MySQL的内置函数及分类2 数值函数2.1 基本函数2.2 角度与弧度互换函数2.3 三角函数2.4 指数与对数2.5 进制间的转换3 字符串函数4 日期和时间函数4.1 获取日期、时间4.2 日期与时间戳的转换4.3 获取月份、星期、星…

码上掘金实现电子木鱼

前言 前几天在朋友圈看到“敲电子木鱼”的视频,敲一下木鱼就提示“功德 1”,还带有敲击声和念经的声音,感觉挺有意思的。 心血来潮,捣鼓了一晚上,借助码上掘金实现了这个功能。 展示效果 素材 准备素材如下&#…

又一国产开源项目走向世界,百度RPC框架Apache bRPC正式成为ASF顶级项目

2023 年 1 月 26 日,Apache 软件基金会 (ASF) 官方正式宣布Apache bRPC 正式毕业,成为 Apache的顶级项目。 我听到这个消息是挺开心的,毕竟是又一款由国人主导的apche顶级项目,再次证明国内在开源界正在发挥越来越重要的作用。 …

Java的对象和类

名词解释 对象是指由类定义的数据结构,拥有属性和方法。它是运行时实例化的。 类是一种用于描述对象的模板,它定义了对象的属性和方法。类是一种类型,可以用于定义对象,并且可以对对象进行操作。 故事概要 小明是初学者想要学习…

JVM——7JVM调优实战及常量池详解

Arthas工具的使用 阿里巴巴开源的java诊断工具 下载插件 上传至linux环境 在linux跑起来的java项目,可以用Arthas进行查看 项目上线前的时候没问题,上线了就出问题 ,用来查看线上代码 jad 项目名 :反编译线上正在运行的代码 用…

SpringCloud-Netflix学习笔记10——Hystrix实现服务熔断

一、概述 1、分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免的失败! 2、服务雪崩 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B 和微服务C又…

雁过留痕,竟是病毒的痕迹?

凌恩生物全新升级宏病毒组分析流程;聚焦DNA,RNA病毒组研究热点;高灵敏度检测vOTUs;多软件整合,精准鉴定病毒序列;直击地化循环关键环节,助力宏病毒组科研成功!期刊:Micro…