Home > front end >  Start Cell of the maze
Start Cell of the maze

Time:11-16

Hi I want to change start cell as an upper-left cell and goal cell is bottom right. but in codes start cell is lower-right and goal cell is upper left. In other words its opposite direction. How I change in code. Thanks.


from pyamaze import maze,agent,COLOR,textLabel
from timeit import timeit
def UCS(m,*h,start=None):
    if start is None:
        start=(m.rows,m.cols)

    hurdles=[(i.position,i.cost) for i in h]

    unvisited={n:float('inf') for n in m.grid}
    unvisited[start]=0
    visited={}
    revPath={}
    while unvisited:
        currCell=min(unvisited,key=unvisited.get)
        visited[currCell]=unvisited[currCell]
        if currCell==m._goal:
            break
        for d in 'EWNS':
            if m.maze_map[currCell][d]==True:
                if d=='E':
                    childCell=(currCell[0],currCell[1] 1)
                elif d=='W':
                    childCell=(currCell[0],currCell[1]-1)
                elif d=='S':
                    childCell=(currCell[0] 1,currCell[1])
                elif d=='N':
                    childCell=(currCell[0]-1,currCell[1])
                if childCell in visited:
                    continue
                tempDist= unvisited[currCell] 1
                for hurdle in hurdles:
                    if hurdle[0]==currCell:
                        tempDist =hurdle[1]

                if tempDist < unvisited[childCell]:
                    unvisited[childCell]=tempDist
                    revPath[childCell]=currCell
        unvisited.pop(currCell)
    
    fwdPath={}
    cell=m._goal
    while cell!=start:
        fwdPath[revPath[cell]]=cell
        cell=revPath[cell]
    
    return fwdPath,visited[m._goal]
            



if __name__=='__main__':
    myMaze=maze(10,10)
    myMaze.CreateMaze(loadMaze='maze--2021-11-12--21-36-39.csv')
    # myMaze.CreateMaze(loadMaze='dijkMaze.csv')

    # h1=agent(myMaze,4,4,color=COLOR.red)
    # h2=agent(myMaze,4,6,color=COLOR.red)
    # h3=agent(myMaze,4,1,color=COLOR.red)
    # h4=agent(myMaze,4,2,color=COLOR.red)
    # h5=agent(myMaze,4,3,color=COLOR.red)

    # h1.cost=100
    # h2.cost=100
    # h3.cost=100
    # h4.cost=100
    # h5.cost=100

    # path,c=dijstra(myMaze,h1,h2,h2,h3,h4,h5)
    # path,c=dijkstra(myMaze,h1,h2,h3,h4,h5,start=(6,1))
    path,c=UCS(myMaze)
    textLabel(myMaze,'Total Cost',c)

    

    a=agent(myMaze,color=COLOR.cyan,filled=True,footprints=True,)
    # a=agent(myMaze,6,1,color=COLOR.cyan,filled=True,footprints=True)
    myMaze.tracePath({a:path},delay=20)

    
    t1=timeit(stmt='UCS(myMaze)',number=100,globals=globals())
    textLabel(myMaze,'UCS Time',t1)
    
    myMaze.run()

The maze path(csv)

  cell  ,E,W,N,S
"(1, 1)",0,0,0,1
"(2, 1)",1,0,1,1
"(3, 1)",1,0,1,1
"(4, 1)",1,0,1,1
"(5, 1)",1,0,1,1
"(6, 1)",1,0,1,0
"(7, 1)",1,0,0,1
"(8, 1)",1,0,1,1
"(9, 1)",1,0,1,0
"(10, 1)",1,0,0,0
"(1, 2)",1,0,0,1
"(2, 2)",1,1,1,0
"(3, 2)",1,1,0,0
"(4, 2)",1,1,0,0
"(5, 2)",1,1,0,0
"(6, 2)",1,1,0,1
"(7, 2)",1,1,1,0
"(8, 2)",1,1,0,0
"(9, 2)",0,1,0,1
"(10, 2)",1,1,1,0
"(1, 3)",1,1,0,0
"(2, 3)",0,1,0,1
"(3, 3)",1,1,1,1
"(4, 3)",0,1,1,1
"(5, 3)",1,1,1,1
"(6, 3)",1,1,1,0
"(7, 3)",1,1,0,1
"(8, 3)",1,1,1,1
"(9, 3)",0,0,1,1
"(10, 3)",1,1,1,0
"(1, 4)",1,1,0,1
"(2, 4)",1,0,1,1
"(3, 4)",1,1,1,1
"(4, 4)",0,0,1,1
"(5, 4)",1,1,1,0
"(6, 4)",1,1,0,1
"(7, 4)",1,1,1,0
"(8, 4)",1,1,0,1
"(9, 4)",0,0,1,1
"(10, 4)",1,1,1,0
"(1, 5)",1,1,0,0
"(2, 5)",1,1,0,0
"(3, 5)",1,1,0,1
"(4, 5)",0,0,1,1
"(5, 5)",1,1,1,1
"(6, 5)",1,1,1,0
"(7, 5)",1,1,0,1
"(8, 5)",0,1,1,1
"(9, 5)",0,0,1,1
"(10, 5)",1,1,1,0
"(1, 6)",1,1,0,1
"(2, 6)",1,1,1,1
"(3, 6)",0,1,1,1
"(4, 6)",0,0,1,1
"(5, 6)",1,1,1,0
"(6, 6)",1,1,0,1
"(7, 6)",0,1,1,1
"(8, 6)",0,0,1,1
"(9, 6)",0,0,1,1
"(10, 6)",1,1,1,0
"(1, 7)",1,1,0,0
"(2, 7)",1,1,0,1
"(3, 7)",1,0,1,0
"(4, 7)",1,0,0,1
"(5, 7)",0,1,1,1
"(6, 7)",1,1,1,1
"(7, 7)",0,0,1,1
"(8, 7)",0,0,1,1
"(9, 7)",1,0,1,1
"(10, 7)",1,1,1,0
"(1, 8)",1,1,0,1
"(2, 8)",1,1,1,0
"(3, 8)",0,1,0,1
"(4, 8)",1,1,1,1
"(5, 8)",0,0,1,1
"(6, 8)",1,1,1,1
"(7, 8)",1,0,1,1
"(8, 8)",0,0,1,1
"(9, 8)",1,1,1,0
"(10, 8)",1,1,0,0
"(1, 9)",1,1,0,0
"(2, 9)",1,1,0,1
"(3, 9)",1,0,1,1
"(4, 9)",0,1,1,1
"(5, 9)",1,0,1,1
"(6, 9)",0,1,1,0
"(7, 9)",1,1,0,1
"(8, 9)",1,0,1,1
"(9, 9)",0,1,1,1
"(10, 9)",1,1,1,0
"(1, 10)",0,1,0,1
"(2, 10)",0,1,1,0
"(3, 10)",0,1,0,1
"(4, 10)",0,0,1,1
"(5, 10)",0,1,1,1
"(6, 10)",0,0,1,1
"(7, 10)",0,1,1,0
"(8, 10)",0,1,0,1
"(9, 10)",0,0,1,1
"(10, 10)",0,1,1,0

