欧美第十页,AA视频aa,肏比视频网站,老鸭窝在线观看免费视频

路線搜索(搜索路線地圖)

前沿拓展:

路線搜索

您可以直接搜索到目的地,第二點(diǎn)擊該位置,選擇搜索附近,第二選擇酒店即可。在搜索到的結(jié)果中,選擇投取衡矛向破常志川你想要去的酒店,第二直接導(dǎo)航前去即可。


我們不論在游戲還是在機(jī)器人中,經(jīng)常會(huì)碰到各種路徑搜索算法,或者說最短路徑查找,這里做個(gè)小結(jié)。我們第一要從經(jīng)典的廣度優(yōu)先BFS和深度優(yōu)先DFS說起。

不過很多地方都會(huì)用到openlist,closelist兩個(gè)表,這里做個(gè)說明,open表里面放的是待擴(kuò)展節(jié)點(diǎn),close表里面放的是已經(jīng)擴(kuò)展過的節(jié)點(diǎn),通常就是一個(gè)沒有搜索過的節(jié)點(diǎn)會(huì)先放如open表中,后面從open表中將其取出進(jìn)行擴(kuò)展,第二丟到close表中。

DFS深度優(yōu)先搜索

這種搜索算法算是最簡單的,將open表當(dāng)作棧使用,將A點(diǎn)入棧,第二從棧頂取出一個(gè)元素x,擴(kuò)展其鄰域,將合規(guī)的鄰域節(jié)點(diǎn)放入open棧中,將x丟到close表中,直到x是是終點(diǎn)才退出

合規(guī)的判定比較簡單,一般來說就是沒有搜索過的節(jié)點(diǎn),即不在close表中,也不在open表中

一句話形象概括的話,就是滿屏都是食物的一條貪食蛇,每吃一格食物就增長一節(jié),從A爬到B,就勝利了。

貪心算法

DFS的缺點(diǎn)是取鄰域中,隨意一個(gè)節(jié)點(diǎn)進(jìn)行擴(kuò)展。如果我們?nèi)藶榧尤胍粋€(gè)預(yù)估模型,預(yù)估到終點(diǎn)的距離,這樣就可以取鄰域中離終點(diǎn)最近的節(jié)點(diǎn)進(jìn)行擴(kuò)展,形成貪心搜索。

預(yù)估模型是人為加入的,常用的如曼哈頓距離。這種人為加入模型影響搜索的方式又被稱為啟發(fā)式搜索,加入的預(yù)估模型被稱為啟發(fā)函數(shù),它能根據(jù)當(dāng)前位置得到一個(gè)啟發(fā)值,指導(dǎo)后續(xù)路徑的選擇

BFS廣度優(yōu)先

這種搜索算法也比較簡單,將open表當(dāng)作隊(duì)列使用,將A點(diǎn)加入隊(duì)列尾部,第二從隊(duì)列頭部取出一個(gè)元素x,擴(kuò)展其鄰域,將合規(guī)的鄰域節(jié)點(diǎn)放入open隊(duì)列中,將x丟到close表中,直到x是終點(diǎn)才退出

實(shí)際上和DFS很相似,只不過DFS用的是后進(jìn)先出的棧,由于最后進(jìn)入的都是該節(jié)點(diǎn)的鄰域,所以出來的也是鄰域節(jié)點(diǎn)。而BFS使用的是先進(jìn)先出隊(duì)列,比如最早進(jìn)去的是A的四個(gè)鄰域,取出一個(gè)鄰域擴(kuò)展后又丟進(jìn)隊(duì)列,但是下一個(gè)取出的還是A的某個(gè)鄰域點(diǎn),只有該組鄰域點(diǎn)都拿完才能輪到下一組。

一句話形容的話,就是從A點(diǎn)開始像浸水一樣,沿著四面八方擴(kuò)展,直到找到B點(diǎn)

Dijkstra

迪克斯特拉也比較簡單,理解了BFS,基本上也就理解了Dijkstra,也可以說它是BFS的擴(kuò)展:

將A點(diǎn)放入open表,第二從open表中取出離A點(diǎn)最近的位置x,進(jìn)行鄰域擴(kuò)展,第二將合規(guī)的鄰域節(jié)點(diǎn)丟入open表中,第二將x丟入close表

實(shí)際上,如果節(jié)點(diǎn)和其鄰域節(jié)點(diǎn)的距離是固定常數(shù),Dijkstra便退化為了BFS,若不是固定常數(shù),則有細(xì)微差異,BFS是直接默認(rèn)相鄰節(jié)點(diǎn)距離相等,而Dijkstra則需要判斷:

若x的鄰域節(jié)點(diǎn)P已經(jīng)在open表中,且x到A的距離 + x到鄰域點(diǎn)P的距離 > P到A的距離,則重新更新P的距離。

此外,合規(guī)的判定和之前一致,即未搜索過的點(diǎn)即合規(guī),即不在open和close表中

A* 算法

A star算法也是比較常見的算法,它也是在Dijkstra的基礎(chǔ)上,引入一個(gè)人為的AB距離估計(jì)模型:f(x)=g(x)+h(x)

啟發(fā)函數(shù)f(x)由兩部分構(gòu)成,g(x)是位置x到起點(diǎn)A的距離,h(x)是位置x到終點(diǎn)B的距離。其中只有h(x)項(xiàng)是預(yù)估項(xiàng),或者說啟發(fā)項(xiàng)。

