关于λ-optimal的初始化解算法在(元)启发式中的应用

news2025/2/21 23:31:14

关于λ-optimal算法在启发式中初始化解的应用

  • TSP问题介绍
  • λ-optimal
    • 定理与定义
    • 算法描述与伪代码
    • 算法的优化
  • 参考文献

这里讨论组合优化中初始解的生成问题。组合优化问题,很多情况下,解的生成是随机的或者是采用某种直观上满足题意的初始化方法,要知道初始解对于找到局部最优乃至是最好的解是极其重要的,就好比条条大路通罗马,或者你直接就出生在罗马。接下来要说明的算法是在进行各种不同的启发式算法求解之前,对初始解进行优化的算法且比较通用。
在实际问题中,目前笔者暂时遇到的可以使用的地方一个是用于解的生成,还有一个地方就是在启发式算法迭代求解的过程中,在解的再生成中应用这种λ-optimal算法的思想。
描述问题或者算法要有头有尾,先说明问题,之后算法的描述建立在此之上,也就更加通俗易懂。

TSP问题介绍

旅行推销员问题可以这样表述:“要求推销员在给定的n个城市中访问一次且仅访问一次,从任意一个城市出发,返回出发地。他应该选择什么样的路线或旅行,以使总旅行距离最小化?”除了距离,还可以考虑时间、成本等其他概念。

在数学中,可以描述为:
在一个无向完全图中,把城市看作坐标点,每个城市之间都有路,且一般路径长度用欧氏距离描述

给定一个"成本矩阵" D = (D i j),dij(i,j是下标)为i城市和j城市之间的距离成本,且dij=dji

P = (i1, i 2 , i2 ,… , in) 是城市的集合

而总的花销为在这里插入图片描述
目标函数是Q,公式为
在这里插入图片描述

且有如下约束条件
在这里插入图片描述
xij=1表示i城市到j城市之间有边(即选择这条路作为解中的一部分)
反之xij=0就是没走过
且要求一个城市一定会被到达且也会从当前城市再出去,以形成回路,且只经过一次
在这里插入图片描述
上式代表回路经过的边数为r(城市的个数为r-1)

λ-optimal

λ-optimal算法就是用于初始化更有效的大规模(这里规定n>31)TSP的解时,所提出的方法

定理与定义

定义:如果一个回路是λ-optimal,则其不可能通过将任意λ条链接替换为其他任何一组λ条链接,以更低的成本
获得一个回路。
定理1:T是一个回路,且有k个城市的位置已经是最优解的一部分。则有T是最优的,或者k<n-λ
定理2:任何回路都是1-optimal
定理3:接下来的三句话等价
	回路是2-optimal
	回路相对于倒置是最优的;这里的倒置指的是将一组相邻城市的顺序颠倒过来。
	回路本身不相交(在非欧氏距离矩阵的广义意义上)。
定理4:回路的代价是最小的,当且仅当其是n-optimal
定理5:设Cλ是包含所有λ-optimal回路的集合,则有包含关系C1属于C2属于C3...属于Cn
定理6:当回路能通过插入和反转操作达到最优时,它是3-optimal的。

算法描述与伪代码

我们在这里提到了3-opt tour的另一种描述,它更形象生动。
对于长度为k的连续城市序列,比如(t1,t2,…tk)(k < n,n为城市的总数),我们将其作为连续的整体从队列中取出,然后再重新插入或者反转之后重新插入,执行以下操作之后会得到更好的T’(路程的总花费最小)。
对每个随机生成的旅行序列,我们重复以上的操作,直到无法优化,则将它加入下一步启发式算法将要迭代的初始解集合中去。
将它们描述为伪代码如下

初始化初始解集合为空集S
当初试S的规模没达到m时:
	随机初始化解
	对解中每个连续的3个城市序列
		判断是否能从中取出再重新插入可以达到更好的解
	加入S

算法的优化

为了使每次被插入之后的序列不再被重新插入,因为可能此序列较优,会一直参与循环,这是有可能发生的,为了尽量减少这样的事发生,做出如下改进:

在每次得到(t1,t2,t3,…tn-1,tn)之后,将其进行循环右移,变成
(tn,t1,t2,t3,…,tn-1)