I want to change start cell as an upper-left cell and goal cell is bottom right. but in codes start cell is lower-right and goal cell is upper left. In other words its opposite direction. How I change in code. Thanks.

CodePudding user response:

don't know how this relate to algorithms but here you go:

from pyamaze import maze, agent, COLOR, textLabel
from timeit import timeit


def UCS(m, *h, start=None):
    if start is None:
        start=(1,1)

    hurdles = [(i.position, i.cost) for i in h]

    unvisited = {n: float('inf') for n in m.grid}
    unvisited[start] = 0
    visited = {}
    revPath = {}
    while unvisited:
        currCell = min(unvisited, key=unvisited.get)
        visited[currCell] = unvisited[currCell]
        if currCell == m._goal:
            break
        for d in 'EWNS':
            if m.maze_map[currCell][d] == True:
                if d == 'E':
                    childCell = (currCell[0], currCell[1]   1)
                elif d == 'W':
                    childCell = (currCell[0], currCell[1] - 1)
                elif d == 'S':
                    childCell = (currCell[0]   1, currCell[1])
                elif d == 'N':
                    childCell = (currCell[0] - 1, currCell[1])
                if childCell in visited:
                    continue
                tempDist = unvisited[currCell]   1
                for hurdle in hurdles:
                    if hurdle[0] == currCell:
                        tempDist  = hurdle[1]

                if tempDist < unvisited[childCell]:
                    unvisited[childCell] = tempDist
                    revPath[childCell] = currCell
        unvisited.pop(currCell)

    fwdPath = {}
    cell = m._goal
    while cell != start:
        fwdPath[revPath[cell]] = cell
        cell = revPath[cell]

    return fwdPath, visited[m._goal]


if __name__ == '__main__':
    myMaze = maze(10, 10)
    myMaze.CreateMaze(x=10,y=10,loadMaze='maze--2021-11-12--21-36-39.csv')
    # myMaze.CreateMaze(loadMaze='dijkMaze.csv')

    # h1=agent(myMaze,4,4,color=COLOR.red)
    # h2=agent(myMaze,4,6,color=COLOR.red)
    # h3=agent(myMaze,4,1,color=COLOR.red)
    # h4=agent(myMaze,4,2,color=COLOR.red)
    # h5=agent(myMaze,4,3,color=COLOR.red)

    # h1.cost=100
    # h2.cost=100
    # h3.cost=100
    # h4.cost=100
    # h5.cost=100

    # path,c=dijstra(myMaze,h1,h2,h2,h3,h4,h5)
    # path,c=dijkstra(myMaze,h1,h2,h3,h4,h5,start=(6,1))
    path, c = UCS(myMaze)
    textLabel(myMaze, 'Total Cost', c)

    a = agent(x=1,y=1, parentMaze=myMaze ,color=COLOR.cyan, filled=True, footprints=True, )
    # a=agent(myMaze,6,1,color=COLOR.cyan,filled=True,footprints=True)
    myMaze.tracePath({a: path}, delay=20)

    t1 = timeit(stmt='UCS(myMaze)', number=100, globals=globals())
    textLabel(myMaze, 'UCS Time', t1)

    myMaze.run()

just so you would know:

when you create a maze or putting an agent in a maze you can use the (x,y) attribute to control the starting and goal positions, so by changing the attributes at initialization of createMaze() and the gent() you can start/end the maze wherever you need.

  • Related