A* 算法和Dijkstra相似,只不過Dijkstra中只有g(shù)(x)這一項(xiàng),而A*引入了預(yù)估項(xiàng)h(x),其余和Dijkstra基本一樣,將A點(diǎn)放入open表,第二從open表中取出f(x)最小的位置x,進(jìn)行鄰域擴(kuò)展,第二將合規(guī)的鄰域節(jié)點(diǎn)丟入open表中,第二將x丟入close表

D*算法

又稱為動(dòng)態(tài)A* 算法,它用了一個(gè)更為先進(jìn)的預(yù)估模型,它的預(yù)估項(xiàng)h(x)是通過反向Dijkstra得到的。

首次它便使用Dijkstra進(jìn)行反向搜索,從B開始,直到搜索到了A,并記錄各點(diǎn)x到B的距離為h(x),在A*中,我們的啟發(fā)函數(shù)是f(x)=g(x)+h(x),由于h(x)是準(zhǔn)確的測(cè)量,假設(shè)機(jī)器人走到位置x,第二檢查所有合規(guī)鄰域y,由于的g(y)都相等g(y)=g(x)+1,所以找f(y)=g(y)+h(y)最小等價(jià)于找h(y)最小。在算法中我們將所有h(y)記為k(y),這樣從f(y)最小演變?yōu)檎襨(y)最小

實(shí)際上,D* 算法用在機(jī)器人實(shí)時(shí)尋路上,比如當(dāng)前位置是A,目的地是B,最開始實(shí)際上找的是A到B的最短路徑,當(dāng)機(jī)器人走到位置x=A+1時(shí),實(shí)際上機(jī)器人要尋找的是當(dāng)前位置x到B的最短路徑,所以才有所有鄰域y到x的距離g(y)=1,找f(y)=g(y)+h(y)最小等價(jià)于找h(y)最小,這便是所謂動(dòng)態(tài)A*的動(dòng)態(tài)之處:將A到B的最短路徑變成當(dāng)前位置x到離B最近的鄰域y的最短路徑

用反向Dijkstra計(jì)算出h(x)預(yù)估后,從當(dāng)前位置x開始,取出鄰域中k(y)最小的位置y,第二機(jī)器人移動(dòng)到y(tǒng),當(dāng)前位置x=y,開啟下一輪搜索

但是如果發(fā)現(xiàn)路徑上有新的障礙點(diǎn)了,則需要重新更新受到影響的點(diǎn)的距離,所謂受到影響也就是父節(jié)點(diǎn)為障礙物的節(jié)點(diǎn)。第二使用一些算法更新那些受到影響的預(yù)估h(x)值即可。

即令屬于新增障礙物的所有位置o的h(o)=∞,并將其鄰域受到影響的點(diǎn)的h值也標(biāo)為∞,放入open表,直到影響擴(kuò)散至機(jī)器人當(dāng)前位置x

受到影響的點(diǎn)分兩種情況:在障礙物中間(C在**位置)、在障礙物邊緣(C在橙色位置)

受到障礙影響的點(diǎn),h值處于上升狀態(tài),判斷標(biāo)準(zhǔn)即 k(x)<h(x),**點(diǎn)的鄰域節(jié)點(diǎn)y若未受到影響即:h(y)<=k(y),且可以降低其h值:h(y)+c(x,y)<h(x) ,則將y點(diǎn)作為其父節(jié)點(diǎn)并更新其h值

實(shí)際上也就是取**點(diǎn)集里,按k值從小到大進(jìn)行鄰域擴(kuò)展,更新h值。更新完該**點(diǎn)后,最靠近該點(diǎn)那個(gè)橙色點(diǎn)又將變成了**點(diǎn)

更新h后,對(duì)當(dāng)前節(jié)點(diǎn)進(jìn)行搜索鄰域,進(jìn)行后續(xù)的傳播擴(kuò)展。這里就不詳細(xì)介紹了。

拓展知識(shí):

路線搜索

使用百度地圖查詢出現(xiàn)路線的方法如下:
打開百度瀏覽器,第二在百度首頁選中“地圖”。如下所示:
點(diǎn)擊“地圖”,即可進(jìn)入百度地圖首頁。如下圖所示:
進(jìn)入百度地圖的首頁后,可以看到搜索欄底下有三個(gè)功能:搜索、公交、駕車;左側(cè)則是一些常見的餐飲等。
搜索目的地,查看周圍環(huán)境和交通狀況。
搜索出來后可以看到左側(cè)欄目是標(biāo)記地點(diǎn)的符號(hào),右側(cè)是搜索地點(diǎn)的放大地圖,左側(cè)的標(biāo)記符號(hào)在右側(cè)的地點(diǎn)會(huì)看到具體的標(biāo)記位置。
點(diǎn)擊標(biāo)記點(diǎn)后,會(huì)彈出信息窗口,詳細(xì)介紹標(biāo)記點(diǎn)的地點(diǎn)名稱和相關(guān)信息以及附上圖片。
在搜索攔下,點(diǎn)擊公交,即可進(jìn)行兩個(gè)地點(diǎn)的公交路線搜索查詢,并在地圖顯示出來。這時(shí)就有了出行路線。

前沿拓展:

路線搜索

您可以直接搜索到目的地,第二點(diǎn)擊該位置,選擇搜索附近,第二選擇酒店即可。在搜索到的結(jié)果中,選擇投取衡矛向破常志川你想要去的酒店,第二直接導(dǎo)航前去即可。


