關於tsp問題的動態規劃求解的matlab實現

2021-10-07 09:09:19 字數 1147 閱讀 4445

筆者另外加一句話哈,如果有筆者表述不清或寫不清楚的地方,歡迎讀者來聯絡和討論,大家一起進步。

這篇文章的**是筆者自己用動態規劃的思想用matlab實現的,裡面的用到了矩陣運算和matlab內建函式的使用,相比c寫起來**少了很多,數學好的看起來應該更加簡單易懂。

但是是根據一位大牛的文章寫的,這裡附上他文章的**。如果大家想看更詳細的分析,可以去他的**上看。

話不多說看文章!

tsp問題(旅行商問題)是指旅行家要旅行n個城市,要求各個城市經歷且僅經歷一次然後回到出發城市,並要求所走的路程最短。

假設現在有四個城市,0,1,2,3,他們之間的代價如圖一,可以存成二維表的形式

現在要從城市0出發,最後又回到0,期間1,2,3都必須並且只能經過一次,使代價最小。

假設從頂點s出發,令d(i, v』)表示從頂點i出發經過v』(是乙個點的集合)中各個頂點一次且僅一次,最後回到出發點s的最短路徑長度。

推導:(分情況來討論)

①當v』為空集,那麼d(i, v』),表示從i不經過任何點就回到s了,如上圖的 城市3->城市0(0為起點城市)。此時d(i, v』)=cis(就是 城市i 到 城市s 的距離)、

②如果v』不為空,那麼就是對子問題的最優求解。你必須在v』這個城市集合中,嘗試每乙個,並求出最優解。

d(i, v』)=min)}

注:cik表示你選擇的城市和城市i的距離,d(k, v』-)是乙個子問題。

最短路徑就是10,讀者可以自己手算一下,結果是一樣的。這種小規模問題可以手算,但是遇到大型問題的時候,顯然筆算是難以實現的。

動態規劃求解TSP圈

求解思路 動態規劃的方法的最大難點就在於初始變數的確定,選擇合適的初始變數才能更好的運用動態規劃的方式解決問題。我在這裡定義的變數就是d i,s 設s出發點,其中i是乙個點,而s是點的集合,這個變數的意思就是從i出發,經過s中的所有點一次且僅一次且回到出發點s的最小距離。當s為空時,就表示i到起始點...

Python求解tsp問題(動態規劃,簡單易懂)

解題思路主要有兩部分 第一部分 i為當前節點 城市 s為還沒有遍歷的節點 城市集合 第二部分,回溯,找到最優的路徑,需要將s集合一一對應乙個數字 類似於編碼,一般用二進位制 不如 tsp問題 class solution def init self,x,start node self.x x 距離矩...

動態規劃法求解TSP問題 C

此文章借鑑於博文在此基礎上重新進行了分析總結。1 怎麼求頂點子集,即這些怎麼記錄?答 例如4個頂點,依次為 十進位制數0 1 2 3 4 5 6 7的二進位制分別為000 001 010 011 100 101 110 111。上述集合中的元素即為二進位制中的位數,例如集合,可用二進位制110 十進...