当然还有一个更复杂的方法,在实现起来也较为困难,且笔者认为初始解的生成上也没有必要花这么大功夫,但是还是说明一下。这里就采用了禁忌搜索的思想:
我们将之前通过原始算法产生的k1个解记录成集合S’,在计算第k1+1个解时,当插入了序列k到了某个位置中去,且这种操作在S‘中有发生的花=话,我们就不这样更新;只有当没有其他更好的更新发生时,我们才做这样的更新。这样能扩大解的空间和初始化解的效率。

参考文献

Computer Solutions of the Traveling Salesman Problem. By SHEN LIN (Manuscript received August 18, 1965)

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

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

相关文章

12月1日(第三天)

四舍五入 Math.round()整形 字符串输出字符串&#xff0c;加字符则输出整形if else if&#xff0c;是互斥关系&#xff0c;同时满足条件&#xff0c;只会被执行前面那个&#xff0c;if if&#xff0c;是并列的关系&#xff0c;条件满足都会执行ORACLE中的操作&#xff08;来自…

使用SpringBoot将图片上传至阿里云OSS

一. 对象存储OSS 1. 什么是OSS? 官方的解释是这样的&#xff1a;阿里云对象存储OSS&#xff08;Object Storage Service&#xff09;是一款海量、安全、低成本、高可靠的云存储服务&#xff0c;提供99.9999999999%(12个9)的数据持久性&#xff0c;99.995%的数据可用性。 官网…

我开发的开源项目,让.NET7中的EFCore更轻松地使用强类型Id

在领域驱动设计&#xff08;DDD&#xff09;中&#xff0c;有一个非常重要的概念&#xff1a;“强类型Id”。使用强类型Id来做标识属性的类型会比用int、Guid等通用类型能带来更多的好处。比如有一个根据根据Id删除用户的方法的签名如下&#xff1a; void RemoveById(long id)…

【毕业设计】9-基于STM32无刷直流电机控制器的设计仿真与实现(原理图+源码+仿真工程+论文+PPT+参考英文文献)

毕业设计】基于STM32无刷直流电机控制器的设计仿真与实现&#xff08;原理图源码仿真工程论文PPT参考英文文献&#xff09; 文章目录毕业设计】基于STM32无刷直流电机控制器的设计仿真与实现&#xff08;原理图源码仿真工程论文PPT参考英文文献&#xff09;任务书设计说明书摘要…

能迪科技智能控制系统对中央空调进行精准、单独调控医院案例

案例背景​ 梅州市妇女儿童医院新院区&#xff08;以下简称“新院区”&#xff09;是省、市重点项目工程&#xff0c;建设地点位于江南新城客都大道北侧&#xff0c;一期项目总投资4.8亿元&#xff0c;占地面积50亩&#xff0c;总建筑面积87000平方米&#xff0c;按照三级妇幼保…

blender cycles引擎

文章目录简介属性一 Scene采样二 光程最多反弹次数钳制焦散快速GI近似三 体积步进速率四 曲线简介 1 cycles与EV的区别在于cy是传统渲染引擎&#xff0c;效果好&#xff0c;速度慢&#xff0c;ev是实时引擎&#xff0c;速度快&#xff0c;效果差 2 切换渲染引擎&#xff0c;属…

基于51单片机智能IC卡水表控制系统(仿真+源程序+全套资料)

资料编号&#xff1a;200 功能介绍&#xff1a; 采用51单片机作为主控CPU&#xff0c;使用按键进行模拟冲卡&#xff08;模拟缴费冲卡&#xff09;&#xff0c;通过按键来控制当前是否使用自来水&#xff0c;并且LCD1602实时显示当前自来水可用量剩余多少&#xff0c;当自来水…

GhMYB7促进棉纤维中次生壁纤维素的积累

文章信息 题目&#xff1a;GhMYB7 promotes secondary wall cellulose deposition in cotton fibres by regulating GhCesA gene expression through three distinct cis-elements 刊名&#xff1a;New Phytologist 作者&#xff1a;Junfeng Huang&#xff0c;Wenliang Xu e…

图文详解Linux基础经典教程(10)——阿里云安装开发工具

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 概述 之前&#xff0c;我们已经介绍在本地CentOS上安装JDK、Tomcat、MySQL等开发工具。接下来&#xff0c;我们介绍在阿里云安装这些开发工具。 购买阿里云 请在阿里云 h…

自然语言处理NLP——ERNIE-M:基于回译机制的“预训练-微调”多语言模型

