簡體   English   中英

A*/尋路算法的錯誤結果

[英]Incorrect results from A*/Path-finding algorithm

我正在嘗試設置一個路徑查找器,在其中我通過一個迷宮(1/0 的數組,其中 1 個是障礙物)、起點/終點並讓它返回最佳路徑。

我將以下代碼作為我的基礎,並修改了“main”函數,如下所示。 https://medium.com/@nicholas.w.swift/easy-a-star-pathfinding-7e6689c7f7b2

def main():
    maze = [[0,1,0,0,...],[0,0,0,0...],[...]...,[...]] #Example 2D List
    start = (4, 33)
    end = (200, 200)

    path = astar(maze, start, end)
    print(path)

#Create blank image for openCV
    img = np.zeros((221,221,3), np.uint8)
    x, y = 0, 0
    red = [0, 0, 255]

#Draw obstacles
    for row in maze:
        y+=1
        x=0
        for value in row:
            x+=1
            if value == 1: img[y, x]=red

#Draw path
    for x, y in path:
        img[y, x] = (255, 0, 0)

    cv2.imshow("Image", img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

用於制作地圖的完整迷宮在這里: https : //pastebin.com/wT6dGQnj這是一個更大項目的簡化案例,因此列表在這里已被“硬編碼”。

下面是輸出,當路徑跨越多個障礙時,它似乎是不正確的:結果

我認為問題在於你如何繪制牆壁,而不是路徑。 您從y=1開始,並且似乎也在那里切換 x 和 y。 我在原始代碼中使用了 10x10 迷宮,一旦我更改了牆繪部分,事情看起來就正確了,如下所示:

n = 10
img = np.zeros((n,n,3), np.uint8)
x, y = 0, 0
red = [0, 0, 255]

# Draw the walls in red.  This is the part I changed.
for i in range(n):
    for j in range(n):
        if maze[i][j] == 1:
            img[i,j] = red

# Draw the path in blue
for x, y in path:
    img[x, y] = (255, 0, 0)

可能有一種更有效的方法,盡管您可以將maze映射到img而無需像我在這里所做的那樣進行兩個嵌套的for循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM