基于组合优化的旅行商问题
组合优化
对于有限个点,两两之间的距离已知,要找出连接这些点的最短路径,我们为这个任务取名信使问题(因为每一位邮递员都会遇到这个问题,很多旅行者也会遇见这个问题)
组合优化是离散的问题:即在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,它表示依次旅行商依次经过城市的顺序,并且从最后一个城市回到第一个城市形成回路,