目录 系列文章目录 一、背景介绍 1.多语言任务 1.1 多语言任务定义 1.2 多语言任务难题 2.多语言模型 2.1 多语言模型定义与原理 2.2 多语言模型困难 3.论文简介 3.1 背景与开发动机 3.2 论文梗概 3.3 论文贡献与成就 二、相关工作 1.预训练方法 1.1 预训练方法…

Postman之Newman命令行运行脚本生成HTML报告

目录 一、Newman的下载安装 二、Newman生成Html报告 三、执行脚本准备 3.1.导出项目集脚本 3.2.导出环境变量 3.3.导出全局变量 3.4.data数据驱动文件 3.5.文件存储 四、Newman运行命令简介 4.1.运行命令&#xff1a;newman run 4.2.常用参数&#xff1a; 4.3.执行…

【SSM框架】依赖注入

&#x1f353;个人主页&#xff1a;个人主页 &#x1f352;系列专栏&#xff1a;SSM框架 目录 1.依赖注入之setter注入 2.依赖注入之构造器注入 3.特殊值处理 4.为类类型属性赋值 5.为数组类型属性赋值 1.依赖注入之setter注入 ①创建学生类Student package com.atguigu.s…

09【SpringMVC的Json支持】

文章目录三、Json的支持3.1 响应json3.1.1 ResponseBody3.1.2 JsonIgnore3.1.3 JsonFormat3.1.4 ResponseEntity3.1.5 作用在类上3.1.6 RestController3.2 请求Json3.2.1 RequestBody3.2.2 HttpEntity3.2.3 封装Json数据三、Json的支持 SpringMVC支持自动将JSON转换成Java对象…

ubuntu更换清华源

进入&#xff1a;清华大学开源软件镜像站 | Tsinghua Open Source Mirror 选择你的ubuntu版本 vi /etc/apt/sources.list 如果执行apt update 报镜像源证书错误 &#xff08;1&#xff09;将/etc/apt/sources.list中的https改为http, 然后执行apt update&#xff1b; &#…

Linux进程状态

目录 一、普适操作系统的进程状态 1.什么是进程状态 2.三种重要的进程状态 &#xff08;1&#xff09;运行状态 &#xff08;2&#xff09;阻塞状态 &#xff08;3&#xff09;挂起状态 二、Linux源代码中的进程状态 三、Linux进程状态 1.运行状态 2.睡眠状态&#x…

AI加速(九): 深度理解吞吐量和延时

前文回顾&#xff1a; AI加速&#xff08;二&#xff09;| 计算机存储和计算的分离 AI加速&#xff08;三&#xff09;| 每条指令都是流水线的工人 AI加速&#xff08;四&#xff09;| 衣柜般的分层存储设计 AI加速&#xff08;五&#xff09;| 一个例子看懂流水——从指令到…

Java多线程之Thread和Runnable以及Callable接口多线程的简单实现(适合小白入门,十分简单)

Java多线程之Thread和Runnable一、介绍1、程序2、进程3、线程4、整体思路5、注意二、Thread1、思路流程2、样例代码3、多线程下载图片三、Runnable1、思路流程2、样例代码3、多线程下载图片四、Callable接口&#xff08;仅作了解&#xff09;1、具体流程2、优点3、样例五、两者…

视频编解码 — SVC可伸缩性

目录 SVC分层 时域SVC 空域SVC 在一对多的情况下&#xff0c;根据每个接收端的带宽不同&#xff0c;灵活调整发送码率 SVC分层 第0层&#xff0c;最底层&#xff0c;可以独立进行编解码&#xff0c;不依赖第1&#xff0c;第2层第1层&#xff0c;依赖于第0层第2层&#xff…

Linux中的/proc文件系统详解(C/C++代码实现)

Linux /proc这个特殊的目录包含有关Linux系统的所有详细信息&#xff0c;包括其内核、进程和配置参数。通过研究/proc目录&#xff0c;可以了解Linux命令的工作原理&#xff0c;甚至可以执行一些管理任务。 走进Linux的/proc目录 今天&#xff0c;我们将查看/proc目录并熟悉它…

最新版 苹果 IOS AppStore证书申请全流程 包括p12文件

第一步 登陆开发者网站并进入证书管理页。 辅助工具网站地址&#xff1a;http://www.applicationloader.net/ 第二步 添加【Certificates】证书。在这里插入图片描述 第三步 进入添加页后&#xff0c;根据需求选择。 第四步 选择好环境之后&#xff0c;这里需要选择一个…