[Python]AGV最佳路徑分析

更新 發佈閱讀 9 分鐘

 AGV最佳路徑分析(自動導引車最佳路徑分析)時,目的是讓 AGV(自動導引車)在工廠、倉庫或其他環境中,找到最短、最有效率且安全的路徑完成任務。


什麼是AGV?

AGV 是一種自動駕駛的小車,可以運送物品,類似於會自己走路的小機器人。比如在超市運送牛奶,或者在工廠裡搬運零件。


什麼是最佳路徑?

想像我們要去市場買菜,走最近的路能節省時間,但如果最近的路塞車,可能會選擇另一條更順暢的路。AGV 的「最佳路徑」也是一樣,它需要計算:

  1. 最短的路程:走的路最短。
  2. 最少的障礙物:避免碰到其他車或堵住的地方。
  3. 節省時間和電量:用最省力的方法完成工作。

怎麼計算最佳路徑?

AGV 會用一些「智慧」的方式來決定路徑,類似於導航軟體。這些方法包括:

  1. 地圖和感測器
    • AGV 會先知道整個環境的地圖(例如路線、障礙物)。
    • 用感測器檢查是否有其他車子或障礙。
  2. 演算法
    • Dijkstra 演算法:像我們用最快路徑算出從家裡到市場的方式。
    • A 演算法*:更聰明的計算,考慮時間和路線的優劣。
    • 動態調整:遇到意外時,例如路線被堵住,AGV 會重新選路。
  3. 多車協作
    • 如果有很多 AGV 一起工作,它們會「溝通」,避免彼此撞到,並分配不同的路徑。

我們可以利用 Python 實作一些經典的路徑搜尋演算法,比如 Dijkstra 演算法 和 A* 演算法,這些是 AGV 路徑規劃中常用的核心技術。

以下我會分別用這兩個演算法來說明如何實現,以及如何應用在簡單的地圖上。


Dijkstra 演算法實作

Dijkstra 是用來找到從一個起點到其他所有點的最短路徑的演算法,適合靜態地圖。

實作步驟

  1. 定義地圖:使用圖(Graph)表示地圖。
  2. 初始化距離:起點距離設為 0,其餘點設為無限大。
  3. 遍歷節點:逐步找出距離最短的節點,更新相鄰節點的距離。
  4. 結束條件:所有節點被訪問完成。

Dijkstra 演算法輸出

這段輸出是執行 Dijkstra 演算法 後的結果,表示從起點節點 A 出發,到達其他節點(BCD)的最短距離。

Shortest distances from node A: {'A': 0, 'B': 1, 'C': 3, 'D': 4}

輸出的含義

  • A: 0
    • 從 A 到自己的距離是 0,因為起點本身不需要移動。
  • B: 1
    • 從 A 到 B 的最短距離是 1。
    • 可能的路徑:直接從 A -> B,成本是 1(根據圖上的邊的權重)。
  • C: 3
    • 從 A 到 C 的最短距離是 3。
    • 可能的路徑:從 A -> B -> C,總成本是 1(A -> B) + 2(B -> C)= 3。注意,直接從 A -> C 的成本是 4(比 3 大),因此不選擇。
  • D: 4
    • 從 A 到 D 的最短距離是 4。
    • 可能的路徑:從 A -> B -> C -> D,總成本是 1(A -> B) + 2(B -> C) + 1(C -> D)= 4。同樣,直接從 A -> B -> D 的成本是 6(比 4 大),因此也不選擇。

如何解釋最短距離?

  1. 最短距離不是直接路徑,而是代價最低的路徑
    • 演算法會自動比較所有可能的路徑,選擇最小的累積距離。
  2. 步驟總結
    • 起點 A 距離初始化為 0,其餘節點距離為無限大。
    • 更新與 A 相鄰的節點距離(B = 1,C = 4)。
    • 確定 B 是下一個最短距離的節點,進一步更新相鄰節點(C = 3,D = 6)。
    • 繼續更新直到所有節點的最短距離被確定。

如何應用這些結果?

在 AGV 的情境中:

  • 如果起點是倉庫入口 A,需要搬運物品到目的地 D
    • AGV 會選擇路徑 A -> B -> C -> D,因為這條路徑的總距離是最短的(代價 4)。
  • 同樣地,如果要搬運到 B 或 C,系統會提供最短的距離和路徑,節省時間與能量。

這樣的分析可以幫助 AGV 在地圖上選擇高效的路徑完成任務!


*演算法實作

A* 是一種搜尋演算法,除了最短距離,還會考慮目標的估計距離(啟發式函數)。

