用动态规划法求解TSP问题
生活随笔
收集整理的這篇文章主要介紹了
用动态规划法求解TSP问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、求解TSP問題
1、問題描述
- TSP問題(擔貨郎問題,旅行商問題)是指旅行家要旅行n個城市,要求各個城市經歷且僅經歷一次然后回到出發(fā)城市,并要求所走的路程最短
- 各個城市間的距離可以用代價矩陣來表示。
2、【應用】
例如:校車怎樣以最短的路線行走而接送到所有學生?報紙和牛奶的配送路線怎樣最優(yōu)?循環(huán)旅游怎樣選取才能實現開支最少?公司視察子公司怎樣出差更高效?
3、【蠻力法求解】
用蠻力法解決TSP問題,可以找出所有可能的旅行路線,即依次考察圖中所有頂點的全排列,從中選取路徑長度最短的簡單回路。
4、證明TSP問題滿足最優(yōu)性原理
設s,s1,s2, …,sp,s是從s出發(fā)的一條路徑長度最短的簡單回路,假設從s到下一個城市s1已經求出,則問題轉化為求從s1到s的最短路徑,顯然s1,s2,…,sp,s一定構成一條從s1到s的最短路徑。
如若不然,設s1,r1,r2,…,rq,s是一條從s1到s的最短路徑且經過n-1個不同城市,則s,s1,r1,r2,…,rq,s將是一條從s出發(fā)的路徑長度最短的簡單回路且比s,s1,s2,…,sp,s要短,從而導致矛盾。所以,TSP問題滿足最優(yōu)性原理。
5、動態(tài)規(guī)劃法求解過程——示例
6、動態(tài)規(guī)劃求解問題的步驟
(1)劃分子問題—找到“狀態(tài)”
(2)狀態(tài)方程
(3)填表
7、算法設計
(1)【數據結構設計】
二維數組c[n][n]存放頂點之間的代價,n個頂點用0~n-1的數字編號
一維數組V[2n-1]存放1~n-1個元素的所有子集
二維數組dp[n][2n-1]存放遞推結果,其中dp[i][j]表示從頂點i經過子集V[j]中的頂點一次且僅一次,最后回到出發(fā)點0的最短路徑長度。
(2)【動態(tài)規(guī)劃法算法】
算法——TSP問題
1.for(i=1; i<n; i++) d[i][0]=c[i][0]; //初始化第0列
2.for(j=1; j<2n-1-1; j++)
for(i=1; i<n; i++) //依次進行第i次迭代
if(子集V[j]中不包含i)
對V[j]中的每個元素k,計算d[i][j]=min(c[i][k]+d[k][j-1]);
3.對V[2n-1-1]中的每一個元素k,計算d[0][2n-1-1]=min(c[0][k]+d[k][2n-1-2]);
4.輸出最短路徑長度d[0][2n-1-1];
8、算法分析
總結
以上是生活随笔為你收集整理的用动态规划法求解TSP问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UG型腔铣设计笔记
- 下一篇: 多变量分析”——数据挖掘、数据分析