最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python基于回溯法子集樹模板解決旅行商問題(TSP)實(shí)例

 更新時(shí)間:2017年09月05日 12:01:44   作者:羅兵  
這篇文章主要介紹了Python基于回溯法子集樹模板解決旅行商問題(TSP),簡(jiǎn)單描述了旅行商問題并結(jié)合實(shí)例形式分析了Python使用回溯法子集樹模板解決旅行商問題的相關(guān)實(shí)現(xiàn)步驟與操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Python基于回溯法子集樹模板解決旅行商問題(TSP)。分享給大家供大家參考,具體如下:

問題

旅行商問題(Traveling Salesman Problem,TSP)是旅行商要到若干個(gè)城市旅行,各城市之間的費(fèi)用是已知的,為了節(jié)省費(fèi)用,旅行商決定從所在城市出發(fā),到每個(gè)城市旅行一次后返回初始城市,問他應(yīng)選擇什么樣的路線才能使所走的總費(fèi)用最短?

分析

此問題可描述如下:G=(V,E)是帶權(quán)的有向圖,找到包含V中每個(gè)結(jié)點(diǎn)一個(gè)有向環(huán),亦即一條周游路線,使得這個(gè)有向環(huán)上所有邊成本之和最小。

這個(gè)問題與前一篇文章http://www.fzitv.net/article/122933.htm的區(qū)別就是,本題是帶權(quán)的圖。只要一點(diǎn)小小的修改即可。

解的長(zhǎng)度是固定的n+1。

對(duì)圖中的每一個(gè)節(jié)點(diǎn),都有自己的鄰接節(jié)點(diǎn)。對(duì)某個(gè)節(jié)點(diǎn)而言,其所有的鄰接節(jié)點(diǎn)構(gòu)成這個(gè)節(jié)點(diǎn)的狀態(tài)空間。當(dāng)路徑到達(dá)這個(gè)節(jié)點(diǎn)時(shí),遍歷其狀態(tài)空間。

最終,一定可以找到最優(yōu)解!

顯然,繼續(xù)套用回溯法子集樹模板?。。?/p>

代碼

'''旅行商問題(Traveling Salesman Problem,TSP)'''
# 用鄰接表表示帶權(quán)圖
n = 5 # 節(jié)點(diǎn)數(shù)
a,b,c,d,e = range(n) # 節(jié)點(diǎn)名稱
graph = [
  {b:7, c:6, d:1, e:3},
  {a:7, c:3, d:7, e:8},
  {a:6, b:3, d:12, e:11},
  {a:1, b:7, c:12, e:2},
  {a:3, b:8, c:11, d:2}
]
x = [0]*(n+1) # 一個(gè)解(n+1元數(shù)組,長(zhǎng)度固定)
X = []     # 一組解
best_x = [0]*(n+1) # 已找到的最佳解(路徑)
min_cost = 0    # 最小旅費(fèi)
# 沖突檢測(cè)
def conflict(k):
  global n,graph,x,best_x,min_cost
  # 第k個(gè)節(jié)點(diǎn),是否前面已經(jīng)走過
  if k < n and x[k] in x[:k]:
    return True
  # 回到出發(fā)節(jié)點(diǎn)
  if k == n and x[k] != x[0]:
    return True
  # 前面部分解的旅費(fèi)之和超出已經(jīng)找到的最小總旅費(fèi)
  cost = sum([graph[node1][node2] for node1,node2 in zip(x[:k], x[1:k+1])])
  if 0 < min_cost < cost:
    return True
  return False # 無沖突
# 旅行商問題(TSP)
def tsp(k): # 到達(dá)(解x的)第k個(gè)節(jié)點(diǎn)
  global n,a,b,c,d,e,graph,x,X,min_cost,best_x
  if k > n: # 解的長(zhǎng)度超出,已走遍n+1個(gè)節(jié)點(diǎn) (若不回到出發(fā)節(jié)點(diǎn),則 k==n)
    cost = sum([graph[node1][node2] for node1,node2 in zip(x[:-1], x[1:])]) # 計(jì)算總旅費(fèi)
    if min_cost == 0 or cost < min_cost:
      best_x = x[:]
      min_cost = cost
      #print(x)
  else:
    for node in graph[x[k-1]]: # 遍歷節(jié)點(diǎn)x[k-1]的鄰接節(jié)點(diǎn)(狀態(tài)空間)
      x[k] = node
      if not conflict(k): # 剪枝
        tsp(k+1)