我們不論在游戲還是在機(jī)器人中,經(jīng)常會(huì)碰到各種路徑搜索算法,或者說最短路徑查找,這里做個(gè)小結(jié)。我們第一要從經(jīng)典的廣度優(yōu)先BFS和深度優(yōu)先DFS說起。

不過很多地方都會(huì)用到openlist,closelist兩個(gè)表,這里做個(gè)說明,open表里面放的是待擴(kuò)展節(jié)點(diǎn),close表里面放的是已經(jīng)擴(kuò)展過的節(jié)點(diǎn),通常就是一個(gè)沒有搜索過的節(jié)點(diǎn)會(huì)先放如open表中,后面從open表中將其取出進(jìn)行擴(kuò)展,第二丟到close表中。

DFS深度優(yōu)先搜索

這種搜索算法算是最簡單的,將open表當(dāng)作棧使用,將A點(diǎn)入棧,第二從棧頂取出一個(gè)元素x,擴(kuò)展其鄰域,將合規(guī)的鄰域節(jié)點(diǎn)放入open棧中,將x丟到close表中,直到x是是終點(diǎn)才退出

合規(guī)的判定比較簡單,一般來說就是沒有搜索過的節(jié)點(diǎn),即不在close表中,也不在open表中

一句話形象概括的話,就是滿屏都是食物的一條貪食蛇,每吃一格食物就增長一節(jié),從A爬到B,就勝利了。

貪心算法

DFS的缺點(diǎn)是取鄰域中,隨意一個(gè)節(jié)點(diǎn)進(jìn)行擴(kuò)展。如果我們?nèi)藶榧尤胍粋€(gè)預(yù)估模型,預(yù)估到終點(diǎn)的距離,這樣就可以取鄰域中離終點(diǎn)最近的節(jié)點(diǎn)進(jìn)行擴(kuò)展,形成貪心搜索。

預(yù)估模型是人為加入的,常用的如曼哈頓距離。這種人為加入模型影響搜索的方式又被稱為啟發(fā)式搜索,加入的預(yù)估模型被稱為啟發(fā)函數(shù),它能根據(jù)當(dāng)前位置得到一個(gè)啟發(fā)值,指導(dǎo)后續(xù)路徑的選擇

BFS廣度優(yōu)先

這種搜索算法也比較簡單,將open表當(dāng)作隊(duì)列使用,將A點(diǎn)加入隊(duì)列尾部,第二從隊(duì)列頭部取出一個(gè)元素x,擴(kuò)展其鄰域,將合規(guī)的鄰域節(jié)點(diǎn)放入open隊(duì)列中,將x丟到close表中,直到x是終點(diǎn)才退出

實(shí)際上和DFS很相似,只不過DFS用的是后進(jìn)先出的棧,由于最后進(jìn)入的都是該節(jié)點(diǎn)的鄰域,所以出來的也是鄰域節(jié)點(diǎn)。而BFS使用的是先進(jìn)先出隊(duì)列,比如最早進(jìn)去的是A的四個(gè)鄰域,取出一個(gè)鄰域擴(kuò)展后又丟進(jìn)隊(duì)列,但是下一個(gè)取出的還是A的某個(gè)鄰域點(diǎn),只有該組鄰域點(diǎn)都拿完才能輪到下一組。

一句話形容的話,就是從A點(diǎn)開始像浸水一樣,沿著四面八方擴(kuò)展,直到找到B點(diǎn)

Dijkstra

迪克斯特拉也比較簡單,理解了BFS,基本上也就理解了Dijkstra,也可以說它是BFS的擴(kuò)展:

將A點(diǎn)放入open表,第二從open表中取出離A點(diǎn)最近的位置x,進(jìn)行鄰域擴(kuò)展,第二將合規(guī)的鄰域節(jié)點(diǎn)丟入open表中,第二將x丟入close表

實(shí)際上,如果節(jié)點(diǎn)和其鄰域節(jié)點(diǎn)的距離是固定常數(shù),Dijkstra便退化為了BFS,若不是固定常數(shù),則有細(xì)微差異,BFS是直接默認(rèn)相鄰節(jié)點(diǎn)距離相等,而Dijkstra則需要判斷:

若x的鄰域節(jié)點(diǎn)P已經(jīng)在open表中,且x到A的距離 + x到鄰域點(diǎn)P的距離 > P到A的距離,則重新更新P的距離。

此外,合規(guī)的判定和之前一致,即未搜索過的點(diǎn)即合規(guī),即不在open和close表中

A* 算法

A star算法也是比較常見的算法,它也是在Dijkstra的基礎(chǔ)上,引入一個(gè)人為的AB距離估計(jì)模型:f(x)=g(x)+h(x)

啟發(fā)函數(shù)f(x)由兩部分構(gòu)成,g(x)是位置x到起點(diǎn)A的距離,h(x)是位置x到終點(diǎn)B的距離。其中只有h(x)項(xiàng)是預(yù)估項(xiàng),或者說啟發(fā)項(xiàng)。

A* 算法和Dijkstra相似,只不過Dijkstra中只有g(shù)(x)這一項(xiàng),而A*引入了預(yù)估項(xiàng)h(x),其余和Dijkstra基本一樣,將A點(diǎn)放入open表,第二從open表中取出f(x)最小的位置x,進(jìn)行鄰域擴(kuò)展,第二將合規(guī)的鄰域節(jié)點(diǎn)丟入open表中,第二將x丟入close表

D*算法

又稱為動(dòng)態(tài)A* 算法,它用了一個(gè)更為先進(jìn)的預(yù)估模型,它的預(yù)估項(xiàng)h(x)是通過反向Dijkstra得到的。

首次它便使用Dijkstra進(jìn)行反向搜索,從B開始,直到搜索到了A,并記錄各點(diǎn)x到B的距離為h(x),在A*中,我們的啟發(fā)函數(shù)是f(x)=g(x)+h(x),由于h(x)是準(zhǔn)確的測(cè)量,假設(shè)機(jī)器人走到位置x,第二檢查所有合規(guī)鄰域y,由于的g(y)都相等g(y)=g(x)+1,所以找f(y)=g(y)+h(y)最小等價(jià)于找h(y)最小。在算法中我們將所有h(y)記為k(y),這樣從f(y)最小演變?yōu)檎襨(y)最小

實(shí)際上,D* 算法用在機(jī)器人實(shí)時(shí)尋路上,比如當(dāng)前位置是A,目的地是B,最開始實(shí)際上找的是A到B的最短路徑,當(dāng)機(jī)器人走到位置x=A+1時(shí),實(shí)際上機(jī)器人要尋找的是當(dāng)前位置x到B的最短路徑,所以才有所有鄰域y到x的距離g(y)=1,找f(y)=g(y)+h(y)最小等價(jià)于找h(y)最小,這便是所謂動(dòng)態(tài)A*的動(dòng)態(tài)之處:將A到B的最短路徑變成當(dāng)前位置x到離B最近的鄰域y的最短路徑

用反向Dijkstra計(jì)算出h(x)預(yù)估后,從當(dāng)前位置x開始,取出鄰域中k(y)最小的位置y,第二機(jī)器人移動(dòng)到y(tǒng),當(dāng)前位置x=y,開啟下一輪搜索

但是如果發(fā)現(xiàn)路徑上有新的障礙點(diǎn)了,則需要重新更新受到影響的點(diǎn)的距離,所謂受到影響也就是父節(jié)點(diǎn)為障礙物的節(jié)點(diǎn)。第二使用一些算法更新那些受到影響的預(yù)估h(x)值即可。

即令屬于新增障礙物的所有位置o的h(o)=∞,并將其鄰域受到影響的點(diǎn)的h值也標(biāo)為∞,放入open表,直到影響擴(kuò)散至機(jī)器人當(dāng)前位置x

受到影響的點(diǎn)分兩種情況:在障礙物中間(C在**位置)、在障礙物邊緣(C在橙色位置)

受到障礙影響的點(diǎn),h值處于上升狀態(tài),判斷標(biāo)準(zhǔn)即 k(x)<h(x),**點(diǎn)的鄰域節(jié)點(diǎn)y若未受到影響即:h(y)<=k(y),且可以降低其h值:h(y)+c(x,y)<h(x) ,則將y點(diǎn)作為其父節(jié)點(diǎn)并更新其h值

實(shí)際上也就是取**點(diǎn)集里,按k值從小到大進(jìn)行鄰域擴(kuò)展,更新h值。更新完該**點(diǎn)后,最靠近該點(diǎn)那個(gè)橙色點(diǎn)又將變成了**點(diǎn)

更新h后,對(duì)當(dāng)前節(jié)點(diǎn)進(jìn)行搜索鄰域,進(jìn)行后續(xù)的傳播擴(kuò)展。這里就不詳細(xì)介紹了。

拓展知識(shí):

路線搜索

使用百度地圖查詢出現(xiàn)路線的方法如下:
打開百度瀏覽器,第二在百度首頁選中“地圖”。如下所示:
點(diǎn)擊“地圖”,即可進(jìn)入百度地圖首頁。如下圖所示:
進(jìn)入百度地圖的首頁后,可以看到搜索欄底下有三個(gè)功能:搜索、公交、駕車;左側(cè)則是一些常見的餐飲等。
搜索目的地,查看周圍環(huán)境和交通狀況。
搜索出來后可以看到左側(cè)欄目是標(biāo)記地點(diǎn)的符號(hào),右側(cè)是搜索地點(diǎn)的放大地圖,左側(cè)的標(biāo)記符號(hào)在右側(cè)的地點(diǎn)會(huì)看到具體的標(biāo)記位置。
點(diǎn)擊標(biāo)記點(diǎn)后,會(huì)彈出信息窗口,詳細(xì)介紹標(biāo)記點(diǎn)的地點(diǎn)名稱和相關(guān)信息以及附上圖片。
在搜索攔下,點(diǎn)擊公交,即可進(jìn)行兩個(gè)地點(diǎn)的公交路線搜索查詢,并在地圖顯示出來。這時(shí)就有了出行路線。

前沿拓展:

路線搜索

您可以直接搜索到目的地,第二點(diǎn)擊該位置,選擇搜索附近,第二選擇酒店即可。在搜索到的結(jié)果中,選擇投取衡矛向破常志川你想要去的酒店,第二直接導(dǎo)航前去即可。


我們不論在游戲還是在機(jī)器人中,經(jīng)常會(huì)碰到各種路徑搜索算法,或者說最短路徑查找,這里做個(gè)小結(jié)。我們第一要從經(jīng)典的廣度優(yōu)先BFS和深度優(yōu)先DFS說起。

不過很多地方都會(huì)用到openlist,closelist兩個(gè)表,這里做個(gè)說明,open表里面放的是待擴(kuò)展節(jié)點(diǎn),close表里面放的是已經(jīng)擴(kuò)展過的節(jié)點(diǎn),通常就是一個(gè)沒有搜索過的節(jié)點(diǎn)會(huì)先放如open表中,后面從open表中將其取出進(jìn)行擴(kuò)展,第二丟到close表中。

DFS深度優(yōu)先搜索

這種搜索算法算是最簡單的,將open表當(dāng)作棧使用,將A點(diǎn)入棧,第二從棧頂取出一個(gè)元素x,擴(kuò)展其鄰域,將合規(guī)的鄰域節(jié)點(diǎn)放入open棧中,將x丟到close表中,直到x是是終點(diǎn)才退出

合規(guī)的判定比較簡單,一般來說就是沒有搜索過的節(jié)點(diǎn),即不在close表中,也不在open表中

一句話形象概括的話,就是滿屏都是食物的一條貪食蛇,每吃一格食物就增長一節(jié),從A爬到B,就勝利了。

貪心算法

DFS的缺點(diǎn)是取鄰域中,隨意一個(gè)節(jié)點(diǎn)進(jìn)行擴(kuò)展。如果我們?nèi)藶榧尤胍粋€(gè)預(yù)估模型,預(yù)估到終點(diǎn)的距離,這樣就可以取鄰域中離終點(diǎn)最近的節(jié)點(diǎn)進(jìn)行擴(kuò)展,形成貪心搜索。

預(yù)估模型是人為加入的,常用的如曼哈頓距離。這種人為加入模型影響搜索的方式又被稱為啟發(fā)式搜索,加入的預(yù)估模型被稱為啟發(fā)函數(shù),它能根據(jù)當(dāng)前位置得到一個(gè)啟發(fā)值,指導(dǎo)后續(xù)路徑的選擇

BFS廣度優(yōu)先

這種搜索算法也比較簡單,將open表當(dāng)作隊(duì)列使用,將A點(diǎn)加入隊(duì)列尾部,第二從隊(duì)列頭部取出一個(gè)元素x,擴(kuò)展其鄰域,將合規(guī)的鄰域節(jié)點(diǎn)放入open隊(duì)列中,將x丟到close表中,直到x是終點(diǎn)才退出

實(shí)際上和DFS很相似,只不過DFS用的是后進(jìn)先出的棧,由于最后進(jìn)入的都是該節(jié)點(diǎn)的鄰域,所以出來的也是鄰域節(jié)點(diǎn)。而BFS使用的是先進(jìn)先出隊(duì)列,比如最早進(jìn)去的是A的四個(gè)鄰域,取出一個(gè)鄰域擴(kuò)展后又丟進(jìn)隊(duì)列,但是下一個(gè)取出的還是A的某個(gè)鄰域點(diǎn),只有該組鄰域點(diǎn)都拿完才能輪到下一組。

一句話形容的話,就是從A點(diǎn)開始像浸水一樣,沿著四面八方擴(kuò)展,直到找到B點(diǎn)

Dijkstra

迪克斯特拉也比較簡單,理解了BFS,基本上也就理解了Dijkstra,也可以說它是BFS的擴(kuò)展:

將A點(diǎn)放入open表,第二從open表中取出離A點(diǎn)最近的位置x,進(jìn)行鄰域擴(kuò)展,第二將合規(guī)的鄰域節(jié)點(diǎn)丟入open表中,第二將x丟入close表

實(shí)際上,如果節(jié)點(diǎn)和其鄰域節(jié)點(diǎn)的距離是固定常數(shù),Dijkstra便退化為了BFS,若不是固定常數(shù),則有細(xì)微差異,BFS是直接默認(rèn)相鄰節(jié)點(diǎn)距離相等,而Dijkstra則需要判斷:

若x的鄰域節(jié)點(diǎn)P已經(jīng)在open表中,且x到A的距離 + x到鄰域點(diǎn)P的距離 > P到A的距離,則重新更新P的距離。

此外,合規(guī)的判定和之前一致,即未搜索過的點(diǎn)即合規(guī),即不在open和close表中

A* 算法

A star算法也是比較常見的算法,它也是在Dijkstra的基礎(chǔ)上,引入一個(gè)人為的AB距離估計(jì)模型:f(x)=g(x)+h(x)

啟發(fā)函數(shù)f(x)由兩部分構(gòu)成,g(x)是位置x到起點(diǎn)A的距離,h(x)是位置x到終點(diǎn)B的距離。其中只有h(x)項(xiàng)是預(yù)估項(xiàng),或者說啟發(fā)項(xiàng)。

A* 算法和Dijkstra相似,只不過Dijkstra中只有g(shù)(x)這一項(xiàng),而A*引入了預(yù)估項(xiàng)h(x),其余和Dijkstra基本一樣,將A點(diǎn)放入open表,第二從open表中取出f(x)最小的位置x,進(jìn)行鄰域擴(kuò)展,第二將合規(guī)的鄰域節(jié)點(diǎn)丟入open表中,第二將x丟入close表

D*算法

又稱為動(dòng)態(tài)A* 算法,它用了一個(gè)更為先進(jìn)的預(yù)估模型,它的預(yù)估項(xiàng)h(x)是通過反向Dijkstra得到的。

首次它便使用Dijkstra進(jìn)行反向搜索,從B開始,直到搜索到了A,并記錄各點(diǎn)x到B的距離為h(x),在A*中,我們的啟發(fā)函數(shù)是f(x)=g(x)+h(x),由于h(x)是準(zhǔn)確的測(cè)量,假設(shè)機(jī)器人走到位置x,第二檢查所有合規(guī)鄰域y,由于的g(y)都相等g(y)=g(x)+1,所以找f(y)=g(y)+h(y)最小等價(jià)于找h(y)最小。在算法中我們將所有h(y)記為k(y),這樣從f(y)最小演變?yōu)檎襨(y)最小

實(shí)際上,D* 算法用在機(jī)器人實(shí)時(shí)尋路上,比如當(dāng)前位置是A,目的地是B,最開始實(shí)際上找的是A到B的最短路徑,當(dāng)機(jī)器人走到位置x=A+1時(shí),實(shí)際上機(jī)器人要尋找的是當(dāng)前位置x到B的最短路徑,所以才有所有鄰域y到x的距離g(y)=1,找f(y)=g(y)+h(y)最小等價(jià)于找h(y)最小,這便是所謂動(dòng)態(tài)A*的動(dòng)態(tài)之處:將A到B的最短路徑變成當(dāng)前位置x到離B最近的鄰域y的最短路徑

用反向Dijkstra計(jì)算出h(x)預(yù)估后,從當(dāng)前位置x開始,取出鄰域中k(y)最小的位置y,第二機(jī)器人移動(dòng)到y(tǒng),當(dāng)前位置x=y,開啟下一輪搜索

但是如果發(fā)現(xiàn)路徑上有新的障礙點(diǎn)了,則需要重新更新受到影響的點(diǎn)的距離,所謂受到影響也就是父節(jié)點(diǎn)為障礙物的節(jié)點(diǎn)。第二使用一些算法更新那些受到影響的預(yù)估h(x)值即可。

即令屬于新增障礙物的所有位置o的h(o)=∞,并將其鄰域受到影響的點(diǎn)的h值也標(biāo)為∞,放入open表,直到影響擴(kuò)散至機(jī)器人當(dāng)前位置x

受到影響的點(diǎn)分兩種情況:在障礙物中間(C在**位置)、在障礙物邊緣(C在橙色位置)

受到障礙影響的點(diǎn),h值處于上升狀態(tài),判斷標(biāo)準(zhǔn)即 k(x)<h(x),**點(diǎn)的鄰域節(jié)點(diǎn)y若未受到影響即:h(y)<=k(y),且可以降低其h值:h(y)+c(x,y)<h(x) ,則將y點(diǎn)作為其父節(jié)點(diǎn)并更新其h值

實(shí)際上也就是取**點(diǎn)集里,按k值從小到大進(jìn)行鄰域擴(kuò)展,更新h值。更新完該**點(diǎn)后,最靠近該點(diǎn)那個(gè)橙色點(diǎn)又將變成了**點(diǎn)

更新h后,對(duì)當(dāng)前節(jié)點(diǎn)進(jìn)行搜索鄰域,進(jìn)行后續(xù)的傳播擴(kuò)展。這里就不詳細(xì)介紹了。

拓展知識(shí):

路線搜索

使用百度地圖查詢出現(xiàn)路線的方法如下:
打開百度瀏覽器,第二在百度首頁選中“地圖”。如下所示:
點(diǎn)擊“地圖”,即可進(jìn)入百度地圖首頁。如下圖所示:
進(jìn)入百度地圖的首頁后,可以看到搜索欄底下有三個(gè)功能:搜索、公交、駕車;左側(cè)則是一些常見的餐飲等。
搜索目的地,查看周圍環(huán)境和交通狀況。
搜索出來后可以看到左側(cè)欄目是標(biāo)記地點(diǎn)的符號(hào),右側(cè)是搜索地點(diǎn)的放大地圖,左側(cè)的標(biāo)記符號(hào)在右側(cè)的地點(diǎn)會(huì)看到具體的標(biāo)記位置。
點(diǎn)擊標(biāo)記點(diǎn)后,會(huì)彈出信息窗口,詳細(xì)介紹標(biāo)記點(diǎn)的地點(diǎn)名稱和相關(guān)信息以及附上圖片。
在搜索攔下,點(diǎn)擊公交,即可進(jìn)行兩個(gè)地點(diǎn)的公交路線搜索查詢,并在地圖顯示出來。這時(shí)就有了出行路線。

前沿拓展:

路線搜索

您可以直接搜索到目的地,第二點(diǎn)擊該位置,選擇搜索附近,第二選擇酒店即可。在搜索到的結(jié)果中,選擇投取衡矛向破常志川你想要去的酒店,第二直接導(dǎo)航前去即可。


我們不論在游戲還是在機(jī)器人中,經(jīng)常會(huì)碰到各種路徑搜索算法,或者說最短路徑查找,這里做個(gè)小結(jié)。我們第一要從經(jīng)典的廣度優(yōu)先BFS和深度優(yōu)先DFS說起。

不過很多地方都會(huì)用到openlist,closelist兩個(gè)表,這里做個(gè)說明,open表里面放的是待擴(kuò)展節(jié)點(diǎn),close表里面放的是已經(jīng)擴(kuò)展過的節(jié)點(diǎn),通常就是一個(gè)沒有搜索過的節(jié)點(diǎn)會(huì)先放如open表中,后面從open表中將其取出進(jìn)行擴(kuò)展,第二丟到close表中。

DFS深度優(yōu)先搜索

