- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
区域性演算法
電腦鼠的迷宮演算法
班級:四技系統三甲
組員家宏致中
指導老師:黎靖
引言
一台電腦鼠除了硬體方面,軟體也是相當重要的,如果把電腦鼠比喻成人來看,那硬體就是四肢,而軟體就相當於電腦鼠的大腦,必須控制四肢的動作,去設定馬達的轉速,還要解讀由外面感測器所傳達回來的訊息,加以分析,這樣像在遇到牆壁或岔路時,才能控制馬達的轉速,不會衝太快去撞牆,最後還要能記憶迷宮的地圖,然後選擇演算法順利走出迷宮!
這種演算法有別於前面四種演算法,向心演算法是一種改良過的搜尋法,通常用這種方法都會先畫出其迷宮的座標,而在遇到岔路時,會依目前位置與中心點之間的距離來判斷下一步,然後依向心權位值小的格子前進(中心點為0),這種演算法利用的觀念是終點都設在中心點這個目標來設計的,這種搜尋法通常路徑都會比較短,能較快找到目標。
首先需要先把由終點往外擴充編寫格子的編號,在從起點開始。
遇岔路時,優先選擇數字較低者,如遇死路則返回上一節點重新選擇。
全域性演算法
一、洪水演算法
洪水演算法是一種以距離為主的迷宮演算法,由終點開始填洪水值,先被洪水流過的方格其洪水值肯定比較晚流過之方格的洪水值小,所以依洪水值大小,由大到小即可找出最短路徑。
而當電腦鼠實際上在更新格子距離的步驟如下:
1. 先搜尋周圍障礙物的情形,並更新迷宮的資訊。
2. 再依周圍牆壁的情型更新與那個格子的距離。
3. 最後再找出周圍沒走過的格子中挑距離值最短的格子移動,如果所有周圍的格子都走過了,就回上一個節點。
A*演算法
A*是最廣泛被大家使用的演算法,用於一般的2D平面、RPG遊戲、或是大型的戰略遊戲,用以找尋NPC或控制腳色到指定地點時,尋找最短路徑都是用A*演算法,重點在於開啟列表及關閉列表的使用。
其路徑評估的公式F = G + H。
G代表的從起點沿著所產生路徑,走到鄰近節點的移動代價。
H代表從所選的相鄰節點到終點的移動代價,又稱為錯誤嘗試。因為 在移動過程中會碰到不同的的障礙物,但對於此路徑只能猜測。
H的計算方法有許多種,在此報告則使用曼哈頓法。
曼哈頓法:
計算目前節點到終點節點之間水平以及垂直的方格總和,再將其和乘於10 (對角線不列入討論),其值為估計值,並非實際值。
以下舉個例子來講解A*演算法
深綠色 → 起始節點
粉紅色 → 終點節點
棕色 → 父節點
藍色 → 設定為障礙物(石頭、牆不等)
青綠色 → 列入開啟列表中
紫色 → 列入關閉列表中
圖1
如圖1,將A3設定為起始節點,E7為終點,藍色部分(A6、B5、B6、C4、C5、C6、D3、D4、D5、D6)為障礙物,G值的水平及垂直設為10,對角線設為14,H算法則使用曼哈頓法(所選節點到終點的格數*10)
1. 將A3設定為父節點,並將鄰近節點A2、A4、B2、B3、B4列入開啟列表中,並計算出每個相鄰節點的F值。
A2 → G=10 H=9*10 F=100
A4 → G=10 H=7*10 F=80
B2 → G=14 H=8*10 F=94
B3 → G=10 H=7*10 F=80
B4 → G=14 H=6*10 F=74並將其各點指向父節點如圖2。
圖2
選擇F值最低做為下一點,因此選擇B4。
2. 將B4設為父節點(如圖3),將A3從開始列表刪除,加入關閉列表。
B4的相鄰節點A4、B3已在開啟列表中,右因為對角線繞過障礙物的方法不在此討論故A5、C3不考慮,C4、B5為障礙物也不討論。
A5 → G=28 H=6*10 F=88(在此新節點的G值以父節點為起點,將父節點加上對其相鄰節點的路徑代價,即14+14)
圖3
選擇F值較小的B3前進。
3. 將B3設為父節點如圖4,將B4從開啟列表中刪除且加入關閉列表中。
B3的相鄰節點為A2、B2、A4已在開啟列表,C4為障礙物不做討論。
C2 → G=24 H=7*10 F=94
C3 → G=20 H=6*10 F=80並將其節點指向父節點
圖4
選擇F值較小的C3前進而非B2,因為C3比B2晚加入列表之中
4. 設定C3為父節點(如圖5),將B3從開啟列表中刪除且加入關閉列表中,接著D3為障礙物,D2為對角線都也不在此討論中使用。
所以直接選擇C2為下一個節點。
圖5
5. 將C2設為父節點(如圖6),將C3從開啟列表中刪除並加入關閉列表,計算C2相鄰節點的F值。
B1 → G=38 H=9*10 F=128
C1 → G=34 H=8*10 F=114
D1 → G=38 H=7*10 F=108
D2 → G=34 H=6*10 F=94
並將其節點指向父節點。
選擇F值較小的節點D2為下一步。
文档评论(0)