编写并运行了一个人工智能搜索程序,从一开始就运行搜索,直到找到结果为止。但是,当我运行它时,我没有得到搜索结果,而是得到fail和none。如果您知道问题的起因,我们将不胜感激
grid = [[0, 0, 1, 0, 0, 0],
[0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 1, 0],
[0, 0, 1, 1, 1, 0],
[0, 0, 0, 0, 1, 0]]
init = [0, 0]
goal = [len(grid)-1, len(grid[0])-1]
cost = 1
delta = [[-1, 0], # go up
[ 0,-1], # go left
[ 1, 0], # go down
[ 0, 1]] # go right
delta_name = ['^', '<', 'v', '>']
def search():
closed = [[0 for row in range(len(grid[0]))] for col in range(len(grid))]
closed[init[0]][init[1]] = 1
x = init[0]
y =init[1]
g = 0
open = [[g, x, y]]
found = False
resign = False
while found is False and resign is False:
if len(open) == 0:
resign = True
print 'fail'
else:
open.sort()
open.reverse()
next = open.pop()
x = next[3]
y = next[4]
g = next[1]
if x == goal[0] and y == goal[1]:
found = next
print next
else:
for i in range(len(delta)):
x2 = x + delta[i][0]
y2 = y + delta[i][1]
if x2 >= 0 and x2 < len(grid) and y2 >= 0 and y2 < len(grid):
if closed[x2][y2] == 0 and grid[x2][y2] == 0:
g2 = g + cost
open.append([g2, x2, y2])
closed[x2][y2] = 1
print search()
第一个问题在代码的这一部分:
open
列表中的每个元素只有三个条目,因此3
和4
是无效的索引。这可能应更改为:第二个问题在本部分第一行:
x2
和y2
都与len(grid)
进行比较,但是您似乎没有正方形网格,因此其中一个检查将是不正确的。可能应该改为:潜在的第三个问题是
search()
函数似乎要返回一些东西,但它没有任何return
语句。它总是自动返回None
,这意味着底部的print search()
语句总是要打印None
。您的问题不清楚您希望函数返回什么,所以我不能确定如何修复它注意到这一部分中的任何一条评论令人困惑也可能是有益的:
或者使用变量名,比如
x
和y
来表示坐标是令人困惑的。在技术意义上不是问题,但是在这个实现中,x
坐标是由注释“向上”和“向下”的条目修改的,而y
坐标是由“向左”和“向右”修改的相关问题 更多 >
编程相关推荐