這種搜索算法算是最簡單的,將open表當(dāng)作棧使用,將A點(diǎn)入棧,第二從棧頂取出一個(gè)元素x,擴(kuò)展其鄰域,將合規(guī)的鄰域節(jié)點(diǎn)放入open棧中,將x丟到close表中,直到x是是終點(diǎn)才退出

合規(guī)的判定比較簡單,一般來說就是沒有搜索過的節(jié)點(diǎn),即不在close表中,也不在open表中

一句話形象概括的話,就是滿屏都是食物的一條貪食蛇,每吃一格食物就增長一節(jié),從A爬到B,就勝利了。

貪心算法

DFS的缺點(diǎn)是取鄰域中,隨意一個(gè)節(jié)點(diǎn)進(jìn)行擴(kuò)展。如果我們?nèi)藶榧尤胍粋€(gè)預(yù)估模型,預(yù)估到終點(diǎn)的距離,這樣就可以取鄰域中離終點(diǎn)最近的節(jié)點(diǎn)進(jìn)行擴(kuò)展,形成貪心搜索。

預(yù)估模型是人為加入的,常用的如曼哈頓距離。這種人為加入模型影響搜索的方式又被稱為啟發(fā)式搜索,加入的預(yù)估模型被稱為啟發(fā)函數(shù),它能根據(jù)當(dāng)前位置得到一個(gè)啟發(fā)值,指導(dǎo)后續(xù)路徑的選擇

BFS廣度優(yōu)先

這種搜索算法也比較簡單,將open表當(dāng)作隊(duì)列使用,將A點(diǎn)加入隊(duì)列尾部,第二從隊(duì)列頭部取出一個(gè)元素x,擴(kuò)展其鄰域,將合規(guī)的鄰域節(jié)點(diǎn)放入open隊(duì)列中,將x丟到close表中,直到x是終點(diǎn)才退出

實(shí)際上和DFS很相似,只不過DFS用的是后進(jìn)先出的棧,由于最后進(jìn)入的都是該節(jié)點(diǎn)的鄰域,所以出來的也是鄰域節(jié)點(diǎn)。而BFS使用的是先進(jìn)先出隊(duì)列,比如最早進(jìn)去的是A的四個(gè)鄰域,取出一個(gè)鄰域擴(kuò)展后又丟進(jìn)隊(duì)列,但是下一個(gè)取出的還是A的某個(gè)鄰域點(diǎn),只有該組鄰域點(diǎn)都拿完才能輪到下一組。

一句話形容的話,就是從A點(diǎn)開始像浸水一樣,沿著四面八方擴(kuò)展,直到找到B點(diǎn)

Dijkstra

迪克斯特拉也比較簡單,理解了BFS,基本上也就理解了Dijkstra,也可以說它是BFS的擴(kuò)展:

將A點(diǎn)放入open表,第二從open表中取出離A點(diǎn)最近的位置x,進(jìn)行鄰域擴(kuò)展,第二將合規(guī)的鄰域節(jié)點(diǎn)丟入open表中,第二將x丟入close表

實(shí)際上,如果節(jié)點(diǎn)和其鄰域節(jié)點(diǎn)的距離是固定常數(shù),Dijkstra便退化為了BFS,若不是固定常數(shù),則有細(xì)微差異,BFS是直接默認(rèn)相鄰節(jié)點(diǎn)距離相等,而Dijkstra則需要判斷:

若x的鄰域節(jié)點(diǎn)P已經(jīng)在open表中,且x到A的距離 + x到鄰域點(diǎn)P的距離 > P到A的距離,則重新更新P的距離。

此外,合規(guī)的判定和之前一致,即未搜索過的點(diǎn)即合規(guī),即不在open和close表中

A* 算法

A star算法也是比較常見的算法,它也是在Dijkstra的基礎(chǔ)上,引入一個(gè)人為的AB距離估計(jì)模型:f(x)=g(x)+h(x)

啟發(fā)函數(shù)f(x)由兩部分構(gòu)成,g(x)是位置x到起點(diǎn)A的距離,h(x)是位置x到終點(diǎn)B的距離。其中只有h(x)項(xiàng)是預(yù)估項(xiàng),或者說啟發(fā)項(xiàng)。

A* 算法和Dijkstra相似,只不過Dijkstra中只有g(shù)(x)這一項(xiàng),而A*引入了預(yù)估項(xiàng)h(x),其余和Dijkstra基本一樣,將A點(diǎn)放入open表,第二從open表中取出f(x)最小的位置x,進(jìn)行鄰域擴(kuò)展,第二將合規(guī)的鄰域節(jié)點(diǎn)丟入open表中,第二將x丟入close表

D*算法

又稱為動(dòng)態(tài)A* 算法,它用了一個(gè)更為先進(jìn)的預(yù)估模型,它的預(yù)估項(xiàng)h(x)是通過反向Dijkstra得到的。

首次它便使用Dijkstra進(jìn)行反向搜索,從B開始,直到搜索到了A,并記錄各點(diǎn)x到B的距離為h(x),在A*中,我們的啟發(fā)函數(shù)是f(x)=g(x)+h(x),由于h(x)是準(zhǔn)確的測(cè)量,假設(shè)機(jī)器人走到位置x,第二檢查所有合規(guī)鄰域y,由于的g(y)都相等g(y)=g(x)+1,所以找f(y)=g(y)+h(y)最小等價(jià)于找h(y)最小。在算法中我們將所有h(y)記為k(y),這樣從f(y)最小演變?yōu)檎襨(y)最小

