[Python]AGV最佳路徑分析

更新於 2024/12/02閱讀時間約 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
128會員
209內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
Dijkstra 演算法實作 Dijkstra 是用來找到從一個起點到其他所有點的最短路徑的演算法,適合靜態地圖。 實作步驟 定義地圖:使用圖(Graph)表示地圖。 初始化距離:起點距離設為 0,其餘點設為無限大。 遍歷節點:逐步找出距離最短的節點,更新相鄰節點的距離。 結束條件:所有
A* (A-Star)演算法實作 A* (A-Star)是一種啟發式搜尋演算法,除了最短距離,還會考慮目標的估計距離(啟發式函數)。 實作步驟 定義地圖和啟發式函數。 初始化開放節點(Open Set)和已訪問節點(Closed Set)。 計算代價函數 f(n) = g(n) + h(n
Dijkstra 演算法實作 Dijkstra 是用來找到從一個起點到其他所有點的最短路徑的演算法,適合靜態地圖。 實作步驟 定義地圖:使用圖(Graph)表示地圖。 初始化距離:起點距離設為 0,其餘點設為無限大。 遍歷節點:逐步找出距離最短的節點,更新相鄰節點的距離。 結束條件:所有
A* (A-Star)演算法實作 A* (A-Star)是一種啟發式搜尋演算法,除了最短距離,還會考慮目標的估計距離(啟發式函數)。 實作步驟 定義地圖和啟發式函數。 初始化開放節點(Open Set)和已訪問節點(Closed Set)。 計算代價函數 f(n) = g(n) + h(n
你可能也想看
Google News 追蹤
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
最愜意的季節, 從一個火車站徒步到另一個火車站, 直線不是最佳的途徑, 轉入居住區穿巷越弄, 一條街走過一條街, 沒有固定路線, 悠閑地前行。 時光緩緩, 隨時停下腳步, 吃碗透心涼的傳統剉冰, 坐在路邊攤, 來一份炭烤香腸加黑輪片, 喝上一口甘甜柴魚湯, 靜下來品味當
Thumbnail
1.選擇提早準備路程 2.選擇公車代替捷運 在台北市移動,幾乎都選擇捷運,再走路到達目的地。
Thumbnail
前言 不知道大家在搭大眾運輸時,更偏好哪一種選擇呢? 繞路但可以一班車抵達,還是直線前進但中間需要換車呢? 假如今天把「目的地」換成我們設定的「目標」,你會選擇前者還是後者呢?
基於節省資源與運動的好習慣 上下班或外出,能騎腳踏車就騎腳踏車 很遠的話,則盡量搭乘大眾運輸工具 上面的觀念,只是提醒大家隨時放在心上喔! 盡力做喔! 我會盡力想看看上班日能否騎腳踏車出門,如果當日還有其他地方要去,那就不騎腳踏車上班。或需趕時間回家的日子,就不要騎腳踏車上班。 自己衡量
Thumbnail
近期在機場,越來越常看到有人騎「電動行李箱車」,現在台灣也買的到,我們實際測試,速度最快可達時速13公里,不過價格要價近2萬元,但這種車可以騎上馬路嗎?據了解,這一種行李箱車,屬於個人行動器具,因此騎上道路,是依照各縣市自行規定,但大多縣市都不開放騎上馬路.騎樓等場域,只能在封閉空間,而且最大行
每回到河內出差,交通大部分都是叫Grab,拜訪客戶則是讓公司租一天車,這回結束行程準備返回南部,為了節省經費訂了較晚的飛機,趁著還有些時間,去河內景點走走。 由於是自己的行程,也就不便報銷,思索交通時,用Google Map一查,公車方便又省錢。 河內的公車路線可說四通八達,但要單獨查找路線對於
Thumbnail
MaaS平臺旨在提供無縫的出行體驗,整合多種交通工具,透過單一應用程式查詢、預訂和支付多種交通工具的服務,例如捷運、公車、共享單車、計程車等。 透過MaaS平臺可以降低交通擁堵,減少碳排放,促進永續發展。 未來交通發展的重要趨勢。
Thumbnail
用車輪去丈量一個地方,不管是在稻田裡飛馳,還是在花海裡徜徉,又或是穿梭在公路與海同行,沿路的風景就在車輪下徐徐展開,這一路靠自己踩出來的風景,絕對讓人難忘。
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
最愜意的季節, 從一個火車站徒步到另一個火車站, 直線不是最佳的途徑, 轉入居住區穿巷越弄, 一條街走過一條街, 沒有固定路線, 悠閑地前行。 時光緩緩, 隨時停下腳步, 吃碗透心涼的傳統剉冰, 坐在路邊攤, 來一份炭烤香腸加黑輪片, 喝上一口甘甜柴魚湯, 靜下來品味當
Thumbnail
1.選擇提早準備路程 2.選擇公車代替捷運 在台北市移動,幾乎都選擇捷運,再走路到達目的地。
Thumbnail
前言 不知道大家在搭大眾運輸時,更偏好哪一種選擇呢? 繞路但可以一班車抵達,還是直線前進但中間需要換車呢? 假如今天把「目的地」換成我們設定的「目標」,你會選擇前者還是後者呢?
基於節省資源與運動的好習慣 上下班或外出,能騎腳踏車就騎腳踏車 很遠的話,則盡量搭乘大眾運輸工具 上面的觀念,只是提醒大家隨時放在心上喔! 盡力做喔! 我會盡力想看看上班日能否騎腳踏車出門,如果當日還有其他地方要去,那就不騎腳踏車上班。或需趕時間回家的日子,就不要騎腳踏車上班。 自己衡量
Thumbnail
近期在機場,越來越常看到有人騎「電動行李箱車」,現在台灣也買的到,我們實際測試,速度最快可達時速13公里,不過價格要價近2萬元,但這種車可以騎上馬路嗎?據了解,這一種行李箱車,屬於個人行動器具,因此騎上道路,是依照各縣市自行規定,但大多縣市都不開放騎上馬路.騎樓等場域,只能在封閉空間,而且最大行
每回到河內出差,交通大部分都是叫Grab,拜訪客戶則是讓公司租一天車,這回結束行程準備返回南部,為了節省經費訂了較晚的飛機,趁著還有些時間,去河內景點走走。 由於是自己的行程,也就不便報銷,思索交通時,用Google Map一查,公車方便又省錢。 河內的公車路線可說四通八達,但要單獨查找路線對於
Thumbnail
MaaS平臺旨在提供無縫的出行體驗,整合多種交通工具,透過單一應用程式查詢、預訂和支付多種交通工具的服務,例如捷運、公車、共享單車、計程車等。 透過MaaS平臺可以降低交通擁堵,減少碳排放,促進永續發展。 未來交通發展的重要趨勢。
Thumbnail
用車輪去丈量一個地方,不管是在稻田裡飛馳,還是在花海裡徜徉,又或是穿梭在公路與海同行,沿路的風景就在車輪下徐徐展開,這一路靠自己踩出來的風景,絕對讓人難忘。