寻找最佳路径

时间:2018-07-04 13:33:19

标签: python-3.x shortest-path cost-based-optimizer motion-planning

我正在尝试从给定的
initial_state(形式为list [row,col,orientation])到给定的 goal(of表单列表[row,col])

这辆车可以自由向前进(上,左,下,右)的方向行驶。

它可以执行以下3个动作:
向右转并向前移动(2),向前移(1),向左转并向前移动(20)
注意:括号中的数字是执行相应操作所需的费用

旋转发生在同一单元格中。
由0和1组成的2D列表(称为 grid )作为输入(2D非循环世界)给出。
0 ---可导航单元格
1 ---不可导航单元格

任务是从多个可能的路径中找到一条路径(成本最低)。

这是我的代码。

forward = [[-1,0],[0,-1],[1,0],[0,1]]
forward_name = ['up','left','down','right']
action = [-1,0,1]  ## turnRight, noTurn, turnLeft
action_name = ['R','#','L']
grid = [[1,1,1,0,0,0],
        [1,1,1,0,1,0],
        [0,0,0,0,0,0],
        [1,1,1,0,1,1],
        [1,1,1,0,1,1]]
init = [4,3,0]  ## for init[2]-- 0-up, 1-left, 2-down, 3-right 
goal = [2,0]
cost = [2,1,20]  ## turnRight, noTurn, turnLeft

def optimum_policy2D(grid, init, goal, cost):
    value = [[999*i for i in row] for row in grid]
    #print(value)
    r,c,orientation = init
    Routes = []   ##list of routes
    Routes.append([0,[init[:2]],orientation]) 
                   ## [cost,list of cell in the route,orientation]

    while [r,c]!=goal:
        presentRoute = Routes[0]
        for i in range(len(action)):
            dr, dc = forward[(presentRoute[2]+action[i])%4]
            if r+dr in range(len(grid)) and c+dc in range(len(grid[0])) and 
            value[r+dr][c+dc]!=999:
                thisRoute = presentRoute[:]
                thisRoute[1].append([r+dr,c+dc])
                thisRoute[0] += cost[i]
                thisRoute[2] = (thisRoute[2]+action[i])%4
                Routes.append(thisRoute[:])
        Routes = Routes[1:]
        Routes.sort()
        r,c = Routes[0][1][-1]
    print(Routes[0])

optimum_policy2D(grid, init, goal, cost)   

我在不可导航的单元格上创建一个具有任意高值999(高于所涉及的最大成本)的2D列表值。

接下来,我创建一个空列表(称为路由),该列表将存储不同的路由。每条路线的格式为 [成本,路线中的单元格列表,汽车的最终方向] 。在进入while-Loop路由之前,它会以初始状态进行初始化(因为它将成为任何路由的一部分)。

for-Loop检查有效邻居(邻居的有效性-应该在网格中,应该可导航)。

对于有效的nieghbour-
,请在此Route中创建presentRoute的副本。
将新的单元格坐标追加到路线中的单元格列表。
根据执行的操作更新成本。
< b>
根据操作更新最终方向。
* 最后将此新路线附加到Routes。
(每个有效邻居都有一条新路线附加到路线)

路线[0]现在已删除。在对路线进行排序时,列表中的第一条路线将是成本最低的路线。变量“ r”和“ c”已更新为最小费用路径的最后一个单元格。

一旦[r,c]等于目标,我们便找到了成本最低的路线。

输出与我的看法不同。我在这段代码中寻找错误。

0 个答案:

没有答案