# 測(cè)試
x[0] = c # 出發(fā)節(jié)點(diǎn):路徑x的第一個(gè)節(jié)點(diǎn)(隨便哪個(gè))
tsp(1)  # 開始處理解x中的第2個(gè)節(jié)點(diǎn)
print(best_x)
print(min_cost)

效果圖

更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

  • Python獲取網(wǎng)段內(nèi)ping通IP的方法

    Python獲取網(wǎng)段內(nèi)ping通IP的方法

    今天小編就為大家分享一篇Python獲取網(wǎng)段內(nèi)ping通IP的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python海龜繪圖詳解

    Python海龜繪圖詳解

    python2.6版本中后引入的一個(gè)簡(jiǎn)單的繪圖工具,叫做海龜繪圖(Turtle Graphics),出現(xiàn)在1966年的Logo計(jì)算機(jī)語言。海龜繪圖(turtle庫)是python的內(nèi)部模塊,使用前導(dǎo)入即可。本文就帶大家深入了解一下海龜繪圖,快來跟隨小編一起學(xué)習(xí)吧
    2021-12-12
  • Python中range()與np.arange()的具體使用

    Python中range()與np.arange()的具體使用

    本文主要介紹了Python中range()與np.arange()的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 如何修改新版Python的pip默認(rèn)安裝路徑

    如何修改新版Python的pip默認(rèn)安裝路徑

    pip安裝的第三方庫默認(rèn)存放在C盤中,為了便于管理和不過度占用C盤空間所以想修改默認(rèn)的pip路徑,這篇文章主要介紹了修改新版Python的pip默認(rèn)安裝路徑的過程,需要的朋友可以參考下
    2024-03-03
  • python3.7 openpyxl 在excel單元格中寫入數(shù)據(jù)實(shí)例

    python3.7 openpyxl 在excel單元格中寫入數(shù)據(jù)實(shí)例

    這篇文章主要介紹了python3.7 openpyxl 在excel單元格中寫入數(shù)據(jù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Python爬蟲框架Scrapy基本用法入門教程

    Python爬蟲框架Scrapy基本用法入門教程

    這篇文章主要介紹了Python爬蟲框架Scrapy基本用法,結(jié)合實(shí)例形式分析了xpath簡(jiǎn)單使用、xmlfeed模板、csvfeed模板及crawlfeed模板簡(jiǎn)單使用方法,需要的朋友可以參考下
    2018-07-07
  • Python實(shí)現(xiàn)購物車程序

    Python實(shí)現(xiàn)購物車程序

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)購物車程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Pandas DataFrame 篩選數(shù)據(jù)幾種方法實(shí)現(xiàn)

    Pandas DataFrame 篩選數(shù)據(jù)幾種方法實(shí)現(xiàn)

    本文介紹了四種在DataFrame中篩選數(shù)據(jù)的方法:根據(jù)字段、標(biāo)簽、位置、布爾索引和通過query進(jìn)行篩選,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • Python清空文件并替換內(nèi)容的實(shí)例

    Python清空文件并替換內(nèi)容的實(shí)例

    今天小編就為大家分享一篇Python清空文件并替換內(nèi)容的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • 最新評(píng)論

    缙云县| 卓尼县| 台湾省| 永州市| 清涧县| 商城县| 阳泉市| 台前县| 天台县| 和田市| 灯塔市| 涞水县| 锡林浩特市| 股票| 上林县| 兴和县| 洮南市| 华容县| 金沙县| 错那县| 泰兴市| 巴南区| 天水市| 耒阳市| 江油市| 新竹市| 荔波县| 兴海县| 秦皇岛市| 大丰市| 柳河县| 石河子市| 富蕴县| 石门县| 海伦市| 容城县| 吐鲁番市| 潮安县| 徐闻县| 井研县| 勃利县|