[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
128會員
215內容數
本業是影像辨識軟體開發,閒暇時間進修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
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
最愜意的季節, 從一個火車站徒步到另一個火車站, 直線不是最佳的途徑, 轉入居住區穿巷越弄, 一條街走過一條街, 沒有固定路線, 悠閑地前行。 時光緩緩, 隨時停下腳步, 吃碗透心涼的傳統剉冰, 坐在路邊攤, 來一份炭烤香腸加黑輪片, 喝上一口甘甜柴魚湯, 靜下來品味當
Thumbnail
1.選擇提早準備路程 2.選擇公車代替捷運 在台北市移動,幾乎都選擇捷運,再走路到達目的地。
Thumbnail
前言 不知道大家在搭大眾運輸時,更偏好哪一種選擇呢? 繞路但可以一班車抵達,還是直線前進但中間需要換車呢? 假如今天把「目的地」換成我們設定的「目標」,你會選擇前者還是後者呢?
基於節省資源與運動的好習慣 上下班或外出,能騎腳踏車就騎腳踏車 很遠的話,則盡量搭乘大眾運輸工具 上面的觀念,只是提醒大家隨時放在心上喔! 盡力做喔! 我會盡力想看看上班日能否騎腳踏車出門,如果當日還有其他地方要去,那就不騎腳踏車上班。或需趕時間回家的日子,就不要騎腳踏車上班。 自己衡量
Thumbnail
近期在機場,越來越常看到有人騎「電動行李箱車」,現在台灣也買的到,我們實際測試,速度最快可達時速13公里,不過價格要價近2萬元,但這種車可以騎上馬路嗎?據了解,這一種行李箱車,屬於個人行動器具,因此騎上道路,是依照各縣市自行規定,但大多縣市都不開放騎上馬路.騎樓等場域,只能在封閉空間,而且最大行
每回到河內出差,交通大部分都是叫Grab,拜訪客戶則是讓公司租一天車,這回結束行程準備返回南部,為了節省經費訂了較晚的飛機,趁著還有些時間,去河內景點走走。 由於是自己的行程,也就不便報銷,思索交通時,用Google Map一查,公車方便又省錢。 河內的公車路線可說四通八達,但要單獨查找路線對於
Thumbnail
MaaS平臺旨在提供無縫的出行體驗,整合多種交通工具,透過單一應用程式查詢、預訂和支付多種交通工具的服務,例如捷運、公車、共享單車、計程車等。 透過MaaS平臺可以降低交通擁堵,減少碳排放,促進永續發展。 未來交通發展的重要趨勢。
Thumbnail
用車輪去丈量一個地方,不管是在稻田裡飛馳,還是在花海裡徜徉,又或是穿梭在公路與海同行,沿路的風景就在車輪下徐徐展開,這一路靠自己踩出來的風景,絕對讓人難忘。
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
最愜意的季節, 從一個火車站徒步到另一個火車站, 直線不是最佳的途徑, 轉入居住區穿巷越弄, 一條街走過一條街, 沒有固定路線, 悠閑地前行。 時光緩緩, 隨時停下腳步, 吃碗透心涼的傳統剉冰, 坐在路邊攤, 來一份炭烤香腸加黑輪片, 喝上一口甘甜柴魚湯, 靜下來品味當
Thumbnail
1.選擇提早準備路程 2.選擇公車代替捷運 在台北市移動,幾乎都選擇捷運,再走路到達目的地。
Thumbnail
前言 不知道大家在搭大眾運輸時,更偏好哪一種選擇呢? 繞路但可以一班車抵達,還是直線前進但中間需要換車呢? 假如今天把「目的地」換成我們設定的「目標」,你會選擇前者還是後者呢?
基於節省資源與運動的好習慣 上下班或外出,能騎腳踏車就騎腳踏車 很遠的話,則盡量搭乘大眾運輸工具 上面的觀念,只是提醒大家隨時放在心上喔! 盡力做喔! 我會盡力想看看上班日能否騎腳踏車出門,如果當日還有其他地方要去,那就不騎腳踏車上班。或需趕時間回家的日子,就不要騎腳踏車上班。 自己衡量
Thumbnail
近期在機場,越來越常看到有人騎「電動行李箱車」,現在台灣也買的到,我們實際測試,速度最快可達時速13公里,不過價格要價近2萬元,但這種車可以騎上馬路嗎?據了解,這一種行李箱車,屬於個人行動器具,因此騎上道路,是依照各縣市自行規定,但大多縣市都不開放騎上馬路.騎樓等場域,只能在封閉空間,而且最大行
每回到河內出差,交通大部分都是叫Grab,拜訪客戶則是讓公司租一天車,這回結束行程準備返回南部,為了節省經費訂了較晚的飛機,趁著還有些時間,去河內景點走走。 由於是自己的行程,也就不便報銷,思索交通時,用Google Map一查,公車方便又省錢。 河內的公車路線可說四通八達,但要單獨查找路線對於
Thumbnail
MaaS平臺旨在提供無縫的出行體驗,整合多種交通工具,透過單一應用程式查詢、預訂和支付多種交通工具的服務,例如捷運、公車、共享單車、計程車等。 透過MaaS平臺可以降低交通擁堵,減少碳排放,促進永續發展。 未來交通發展的重要趨勢。
Thumbnail
用車輪去丈量一個地方,不管是在稻田裡飛馳,還是在花海裡徜徉,又或是穿梭在公路與海同行,沿路的風景就在車輪下徐徐展開,這一路靠自己踩出來的風景,絕對讓人難忘。