AStar算法學習筆記

最近在負責佈線的一些功能的優化   在大神(第二個鏈接的作者)的啓發知道下 知道了 AStar算法 如獲至寶

學習算法的主要連接爲: 極限定律 My Algorithm Space A*算法入門  

已有的RCP根據AStar佈線的算法:  RCP:gef智能尋路算法(A star)

以下是連接的部分內容和個人理解:

核心公式:    f(最終路徑長度) = g(起點到x點的長度)+ h(x點到終點的估計長度)

                        開啓列表:將要被遍歷的點的集合

                        關閉列表:已經被遍歷的點的集合

        理解: x點:  是正在遍歷 估值的點。  剛開始的時候  x點就是起點;然後以一定策略向終點靠近,x點就是過程中的點;當然最期望的是x點就是終點

                     g: 是可以明確計算出  並且要實時保持爲最短最優的(通過)

                     h:  核心是:越靠近終點  值越小   
                          一般是曼哈頓方法方法(|x|+|y|),也可以算兩點間距離(如果不是切割成正方形)還有其他   

                         雖然前方是大河 深淵但還得前進不是,等看到在想辦法

核心策略:

             從開啓列表找出最小f的點  遍歷他周圍的點時的邏輯:

            1. * 如果它不可通過或者已經在關閉列表中,略過它。  

              理解:爲了躲過障礙  並且 不回頭

            2.* 如果它不在開啓列表中,把它添加進去。把當前格作爲這一格的父節點。記錄這一格的F,G,H值。  

              理解:以當前點探索到的新地形    1,爲新地形標記測算並加到可探索集合中去(方便後續計算),2.記錄從何而來 (這點很重要  如果這個點是終點   你就可以從終點找回到起點    你懂的)

            3.* 如果它已經在開啓列表中,用G值爲參考檢查新的路徑是否更好。更低的G值意味着更好的路徑。如果是這樣,就把這一格的父節點改成當前格,並且重新計算這一格的GF值。如果你保持你的開啓列表按F值排序,改變之後你可能需要重新對開啓列表排序。

            理解:1.優化G值   這個是明確的值(之前探索結果:A->B->C(權:20 )   現在: 如果A->C(權:15) 自然要優化C地形 正名呀)

                        2.遍歷開啓列表F值最小的  (因爲這個點更可能是最優的方向 )


完整的邏輯如下:

1,把起始格添加到開啓列表。

2,重複如下的工作:

      a) 尋找開啓列表中F值最低的格子。我們稱它爲當前格。

      b) 把它切換到關閉列表。

      c) 對相鄰的格中的每一個?

          * 如果它不可通過或者已經在關閉列表中,略過它。反之如下。

          * 如果它不在開啓列表中,把它添加進去。把當前格作爲這一格的父節點。記錄這一格的F,G,H值。

          * 如果它已經在開啓列表中,用G值爲參考檢查新的路徑是否更好。更低的G值意味着更好的路徑。如果是這樣,就把這一格的父節點改成當前格,並且重新計算這一格的GF值。如果你保持你的開啓列表按F值排序,改變之後你可能需要重新對開啓列表排序。

      d) 停止,當你

          * 把目標格添加進了關閉列表(註解),這時候路徑被找到,或者

          * 沒有找到目標格,開啓列表已經空了。這時候,路徑不存在。

3.保存路徑。從目標格開始,沿着每一格的父節點移動直到回到起始格。這就是你的路徑。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章