旅行商(TSP)问题专题——多种方法对比

目录

  • 1.问题描述
    1.1 问题描述
    1.2 各种方法的总结
     1.2.1 分支限界法的总结
     1.2.2 分支限界法与最小生成树、最短路径之间的联系(都借助了贪心性质)
  • 2.最优化模型——整数规划
  • 3.基于上下界的分支限界法——求解对称型TSP
    3.1 下界(估算)
    3.2 上界——贪心
    3.3 基于上下界的分支限界法——本质上是一样的
    3.4 一个示例
  • 4.基于降阶的分支限界法
    4.1 问题描述
    4.2 分支限界法解决旅行商问题
    4.3 一个示例
  • 5.直观的回溯法和分支限界法求解
    5.1 实例
    5.2 回溯法——深度优先遍历解空间树
    5.3 分支限界法——广度优先遍历
    5.4 采用基于归约方式的分支限界法
  • 6.动态规划
    6.1 刻画一个最优解的结构特征(最优子结构)
    6.2 递归地定义最优解的值(重叠子问题)
    6.3 计算最优解的值,通常采用自底向上的方法
    6.4 利用计算出的信息构造一个最优解
  • 7.近似算法
  • 8 遗传算法
  • 9.模拟退火
  • 10.神经网络

1.问题描述

1.1 问题描述

  • 一个售货员必须访问n个城市,恰好访问每个城市一次,并最终回到出发城市。
    售货员从城市i到城市j的旅行费用是一个整数,旅行所需的全部费用是他旅行经过的的各边费用之和,而售货员希望使整个旅行费用最低。
  • (等价于求图的最短哈密尔顿回路问题)令G=(V, E)是一个带权重的有向图,顶点集V=(v0, v1, ..., vn-1)。从图中任一顶点vi出发,经图中所有其他顶点一次且只有一次,最后回到同一顶点vi的最短路径。

1.2 各种方法的总结

1.2.1 分支限界法的总结

  • 对于分支限界法的本质,可以描述如下:
    1)通过贪心思想获得一个上界bound
    2)针对一条边进行分支(左边选择该边、右边不选该边),然后对分支计算出下界,如果下界超过上界则剪去该分支;该分支的计算也是使用贪心思想
  • 直观的回溯法和分支限界法给的提示
    1)Hamilton回路经过所有顶点,因此从直观的回溯法和分支限界法对于选择哪个顶点开始搜索没有本质区别
    2)直观的解法给出了解空间树规模大小:(n-1)!,因为从哪个顶点先开始都无所谓,所以是n-1.
  • 直观的回溯法和分支限界法没有本质区别,回溯法也可以借助分支限界法的贪心思想
    1)回溯法可以借助贪心思想,找出一个在贪心操作下的可行解的界
    2)回溯其他分支时,回溯法可以借助贪心思想预测其他分支的下界
    3)但是如果分支众多,回溯法每次总是找最优、次优等(一个点到其他点最优、次优...),但是实际上费用矩阵并不能在O(1)内找到最优值,因为不是排序的,所以O(lgn)都很难做到,n是顶点的个数;——这个计算分散开了
    分支限界法,一次计算出了所有儿子节点的下界(但是这个下界的估算也需要一次性计算出每一行的最小值)。——这个计算时一起算的
  • 直观的分支限界法与降阶的分支限界法、动态规划的区别
    1)直观的分支限界法是直接针对可能的解空间树进行遍历的,按照贪心性质(估算的下界最小);这个是正常的解空间树
    2)降阶的分支限界法是针对一条边的选择与否,造成左右两个分支界限最大的贪心性质选择的,总是选择这样的边首先加入(估算的下界最小);这个是经过调整的解空间树
    3)基于降阶的分支限界法,本质上与动态规划类似;
    降阶的分支限界法,通过选择该边,转换为了子问题的求解;动态规划也是通过选择一条边,转换成了子问题的求解;
    不过分支限界法是用贪心性质进行选边,动态规划是是通过选择所有可能性的边计算出最小的边。

1.2.2 分支限界法与最小生成树、最短路径之间的联系(都借助了贪心性质)

2.最优化模型——整数规划

  • cij表示顶点vi和vj之间的费用、距离等。
  • xij若等于1,则表示边vivj在Hamilton回路上;否则就不在。
  • 最优化模型(整数规划)如下:


3.基于上下界的分支限界法——求解对称型TSP

3.1 下界(估算)

  • 针对图的邻接矩阵,将矩阵中每一行最小的元素相加,就可得到一个简单的下界b1
  • 改进:考虑一个TSP的完整解,在每条路径上,每个城市都有两条邻接边,一条进,一条出。那么,如果把矩阵中每一行最小的两个元素相加除以2(不失一般性,可以假定图中所有距离权重都为整数),再对其结果向上取整,就可得到一个合理的下界b2。(为什么?试想一种情况:假设进顶点和出顶点的边都是最小。在这种巧合下,就正好是b2)

