1. 概述
這是一種經典的尋路演算法;
簡而言之,重點在於估算距離。
問題描述:
假設起點a, 終點b, 當前結點為n
f(n) = g(n) + h(n)
g(n)表示起點到n實際距離;
h(n)表示n到終點預估距離;
在所有結點中選擇f值最小的可行節點走下去即可。
缺陷:顯然,a*演算法的效率很大程度取決於h(n)的計算,即對未來距離的預估;
未完待續…
2. a*演算法細節
2.1 對於h(n)估算函式的選擇
曼哈頓距離:橫縱座標差之和 (推薦使用)
歐氏距離:即兩點間的實際距離
ps: 這兩種估算方式,會導致無法避開障礙物。
2.2 a*演算法實現
"""
a*尋路演算法, 評估函式採用曼哈頓距離
"""path =[[
0,0,
0,0,
0,0,
0,0,
0],[
0,0,
0,3,
0,0,
0,0,
0],[
0,0,
0,3,
0,0,
2,0,
0],[
0,0,
0,3,
0,0,
0,0,
0],[
0,4,
0,3,
0,0,
0,0,
0],[
0,0,
0,3,
0,0,
0,0,
0],[
0,0,
0,3,
0,0,
0,0,
0],[
0,0,
0,0,
0,0,
0,0,
0],]
m =len
(path)
n =len
(path[0]
)visit =
0a =[4
,1]b =[2
,6]def
shownode()
:for i in path:
for j in i:
print
(j, end='')
print()
print()
defgetnode
(x):
return path[x[0]
][x[1]
]def
inside
(x, y)
:return x>=
0and x=
0and y
defisnode
(x, y)
:return path[x]
[y]==
0or path[x]
[y]==
2def
getneigh
(x, y)
: neigh =
if inside(x-
1, y)
and isnode(x-
1, y)
:[x-
1, y]
)if inside(x+
1, y)
and isnode(x+
1,y)
:[x+
1, y]
)if inside(x, y-1)
and isnode(x,y-1)
:[x, y-1]
)if inside(x, y+1)
and isnode(x,y+1)
:[x, y+1]
)return neigh
deftestneigh
(neigh)
:for i in
range
(m):
for j in
range
(n):
if[i, j]
in neigh:
print
(' '
, end='')
else
:print
(path[i]
[j], end='')
print()
defcaldist
(a, b)
:# 計算兩點的曼哈頓距離
return
abs(a[0]
-b[0])
+abs
(a[1
]-b[1]
)def
update
(dist, neigh)
: mindist =
0x7fffffff
minxy =
0for node in neigh:
# like [3, 4]
dist[node[0]
][node[1]
]= visit + caldist(node, b)
if dist[node[0]
][node[1]
]< mindist:
mindist = dist[node[0]
][node[1]
] minxy = node
return minxy
deffindpath
(curx, cury)
:global path, visit
shownode(
)if curx == b[0]
and cury == b[1]
:print
('reach the end!'
)return
dist =[[
-1for i in
range
(n)]
for i in
range
(m)]
neigh = getneigh(curx, cury)
xy = update(dist, neigh)
visit +=
1 curx, cury = xy[0]
, xy[1]
path[curx]
[cury]
=' '
findpath(curx, cury)
# 更新
findpath(a[0]
, a[1]
)
演示結果(節選部分)如下圖, 起點為4, 終點為2, 障礙物為3, 其他0表示可行點人工智慧 AI
編者按 羅布 史密斯 robsmith 是 pecabu 首席執行官 編者按 羅布 史密斯 robsmith 是 pecabu 首席執行官。人工智慧 ai 近來成為 報道的熱點話題。它擁有像 大資料 雲 等毫無意義的流行詞語的地位,也只是時間問題。通常情況下,我是人工智慧的堅定支持者。在人工智慧領域...
人工智慧(AI)
人工智慧是乙個很大的圈子,但人工智慧的基礎是機器學習。機器學習是什麼?其實就是人告訴機器想做什麼事情,並且給它一堆資料讓它模仿著去做。機器學習需要什麼?演算法 資料 程式 評估 應用。機器學習能做什麼?機器學習在資料探勘 影象識別 語音和自然語言處理中有著廣泛應用。機器學習流程?乙個機器學習的常規套...
(AI)人工智慧導論實驗 A 演算法
原始碼 實驗內容 假設在乙個 n m 的迷宮裡,入口座標和出口座標分別為 1,1 和 5,5 每乙個座標點有兩種可能 0 或 1,其中 0 表示該位置允許通過,1 表示該位置不允許通過 如地圖 0 0 0 0 0 1 0 1 0 1 0 0 1 1 1 0 1 0 0 0 0 0 0 1 0 最短路...