关于λ-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)

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

  1. 基于自然的灵感算法--元启发式

    问题一:自然赋予的元启发式优化算法的分类 自然赋予的元启发式算法(模拟生物或者物理的现象去解决问题)有三大类也就是:基于进化,基于物理的,基于群体的 基于进化的主要是受达尔文的物种进化理论的启发,主要 ...

  2. 元宇宙中可跨语种交流,Meta 发布新语音模型,支持128种语言无障碍对话

    编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 语言交流是人类互动一种自然的方式,随着语音技术的发展,我们可以与设备以及未来的虚拟世界进行互动,由此虚拟体验将于我们的现实世界融 ...

  3. 元宇宙中可跨语种交流!Meta 发布新语音模型,支持128种语言无障碍对话

    编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 语言交流是人类互动一种自然的方式,随着语音技术的发展,我们可以与设备以及未来的虚拟世界进行互动,由此虚拟体验将于我们的现实世界融 ...

  4. DeepLearning tutorial(2)机器学习算法在训练过程中保存参数

    FROM: http://blog.csdn.net/u012162613/article/details/43169019 DeepLearning tutorial(2)机器学习算法在训练过程中保 ...

  5. 计算机算法在生物信息学中的应用,引力场算法及其在生物信息学中的应用

    引力场算法及其在生物信息学中的应用 [摘要]:优化算法是当今的重要研究课题,能够从海量数据中获得所需最优解,也是极具挑战的工作.优化算法可定义如下:给定某一待解问题,求该问题的最优解,此问题一般以N元 ...

  6. 区块链、NFT 与元宇宙中的稀缺性技术

    转载原文链接:http://www.btcwbo.com/5878.html 元宇宙是人类创造的虚拟世界,可以沉浸式体验.作为这个世界的一员."门票",NFT半年前完全火了.NFT ...

  7. 区块链、NFT与元宇宙中的稀缺性技术

    元宇宙是人类创造,可以沉浸式体验的虚拟世界.作为这个世界的"门票",NFT在半年前彻底火了.从NFT到元宇宙,体现了人们在虚拟世界中引入了现实世界的内容,虚实结合. NFT的稀缺性 ...

  8. 粒子群算法在物流中心选址中的应用

    一.实验目的 粒子群算法在物流中心选址中的应用 二.实验要求 设有一系列点分别代表供应地和需求地 等 n 个物流节点,各自有一定量货物需要以一定的运输费率 运入或运出物流中心,选择物流中心使得总运输成 ...

  9. 计算机图形学 学习笔记(一):概述,直线扫描转换算法:DDA,中点画线算法,Bresenham算法

    前言 本笔记基于 http://www.icourse163.org/learn/CAU-45006?tid=1001746004#/learn/announce 感谢中国农大 赵明老师的分享~ 现在 ...

最新文章

  1. mysql 获取 row的id_转: MYSQL获取更新行的主键ID
  2. 微众WeCross 跨链平台(6)UBI通用区块链接口
  3. 技术实践 | Web 端实现 RTC 视频特效的解决方案
  4. Python中可变数据类型和不可变数据类型
  5. 使用ThreadLocal不当可能会导致内存泄露
  6. Today's my MDX...
  7. 了解 | 你必须了解的Mysql 三大日志
  8. 脉冲波形对uwb的影响matlab仿真,DS-UWB系统信号的产生及MATLAB仿真
  9. IDEA:AbstractMethodError: Receiver class org.jetbrains.plugins.scala ScTraitImpl not define or inher
  10. heroku java_部署Java Web项目到Heroku
  11. MPEG-4视频编码核心思想
  12. stm32单片机OLED显示图片 位图转换 Image2Lcd使用
  13. 浅谈android的am命令
  14. 苹果+beta+软件测试计划,自讨苦吃:加入苹果Apple Beta版软件计划之后
  15. Wendy Shijia 的「 Escher‘s Gallery」可视化作品复现系列文章(三)
  16. Linux中fork函数详解(附图解与代码实现)
  17. Excel 使用技巧集锦—163种技巧
  18. win10 2016 LTSB
  19. 同济大学Python程序设计基础 实验一:Python程序设计基础
  20. JVM 语言的兴衰 【The Rise and Fall of JVM Languages】

热门文章

  1. Nhiberate了解
  2. 记一次腾讯社招前端面试(已拿到offer入职)
  3. 前端页面div设计的css模板
  4. Excel在数据表中悬停鼠标显示数据值
  5. C++知识黄金学习记录
  6. Node.js学习之路--npm包管理工具操作汇总
  7. Python 茎叶图
  8. OpenGL中使用中点画圆法画圆
  9. 计算机仿真技术(2)
  10. 【C语言】青蛙跳台阶问题