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

我在阅读下面的代码,关于首次搜索程序 – 机器人人工智能时,对这两行代码的工作原理有点困惑:

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

我知道delta用于表示从一个节点到邻居节点的移动模式,但我无法理解这两行代码在这里是如何工作的。能有人为我解释一下吗?

以下是代码:

#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个潜在动作后的位置。

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

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

因此,x2=x+delta[i][0]y2=y+delta[i][1] 是在应用第i个潜在动作,并将结果的新x和y值存储在x2y2中。

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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注