成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

關于 A*、Dijkstra、BFS 尋路算法的可視化解釋

人工智能 算法
廣度優先搜索、Dijkstra和A*是圖上的三種典型路徑規劃算法。它們都可用于圖搜索,不同之處在于隊列和啟發式函數兩個參數。

本文轉自雷鋒網,如需轉載請至雷鋒網官網申請授權。

廣度優先搜索、Dijkstra和A*是圖上的三種典型路徑規劃算法。它們都可用于圖搜索,不同之處在于隊列和啟發式函數兩個參數。

本項目探索并可視化不同算法如何根據選擇參數進行圖搜索。

算法的一般性原理如下:

將邊界初始化為包含起始節點的隊列。

當邊界隊列不為空時,從隊列中“訪問”并刪除一個“當前”節點,同時將訪問節點的每個鄰居節點添加到隊列,其成本是到達當前節點的成本加上從當前節點訪問鄰居的成本再加上鄰居節點和目標節點的啟發式函數值。其中,啟發式函數是對兩個節點的路徑成本的估計。

存儲訪問路徑(通常存儲在cameFrom圖中),以便后續重建路徑。如果鄰居節點已經在列表中,同時新路徑的成本較低,那么更改其成本。

找到目標路徑(提前退出)或列表為空時,停止算法。

BFS

使用先進先出隊列實現BFS。這種隊列會忽略路徑中鏈接的開銷,并根據跳數進行擴展,因此可以確保找到最短路徑的跳數,而跳數相關的成本。啟發式函數的選擇是任意的,因為在這個過程中其并不起作用。

使用數組可實現先進先出,即將元素附加到末尾并從頭刪除。

BFS演示動圖。注意邊界節點(黃色)是如何在網格中擴展為正方形的。在這里,正方形是相同“跳距”的節點集。

Dijkstra

在圖上使用優先級隊列和始終返回0的啟發式函數,便得到Dijkstra算法

相比于BFS,Dijkstra最大的不同在于考慮了成本。通過該算法,可以根據節點到節點的成本找到最短路徑。

優先級隊列使用數組實現,在每次插入新節點后對該數組進行排序。盡管實現優先級隊列還有其他更高效的方式,但在我們的場景中,數組是足夠快的,而且實現起來也簡單。

關于 A*、Dijkstra、BFS 尋路算法的可視化解釋

Dijkstra展示動畫,注意此時的邊界是一個圓。

A*

為實現A*算法,需要傳遞一個實際啟發式函數,例如兩個節點之間的歐式距離。通過“節點成本”+“節點到目標節點的估算成本”對節點進行加權,通過優先搜索更大可能的節點加快搜索速度。

關于 A*、Dijkstra、BFS 尋路算法的可視化解釋

借助啟發式方法,A*可以比Dijkstra或BFS更快地找到正確路徑。

非允許的啟發式函數

只有應用可允許啟發式函數,A*才能找到最短路徑,這也意味著算法永遠不會高估實際路徑長度。由于歐氏距離是兩點之間的最短距離/路徑,因此歐氏距離絕不會超出。

但如果將其乘以常數k>0會怎樣呢?這樣會高估距離,成為非允許的啟發式函數。

關于 A*、Dijkstra、BFS 尋路算法的可視化解釋

k值越大,算法越容易到達目標,但同時準確性降低,導致生成的路徑并非總是最短的。

算法實現

本項目通過Javascript實現,以便讀者在Web上進行訪問。另外,我使用react渲染UI,使用react-konva渲染圖形。

路徑發現是指接受隊列類型和啟發式函數,并返回另一個函數,即真實路徑發現(稱為currying)。

這樣,用戶每次更改設置后,都會使用確定參數創建一個新的路徑發現函數,并將之用于圖搜索。

為可視化路徑發現的步驟,我使用javascript生成器,這意味著函數返回一個迭代器,而不僅僅是一個值。因此,訪客在每一步都可以生成算法的整個狀態,并將其保存到數組,然后通過頁面頂部的滑塊顯示特定狀態。

此鏈接進入交互演示頁面:https://interactive-pathfinding.netlify.com/

 

責任編輯:張燕妮 來源: 雷鋒網
相關推薦

2023-10-06 23:31:25

可視化Go

2023-09-15 11:32:18

selectGo可視化解釋

2023-09-25 12:45:45

Go 語言可視化sync.Mute

2023-10-20 13:35:19

GoWaitGroup

2020-07-01 09:08:55

神經網絡深度學習網絡

2012-08-13 14:17:35

算法代碼

2017-12-26 14:05:21

潤乾大屏可視化

2017-07-26 15:59:51

尋路算法Dijkstra游戲

2022-07-22 07:59:17

日志方案

2023-12-20 08:35:54

Dijkstra算法A*算法計算機圖形學

2021-02-21 08:11:46

PythonDash工具

2011-05-17 14:11:06

Dijkstra

2023-09-11 10:17:20

Go編程語言

2011-05-17 14:29:29

Dijkstra

2024-08-12 10:52:00

AI模型

2023-03-06 16:07:19

梯度提升算法機器學習

2020-03-11 14:39:26

數據可視化地圖可視化地理信息

2018-10-11 20:47:23

書籍數據可視化數據分析

2009-06-10 13:25:46

RFID發展無線網絡

2022-12-14 17:42:48

軍棋工兵算法
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产日韩欧美中文字幕 | 看片91| 国产精品一区二区在线观看 | 一区二区视频在线观看 | 亚洲精品电影在线观看 | 九九九视频在线 | 成人av一区二区亚洲精 | 狠狠干夜夜草 | 国产成人精品一区二 | 伊人久久大香线 | 久久久久久国产精品mv | 亚洲一区二区视频 | www.亚洲精品 | 久久91| www.操com| 国产韩国精品一区二区三区 | 国产99久久 | 国产性网 | 国产精品自产拍 | 日韩欧美精品 | 在线观看国产视频 | 久久精品国产99国产精品 | 福利视频日韩 | 亚洲天堂免费在线 | 中文字幕人成人 | 欧美激情视频一区二区三区在线播放 | 天天操夜夜看 | 久在线 | 男女羞羞免费视频 | 最新高清无码专区 | 国产一级在线 | 久久久视频在线 | 国产成人精品久久二区二区91 | 国产乱码精品一区二区三区中文 | 久久久久久久国产 | 日韩在线免费视频 | 国产精品久久久久久久久久软件 | 国产精品美女久久久久久久网站 | 久久国产精品久久久久久久久久 | 九九热精品在线 | 国产乱码一区 |