gpt4 book ai didi

python - 这两行如何工作 x2 = x+delta[i][0] , y2 = y+delta[i][1]?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:36:35 25 4
gpt4 key购买 nike

我正在阅读下面关于 First Search Program - Artificial Intelligence for Robotics 的代码,我对下面这两行的工作稍作停留:

x2 = x+delta[i][0]
y2 = y+delta[i][1]

我知道从一个节点到邻居的移动模式的增量,但我不明白这两条线在这里是如何工作的。谁能帮我解释一下?

下面的代码:

#grid format
# 0 = navigable space
# 1 = occupied space

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]

#Below the four potential actions to the single field
delta=[[-1, 0], #up
[ 0,-1], #left
[ 1, 0], #down
[ 0, 1]] #right

delta_name = ['^','<','V','>']
cost = 1

def search():
#open list elements are of the type [g,x,y]

closed = [[0 for row in range(len(grid[0]))] for col in range(len(grid))]
#We initialize the starting location as checked
closed[init[0]][init[1]] = 1

# we assigned the cordinates and g value
x = init[0]
y = init[1]
g = 0
#our open list will contain our initial value
open = [[g,x,y]]


found = False #flag that is set when search complete
resign= False #Flag set if we can't find expand

#print('initial open list:')
#for i in range(len(open)):
#print(' ', open[i])
#print('----')


while found is False and resign is False:
#Check if we still have elements in the open list
if len(open)==0: #If our open list is empty
resign=True
print('Fail')
print('############# Search terminated without success')
else:
#if there is still elements on our list
#remove node from list
open.sort()
open.reverse() #reverse the list
next = open.pop()

#print('list item')
#print('next')

#Then we assign the three values to x,y and g.
x = next[1]
y = next[2]
g = next[0]

#Check if we are done

if x == goal[0] and y == goal[1]:
found = True
print(next) #The three elements above this if
print('############## Search is success')
else:
#expand winning element and add to new open list
for i in range(len(delta)):

x2 = x+delta[i][0]
y2 = y+delta[i][1]
#if x2 and y2 falls into the grid
if x2 >= 0 and x2 < len(grid) and y2 >=0 and y2 <= len(grid[0])-1:
#if x2 and y2 not checked yet and there is not obstacles
if closed[x2][y2] == 0 and grid[x2][y2] == 0:
g2 = g+cost #we increment the cose
open.append([g2,x2,y2])#we add them to our open list
#print('append list item')
#print([g2,x2,y2])
#Then we check them to never expand again
closed[x2][y2] = 1

search()

最佳答案

x2y2 是delta中第i个潜在 Action 执行后的位置。

delta[i][0]表示delta中第i个action的第一个元素(第i个action引起的x的变化)

delta[i][1]表示delta中第i个action的第二个元素(第i个action引起的y的变化)

所以 x2=x+delta[i][0]y2=y+delta[i][1] 正在应用第 i 个潜在的 Action 和将生成的新 x 和 y 值存储在 x2y2 中。

在这个程序的上下文中,这些值是为每个潜在的 Action 创建的(for i in range(len(delta)),如果结果位置落入网格,则没有已检查,并且没有障碍物,则该位置被添加到 open 列表中。

关于python - 这两行如何工作 x2 = x+delta[i][0] , y2 = y+delta[i][1]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56814947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com