区域性演算法.doc

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

sunshaoying + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档