基于组合优化的旅行商问题

本文详细探讨了旅行商问题(TSP),介绍了暴力算法、Prim算法、Kruskal算法及其拓展,遗传算法等在解决TSP中的应用。通过对比,得出遗传算法能有效地求出最优解,且效率优于暴力算法。同时,文章展示了P算法和K算法拓展的近似解及其意义。
摘要由CSDN通过智能技术生成

组合优化

对于有限个点,两两之间的距离已知,要找出连接这些点的最短路径,我们为这个任务取名信使问题(因为每一位邮递员都会遇到这个问题,很多旅行者也会遇见这个问题)
组合优化是离散的问题:即在min f(x)中x的域是离散的,离散优化问题,也被称为组合优化问题,我们视之为在候选目标的有限集中找出最有目标:

  min f(x) 其中 x ∈ {x1,x2,...,xn}

在理论上,我们通常可以评价每一个f(xi)来求解上式。这种组合优化的方法被称为穷举搜索或蛮力。然而,组合问题的搜索空间常常很大,因此检查每一个可能的解并不可行。
这里简单介绍了组合优化的背景,下面通过组合优化中经典的TSP问题来帮助读者对组合优化问题,进行进一步细致的理解。

组合优化中的TSP

综述

旅行商问题又称货郎担问题(TSP问题)。这个问题是:给定一系列的城市和它们的坐标,推销员从某一个起点出发,让找到一个最短的回路,使得商人经过所以城市又回到原点。该题在组合优化中属于NP难题。我们在图论的角度上,可以将理解为一个完全图,且边待权重的无向图,寻找一个权值最小的Hamilton回路,随着城市即顶点数的增加,问题的规模会呈指数级别增长,故称为一个NP完全问题。
文章对问题进行了叙述,介绍了暴力算法在TSP问题中的应用;并且拓展了Prim算法和Kruskal算法,在最小生成树的基础上形成环路从而得到TSP问题的局部最优解,我们对这种近似算法进行了详细的讨论,证明了该拓展可以估计最优解。接下来又阐述了深度优先搜索和广度优先搜索。最后应用启发式算法GA,对TSP问题进行建模和求解,计算得到的结果为35.48,其最优路径为:2->1->5->9->10->8->7->6->3->4->2。最后对所有算法和结果进行了对比,得出结论。
本文详细概述了TSP解决的多种算法,并对它们进行分别求解。证明得出了近似算法对TSP问题的估计作用。并将遗传算法、Prim算法、Kruskal算法、暴力算法、深度优先搜索和广度优先搜索进行了结合,对比,具有深刻的意义和生产应用价值。

关键词:TSP问题 遗传算法 Prim、Kruskal算法 暴力算法
深度优先搜索 广度优先搜索

一、问题叙述

已知:一个完全图G=(V,E),边上赋有权值。其中V为顶点(城市)的集合,V={v_1, v_2,…, v_n},E为该完全图的边集,E={e_1, e_2,…, e_n},第i条边上带权ω_i。从一个起点S开始,寻找一条环路,stG中每个顶点都要被访问且访问过一次。
设环路的总长度为L,依次经过的顶点顺序为v_1, v_2,…, v_n,s_1为(v_1, v_2),s2为(v_2, v_3),…,s_n为(v_n, v_1),且s_i∈ω_i,i=1,2,…。故我们的目标函数可以描述为:
在这里插入图片描述
接下来我们讨论的具体问题是:一共有个顶点v_1,v_2,v_3,v_4,v_5,v_6,v_7,v_8,v_9,v_10。它们在图上的坐标分别为(0,0),(2,4),(1,8),(3,5),(,4,1),(5,7),(6,9),(7,8),(9,0),(10,3)。因为是完全图,每个点之间都有路,故可以直接通过坐标来计算除=出每个顶点之间的距离d_ij,其中
在这里插入图片描述
将这些点可视化得:
在这里插入图片描述

二、图在计算机上的表示

首先,我们需要将坐标存入计算机中,以便后续的的使用。我们用矩阵d来录环路上点和边之间的关系,d_ij表示(v_i,v_j),i和j分别表示第i个城市和第j个城市,d_ij的计算公式如上,其中i=1,2,…,10,j=1,2,…,10。D可表示为:
在这里插入图片描述

三、TSP问题的暴力解法

暴力求解:穷举出所以可能旅行路线,即所以城市之间的排列组合,一共有10!种可能的情况,分别计算出其对应的值,最后从中找出最好的解。
设集合M={m_1,m_2,…, m_n},其中m_i是110的向量,比如0123456789,它表示依次旅行商依次经过城市的顺序,并且从最后一个城市回到第一个城市形成回路,

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

原创小白变怪兽

帮助原创小白成为怪兽吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值