實(shí)際上,D* 算法用在機(jī)器人實(shí)時(shí)尋路上,比如當(dāng)前位置是A,目的地是B,最開始實(shí)際上找的是A到B的最短路徑,當(dāng)機(jī)器人走到位置x=A+1時(shí),實(shí)際上機(jī)器人要尋找的是當(dāng)前位置x到B的最短路徑,所以才有所有鄰域y到x的距離g(y)=1,找f(y)=g(y)+h(y)最小等價(jià)于找h(y)最小,這便是所謂動(dòng)態(tài)A*的動(dòng)態(tài)之處:將A到B的最短路徑變成當(dāng)前位置x到離B最近的鄰域y的最短路徑

用反向Dijkstra計(jì)算出h(x)預(yù)估后,從當(dāng)前位置x開始,取出鄰域中k(y)最小的位置y,第二機(jī)器人移動(dòng)到y(tǒng),當(dāng)前位置x=y,開啟下一輪搜索

但是如果發(fā)現(xiàn)路徑上有新的障礙點(diǎn)了,則需要重新更新受到影響的點(diǎn)的距離,所謂受到影響也就是父節(jié)點(diǎn)為障礙物的節(jié)點(diǎn)。第二使用一些算法更新那些受到影響的預(yù)估h(x)值即可。

即令屬于新增障礙物的所有位置o的h(o)=∞,并將其鄰域受到影響的點(diǎn)的h值也標(biāo)為∞,放入open表,直到影響擴(kuò)散至機(jī)器人當(dāng)前位置x

受到影響的點(diǎn)分兩種情況:在障礙物中間(C在**位置)、在障礙物邊緣(C在橙色位置)

受到障礙影響的點(diǎn),h值處于上升狀態(tài),判斷標(biāo)準(zhǔn)即 k(x)<h(x),**點(diǎn)的鄰域節(jié)點(diǎn)y若未受到影響即:h(y)<=k(y),且可以降低其h值:h(y)+c(x,y)<h(x) ,則將y點(diǎn)作為其父節(jié)點(diǎn)并更新其h值

實(shí)際上也就是取**點(diǎn)集里,按k值從小到大進(jìn)行鄰域擴(kuò)展,更新h值。更新完該**點(diǎn)后,最靠近該點(diǎn)那個(gè)橙色點(diǎn)又將變成了**點(diǎn)

更新h后,對(duì)當(dāng)前節(jié)點(diǎn)進(jìn)行搜索鄰域,進(jìn)行后續(xù)的傳播擴(kuò)展。這里就不詳細(xì)介紹了。

拓展知識(shí):

路線搜索

使用百度地圖查詢出現(xiàn)路線的方法如下:
打開百度瀏覽器,第二在百度首頁選中“地圖”。如下所示:
點(diǎn)擊“地圖”,即可進(jìn)入百度地圖首頁。如下圖所示:
進(jìn)入百度地圖的首頁后,可以看到搜索欄底下有三個(gè)功能:搜索、公交、駕車;左側(cè)則是一些常見的餐飲等。
搜索目的地,查看周圍環(huán)境和交通狀況。
搜索出來后可以看到左側(cè)欄目是標(biāo)記地點(diǎn)的符號(hào),右側(cè)是搜索地點(diǎn)的放大地圖,左側(cè)的標(biāo)記符號(hào)在右側(cè)的地點(diǎn)會(huì)看到具體的標(biāo)記位置。
點(diǎn)擊標(biāo)記點(diǎn)后,會(huì)彈出信息窗口,詳細(xì)介紹標(biāo)記點(diǎn)的地點(diǎn)名稱和相關(guān)信息以及附上圖片。
在搜索攔下,點(diǎn)擊公交,即可進(jìn)行兩個(gè)地點(diǎn)的公交路線搜索查詢,并在地圖顯示出來。這時(shí)就有了出行路線。

原創(chuàng)文章,作者:九賢生活小編,如若轉(zhuǎn)載,請(qǐng)注明出處:http://cxzzxj.cn/29341.html

人妻无码精品一区二区动漫竹菊| 久久久久亚洲国产视频| 亚洲黄色成人| 添日本女人下面视频| av手机专区在线| 欧美精品亚洲精品日韩精品| 国产一级二级三级口交| 国产精品一二三无码福利电影| jjyu99色综合| 国产亚洲国际精品福利| www婷婷色| 高潮影| 欧美日韩亚洲中文字幕三| www,色欲精品在线| 亚洲成人内射| 国产一区无码| 亚洲免费第一第二区| 69gV成人网| 精品无码中文视频在线观看| 色香蕉网| 无码人妻一区二区三区一| 漂亮人妻当面被黑人玩| 国产高潮国产高潮久久久91| 欧美精品久久人妻水a级| 一个色综合站| 日本中文字幕系列| 人妻少妇久久毛片| 亚洲一区久久精品| 日韩人妻在线推油视频电影| 亚洲欧美曰韩中文高清| 欧美中文黄片| 亚洲毛片无码专区亚洲乱| 一级片乱伦国产乱伦| 欧美永久精品ww| 人妻中文无码视频在线| 一老妇熟女一区二区| 99久久国产福利自产拍| 国产成人乱码一二三区| 91精品啪在线观看国产20岁| 亚洲一区二区三区久久久久久久| 三级黄色一区二区|