3.2 上界——贪心

  • TSP的任何可行解都是上界,TSP上界的求法是借助贪心方法思想。
    总是选一条最短的且不形成回路,但是最终会形成回路的路径。

3.3 基于上下界的分支限界法——本质上是一样的

  • 通过贪心思想获得一个上界bound
  • 针对一条边进行分支(左边选择该边、右边不选该边),然后对分支计算出下界,如果下界超过上界则剪去该分支

3.4 一个示例

  • step1.计算出上界 U1 = 16.
    1->3->5->4->2->1
  • step2.假定边(1, 3)不在TSP回路中,即e13 = 0,此时,b2 = ((5+3) + (3+6) + (4+2) + (3+4) + (2+3))/2 = 17.5,由于b2 = 17.5 > U1 = 16,因此边(1, 3)一定在回路中,即e13 = 1;
  • step3.在e13 = 1的情况下,假定e12 = 0,此时b2 = ((1+5) + (6+7) + (1+2) + (3+4) + (2+3))/2 = 17,由于b2 = 17 > U1 = 16,因此边(1, 2)一定在回路中,即e12 = 1;
  • step4.在e12 = e13 = 1的情况下,由于顶点1已有两条关联边在最优回路中,因此在删去边(1, 4)和(1, 5),由于边(2, 3)与边(1, 2)、(1, 3)形成圈,因此在中删去边(2, 3),即此时e14 = e15 = e23 = 0;
  • step5.在e12 = e13 = 1,e14 = e15 = e23 = 0的情况下,假定e25 = 1,此时b2 = ((1+3) + (3+9) + (1+2) + (3+4) + (2+9))/2 = 18.5,由于b2 = 18.5 > U1 = 16,因此边(2, 5)一定不在回路中,即e25 = 0;
  • step6.在e12 = e13 = 1,e14 = e15 = e23 = e25 = 0的情况下,由于与顶点2关联的边有且只有2条在回路中,因此有e24 = 1,进而有e35 = e54 = 1,e34 = 0。


4.基于降阶的分支限界法

4.1 问题描述

4.1.1 问题描述

  • c——费用矩阵(邻接矩阵),cij表示顶点vi到顶点vj的关联边的长度。

4.1.2 费用矩阵的特性及规约

  • 令G=(V, E)是一个带权重的有向图,l是图G的一条哈密尔顿回路,c是图G的费用矩阵,则回路上的边对应于费用矩阵c中每行每列各一个元素。
    证明:因为l上面的每个顶点vi有且仅有一条入边和出边,入边表示费用矩阵第i列仅有一个元素对应,出边表示费用矩阵第i行仅有一个元素对应。
  • 费用矩阵c的第i行(或第j列)中的每个元素减去一个整数lhi(或chj),得到一个新的费用矩阵c'。使得c'中第i行(或第j列)中的最小元素为0,称为费用矩阵的行归约(或列归约)。称lhi为行归约常数,chj为列归约常数。
  • 对费用矩阵c的每一行和每一列都进行行归约和列归约,得到一个新的费用矩阵c',使得c'中每一行和每一列至少都有一个元素0,称为费用矩阵的归约。矩阵c'称为费用矩阵c的归约矩阵,称常数h为矩阵c的归约常数。


  • 令G=(V, E)是一个带权重的有向图,l是图G的一条哈密尔顿回路,c是G的费用矩阵,w(l)是以费用矩阵c计算的这条回来的费用。如果c'是费用矩阵c的归约矩阵,归约常数为h,w'(l)是以费用矩阵c'计算的这条回路的费用。则有:
    w(l) = w'(l) + h
  • 令G=(V, E)是一个带权重的有向图,l是图G的一条最短哈密尔顿回路,c是G的费用矩阵,c'是c的归约矩阵,G'是与c'对应的图,c'是G'的费用矩阵,则l是G'的一条最短的哈密尔顿回路。

4.2 分支限界法解决旅行商问题

4.2.1 分支方法(二叉分支)

  • (分支1)选取沿着某一条边出发的路径,作为进行搜索的一个分支结点
  • (分支2)不沿这条边的其他所有路径集合,作为进行搜索的另一个分支结点

