人工智慧AI 之搜尋 A 演算法

2021-09-29 17:42:35 字數 3628 閱讀 3462

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 最短路...