實作步驟

  1. 定義地圖和啟發式函數
  2. 初始化開放節點(Open Set)和已訪問節點(Closed Set)
  3. 計算代價函數 f(n) = g(n) + h(n)
    • g(n):起點到當前節點的實際距離。
    • h(n):當前節點到目標的估計距離。
  4. 重複尋找最小代價路徑,直到找到目標或無法到達


*演算法輸出*

這段輸出是執行* 演算法 後的結果,表示從起點節點 A 出發,到達其他節點(BCD)的最短距離。

Shortest path using A* from A to D: ['A', 'B', 'C', 'D']

輸出的含義

  • ['A', 'B', 'C', 'D'] 是經過 A* 演算法計算後的 最佳路徑,其中:
    • A 是起點。
    • B 是從 A 出發後的下一個節點。
    • C 是從 B 到達的下一個節點。
    • D 是最終目標節點(終點)。

為什麼是這條路徑?

A* 演算法根據以下公式計算每個節點的總代價:

f(n)=g(n)+h(n)f(n)=g(n)+h(n)

  • f(n): 節點的總代價(用來排序的依據)。
  • g(n): 從起點 A 到當前節點的實際距離。
  • h(n): 從當前節點到目標節點 D 的 估計距離(由啟發式函數計算)。

A* 的目的是找到總代價最小的路徑。


步驟詳細解析

  1. 起點 A 的計算
    • g(A) = 0,因為是起點。
    • h(A) = 7(啟發式函數的值,表示從 A 到 D 的估計距離)。
    • f(A) = g(A) + h(A) = 0 + 7 = 7。
  2. 選擇相鄰節點 B 和 C
    選擇 C,因為 f(C) 最小。
    • 從 A 到 B:g(B) = g(A) + weight(A, B) = 0 + 1 = 1h(B) = 6(估計距離)。f(B) = g(B) + h(B) = 1 + 6 = 7。
    • 從 A 到 C:g(C) = g(A) + weight(A, C) = 0 + 4 = 4h(C) = 2(估計距離)。f(C) = g(C) + h(C) = 4 + 2 = 6。
  3. 探索 C 的相鄰節點
    • 從 C 到 D:g(D) = g(C) + weight(C, D) = 4 + 1 = 5h(D) = 1(估計距離)。f(D) = g(D) + h(D) = 5 + 1 = 6。
  4. 探索 B 的相鄰節點
    • 從 B 到 C:g(C) = g(B) + weight(B, C) = 1 + 2 = 3(比原來更短,因此更新)。
    • 從 B 到 D:g(D) = g(B) + weight(B, D) = 1 + 5 = 6(比目前的代價高,不更新)。
  5. 最終路徑 ['A', 'B', 'C', 'D']
    • 經過更新,選擇代價最低的路徑。

與 Dijkstra 演算法的區別

  1. Dijkstra 演算法
    • 僅考慮 g(n),即實際距離。
    • 不包含目標的估計距離,因此計算的範圍更大。
    • 結果是最短路徑,但效率相對較低。


  1. A* 演算法
    • 考慮了 g(n) 和 h(n),因此只探索目標附近的節點。
    • 計算效率更高,特別是在大範圍圖上效果更明顯。

應用場景

  • AGV 路徑規劃
    • 如果 AGV 需要從倉庫入口 A 搬運物品到工作站 D,A* 演算法會提供 最優路徑:A -> B -> C -> D,減少行駛距離和時間。
  • 遊戲中的導航
    • NPC(非玩家角色)可以使用 A* 找到從起始位置到目標點的最佳移動路徑。


其他相關文章


[Python] A*(A-Star) 演算法實作

[Python]Dijkstra 演算法實作