4.2.2 下界确定

  • 假定父亲结点为X, w(X)是父亲结点的下界。
    现在,选择沿vivj边向下搜索作为其一个分支结点Y;
    不沿vivj边向下搜索作为另一个分支结点Y'。
  • 分支Y:
    费用矩阵被降阶和归约,归约常数为h,则w(Y) = w(X) + h
  • 分支Y':
    将cij置位∞。
    同时它必然包含费用矩阵中第i行的某个元素和第j列的某个元素,令dij为第第i行和第j列中除cij之外的最小元素之和。
    如果这两个最小元素不为零,那么也即按照这两个元素进行归约。本质上dij也是矩阵进一步的归约常数。

    因此有w(Y') = w(X) + dij

4.2.3 分支的选择(贪心)

  • 1)沿cij 为0的方向选择,使所选择的路线尽可能短。
  • 2)在多个cij 为0的方向中,沿dij最大的方向选择,使w(Y')尽可能大
    令S是费用矩阵中cij 为0的元素集合,Dkl是S中使dij达到最大的元素,即:

    即vkl就是所要选择的分支方向。

4.2.4 分支限界法的求解步骤

每个结点包含如下信息:
  c——归约过后的费用矩阵
  k——费用矩阵的阶数
  w——下界
  ad——顶点邻接表
bound——一个可行解的取值,当做剪枝的标准

  • step1.bound = ∞
  • step2.建立父亲结点X
    X.c 为费用矩阵,并进行归约,归约常数为h
    X.k = n
    X.w = h(下界)
    X.ad顶点邻接表
  • step3.由X.c中所有为0的cij,计算dij
  • step4.选择使dij最大的元素dkl,选择边vkl作为分支方向。
    step5是分支Y'的处理
  • step5.(分支1)建立儿子结点Y'
    Y'.c = X.c,将Y'.c中元素ckl置为∞,归约Y'.c
    Y'.ad = X.ad
    Y'.k = X.k
    计算下界Y'.w,并与bound进行比较,根据比较决定是否插入优先队列。
    step6-step9是分支Y的处理
  • step6.(分支2)建立儿子结点Y
    Y.c = X.c,根据下图将相应的边置为∞
    Y.ad = X.ad
    Y.k = X.k

  • step7.删除Y.c的第k行与第l列元素
    Y.k = Y.k -1
    归约Y.c
    计算Y.w
  • step8.Y.k为2,直接判断最短回路的两条边,并登记Y.ad,使Y.k = 0
  • step9. Y.w与bound进行比较,处理是否插入优先队列和更新bound
  • step10.取下优先队列元素作为结点X,若X.k为0,算法结束;否则转向step3.
如果选择kl边,置边lk为∞是不行的

4.3 一个示例


5.直观的回溯法和分支限界法求解

  • 1)Hamilton回路经过所有顶点,因此从直观的回溯法和分支限界法对于选择哪个顶点开始搜索没有本质区别
  • 2)直观的解法给出了解空间树规模大小:(n-1)!,因为从哪个顶点先开始都无所谓,所以是n-1.

5.1 实例



5.2 回溯法——深度优先遍历解空间树

  • 回溯法的一个可能改进:从某点开始按照贪心思想进行深度优先
  • 贪心思想:如果是从顶点1开始,则选择与顶点1最近的4,然后根据4开始,选择可以组成环路的最近点,直至找到一个可行解。一直在某点以最优->次优->再次等的方式进行搜索。前提条件是能够形成Halmilton回路。
  • 界的预测:可以提前预估其下界,按照分支限界法的那种方式

5.3 分支限界法——广度优先遍历






5.4 采用基于归约方式的分支限界法

6.动态规划

6.1 刻画一个最优解的结构特征(最优子结构)

  • 假设s0s1s2...sn,其中s0=sn,是一条从s0出发的最短简单回路。
    那么有sisi+1...sn也是从si出发,回到起点sn的一条最短回路。(cut-and-paste证明)

6.2 递归地定义最优解的值(重叠子问题)

  • 设TSP顶点编号为0,1,2,...,n-1.
    假设从顶点0出发
  • d(i, V')定义为从顶点i出发经过V'中各顶点有且仅有一次,最后回到顶点0的最短路径长度
  • cij定义为顶点i到顶点j的距离

一个示例:

费用矩阵

递归求解子问题(重叠子问题)

6.3 计算最优解的值,通常采用自底向上的方法

  • 假设顶点总数为n
    则6.2中表的i范围是0 ≤ i ≤ n-1,j的范围是0 ≤ j ≤ 2n-1 - 1
  • 一个特别的规律:k表示第k-1位上是否为1,如下图所示


因此将一个集合转变成了一个数与之对应,数中对应的为位1,表示该数包含在集合中,否则,该数不在集合中。


按程序计算的表格

6.4 利用计算出的信息构造一个最优解

第一个打印0

7.近似算法

8 遗传算法

9.模拟退火

10.神经网络

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容

  • 目录 1.分支限界法简介1.1 分支限界法的本质——通过限界阻塞子树1.2 分支限界法与回溯法的区别1.3 下界或...
    王侦阅读 26,957评论 2 13
  • https://zh.visualgo.net/graphds 浅谈图形结构https://zh.visualgo...
    狼之独步阅读 4,122评论 0 0
  • 第一章 绪论 什么是数据结构? 数据结构的定义:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 第二章...
    SeanCheney阅读 5,743评论 0 19
  • 我停了2天,我真是不知道该写些什么。一个人走在大街上感觉很孤独,这是一个有雨的季节。五一市场,有很便宜的黄瓜,2块...
    云南土著阅读 238评论 0 0
  • 时间一分一秒悄然流逝,和煦温暖的阳光在巡视车站的角角落落,万物笼上了一层慈祥的光辉。天空碧蓝如洗,白云似带如练,诉...
    西岭布衣阅读 194评论 0 2