留言
avatar-img
螃蟹_crab的沙龍
160會員
315內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。 興趣是攝影,踏青,探索未知領域。 人生就是不斷的挑戰及自我認清,希望老了躺在床上不會後悔自己什麼都沒做。
你可能也想看
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
前言 不知道大家在搭大眾運輸時,更偏好哪一種選擇呢? 繞路但可以一班車抵達,還是直線前進但中間需要換車呢? 假如今天把「目的地」換成我們設定的「目標」,你會選擇前者還是後者呢?
Thumbnail
前言 不知道大家在搭大眾運輸時,更偏好哪一種選擇呢? 繞路但可以一班車抵達,還是直線前進但中間需要換車呢? 假如今天把「目的地」換成我們設定的「目標」,你會選擇前者還是後者呢?
Thumbnail
在當今快速發展的城市環境中,交通擁堵已成為一個日益嚴重的問題。為了解決這一挑戰,我們引入了「流暢通行智控網」,一個創新的智能交通管理系統,旨在通過高度自動化和智能化技術,實現更流暢、更高效的城市交通流動。
Thumbnail
在當今快速發展的城市環境中,交通擁堵已成為一個日益嚴重的問題。為了解決這一挑戰,我們引入了「流暢通行智控網」,一個創新的智能交通管理系統,旨在通過高度自動化和智能化技術,實現更流暢、更高效的城市交通流動。
Thumbnail
深圳讓我印象深刻的是滿街的電動車。此次於深圳南山區實際道路,體驗百度Apollo旗下的自動駕駛出行服務平台「蘿蔔快跑」,依賴雷達、光學雷達、GPS和電腦視覺等技術來感測環境,再加上大數據和人工智慧來按照預先設定的邏輯運行。看著方向盤自顧自兒地流利轉動著,加油、煞車全由電腦操控。 這次參加了「2
Thumbnail
深圳讓我印象深刻的是滿街的電動車。此次於深圳南山區實際道路,體驗百度Apollo旗下的自動駕駛出行服務平台「蘿蔔快跑」,依賴雷達、光學雷達、GPS和電腦視覺等技術來感測環境,再加上大數據和人工智慧來按照預先設定的邏輯運行。看著方向盤自顧自兒地流利轉動著,加油、煞車全由電腦操控。 這次參加了「2
Thumbnail
這是輕軌嗎?可是他的軌道為什麼在中間,而且只有一根?而且頭上的架空線不見了! 這是公車嗎?可是為什麼車廂這麼長?而且中間還放了一個軌道? 這就是近幾年來新發展出的系統,
Thumbnail
這是輕軌嗎?可是他的軌道為什麼在中間,而且只有一根?而且頭上的架空線不見了! 這是公車嗎?可是為什麼車廂這麼長?而且中間還放了一個軌道? 這就是近幾年來新發展出的系統,
Thumbnail
對於如何到達目的地這件事,現在有GOOGLE地圖服務,只要點選行車路線這個選項之後,就會顯示出各種從現在位置到達目的地的方式。看是要開車或是搭乘大眾運輸工具前往都行,當然也可以步行前往,看看哪一種方式最符合自己當下的需求,然後就可以照著建議的路線去做。例如要從台北的民權西路捷運站前往台北車站,可以搭
Thumbnail
對於如何到達目的地這件事,現在有GOOGLE地圖服務,只要點選行車路線這個選項之後,就會顯示出各種從現在位置到達目的地的方式。看是要開車或是搭乘大眾運輸工具前往都行,當然也可以步行前往,看看哪一種方式最符合自己當下的需求,然後就可以照著建議的路線去做。例如要從台北的民權西路捷運站前往台北車站,可以搭
Thumbnail
續前言交通順暢動線與停放便利&明顯指引圖示號標誌和人車分流系統,前已敍述分享8篇淺見,今續人車分流分享感受。 交通構成要素是道路規劃設施完善為優先,緊鄰是圖示號標誌指引有無完整串連,尤其是紅綠燈各啟動秒數會牽引前後路口動線順暢或走走停停? 次為各行其道設施明確?內為快車道或超車道用,次為慢車道就含有
Thumbnail
續前言交通順暢動線與停放便利&明顯指引圖示號標誌和人車分流系統,前已敍述分享8篇淺見,今續人車分流分享感受。 交通構成要素是道路規劃設施完善為優先,緊鄰是圖示號標誌指引有無完整串連,尤其是紅綠燈各啟動秒數會牽引前後路口動線順暢或走走停停? 次為各行其道設施明確?內為快車道或超車道用,次為慢車道就含有
Thumbnail
自駕車近年在全球市場討論譁然,好不容易製造出來了,卻事故頻頻,或只能在特定路段開啟自駕模式,究竟我們離暢行無阻的自動駕駛還有多遠呢? 交通系統分陸、海、空場域,其中海上的船隻與天上的飛機早就有自駕功能了,原因也不難懂,它們行經的航線開闊無阻,只要雷達一掃,都可以預知行進過程中的鳥群或暗礁。
Thumbnail
自駕車近年在全球市場討論譁然,好不容易製造出來了,卻事故頻頻,或只能在特定路段開啟自駕模式,究竟我們離暢行無阻的自動駕駛還有多遠呢? 交通系統分陸、海、空場域,其中海上的船隻與天上的飛機早就有自駕功能了,原因也不難懂,它們行經的航線開闊無阻,只要雷達一掃,都可以預知行進過程中的鳥群或暗礁。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News