From 14b94f9016aa65700fedfa6b15016c8e922d1845 Mon Sep 17 00:00:00 2001 From: Sandro Zimmermann Date: Thu, 18 Dec 2025 10:23:01 +0100 Subject: [PATCH] pedestiran updated --- personenstromsimulation/pedestrian_sk.py | 84 +++++++++++++----------- 1 file changed, 46 insertions(+), 38 deletions(-) diff --git a/personenstromsimulation/pedestrian_sk.py b/personenstromsimulation/pedestrian_sk.py index a981654..08ffd63 100644 --- a/personenstromsimulation/pedestrian_sk.py +++ b/personenstromsimulation/pedestrian_sk.py @@ -15,7 +15,7 @@ CELL_OBS = -1 # cell state: obstacle EXIT_X = GRIDSIZE_X+1 # x-coordinate of exit EXIT_Y = int(GRIDSIZE_Y/2) # y-coordinate of exit -VIS_PAUSE = 0.2 # time [s] between two visual updates +VIS_PAUSE = 2 # time [s] between two visual updates VIS_STEPS = 1 # stride [steps] between two visual updates # count pedestrians left in domain @@ -46,6 +46,7 @@ def comp_density(grid): # state transition t -> t + dt def update(old, new): + #print(count_peds(old)) for x in range(1, GRIDSIZE_X+1): for y in range(1, GRIDSIZE_Y+1): @@ -55,43 +56,50 @@ def update(old, new): if old[x,y] == CELL_PED: delta_x = EXIT_X - x delta_y = EXIT_Y - y - - if delta_x != 0 and delta_y != 0: - #terrain = dict(N = {}, NE = {}, E = {}, SE = {}, S = {}, SW = {}, W = {}, NW = {}) - terrain = dict(N = {}, E = {}, S = {}, W = {}) + #terrain = dict(N = {}, NE = {}, E = {}, SE = {}, S = {}, SW = {}, W = {}, NW = {}) + terrain = dict(N = {}, E = {}, S = {}, W = {}) - terrain["N"]["x"], terrain["N"]["y"], terrain["N"]["cell"], terrain["N"]["vector"] = set_terrain(old, x, y+1) - #terrain["NE"]["x"], terrain["NE"]["y"], terrain["NE"]["cell"], terrain["NE"]["vector"] = set_terrain(old, x+1, y+1) - terrain["E"]["x"], terrain["E"]["y"], terrain["E"]["cell"], terrain["E"]["vector"] = set_terrain(old, x+1, y) - #terrain["SE"]["x"], terrain["SE"]["y"], terrain["SE"]["cell"], terrain["SE"]["vector"] = set_terrain(old, x+1, y-1) - terrain["S"]["x"], terrain["S"]["y"], terrain["S"]["cell"], terrain["S"]["vector"] = set_terrain(old, x, y-1) - #terrain["SW"]["x"], terrain["SW"]["y"], terrain["SW"]["cell"], terrain["SW"]["vector"] = set_terrain(old, x-1, y-1) - terrain["W"]["x"], terrain["W"]["y"], terrain["W"]["cell"], terrain["W"]["vector"] = set_terrain(old, x-1, y) - #terrain["NW"]["x"], terrain["NW"]["y"], terrain["NW"]["cell"], terrain["NW"]["vector"] = set_terrain(old, x-1, y+1) - '''print(terrain["N"]["cell"]) - print(terrain["E"]["cell"]) - print(terrain["S"]["cell"]) - print(terrain["W"]["cell"])''' - min = np.inf - jump_to = None - - '''for key in terrain: - if terrain[key]["cell"] == CELL_EMP: - if terrain[key]["vector"] < min: - min = terrain[key]["vector"] - jump_to = terrain[key]''' - for key in terrain: + terrain["N"]["x"], terrain["N"]["y"], terrain["N"]["cell"], terrain["N"]["vector"] = set_terrain(old, x, y+1) + #terrain["NE"]["x"], terrain["NE"]["y"], terrain["NE"]["cell"], terrain["NE"]["vector"] = set_terrain(old, x+1, y+1) + terrain["E"]["x"], terrain["E"]["y"], terrain["E"]["cell"], terrain["E"]["vector"] = set_terrain(old, x+1, y) + #terrain["SE"]["x"], terrain["SE"]["y"], terrain["SE"]["cell"], terrain["SE"]["vector"] = set_terrain(old, x+1, y-1) + terrain["S"]["x"], terrain["S"]["y"], terrain["S"]["cell"], terrain["S"]["vector"] = set_terrain(old, x, y-1) + #terrain["SW"]["x"], terrain["SW"]["y"], terrain["SW"]["cell"], terrain["SW"]["vector"] = set_terrain(old, x-1, y-1) + terrain["W"]["x"], terrain["W"]["y"], terrain["W"]["cell"], terrain["W"]["vector"] = set_terrain(old, x-1, y) + #terrain["NW"]["x"], terrain["NW"]["y"], terrain["NW"]["cell"], terrain["NW"]["vector"] = set_terrain(old, x-1, y+1) + '''print(terrain["N"]["cell"]) + print(terrain["E"]["cell"]) + print(terrain["S"]["cell"]) + print(terrain["W"]["cell"])''' + min = np.inf + jump_to = None + + for key in terrain: + if terrain[key]["cell"] == CELL_EMP: if terrain[key]["vector"] < min: min = terrain[key]["vector"] jump_to = terrain[key] - print(jump_to) - - if jump_to != None and jump_to["cell"] == CELL_EMP: - new[jump_to["x"], jump_to["y"]] = CELL_PED - old[x,y] = CELL_PED - else: - new[x,y] = old[x,y] + '''for key in terrain: + if terrain[key]["vector"] < min: + min = terrain[key]["vector"] + jump_to = terrain[key]''' + print(jump_to) + if jump_to != None: + new[jump_to["x"], jump_to["y"]] = CELL_PED + old[x,y] = CELL_OBS + else: + new[x,y] = old[x,y] + else: + '''old[x,y] = CELL_OBS + print(delta_x) + print(delta_y) + print("") + print(x) + print(y) + print(old[x,y]) + print(new[x,y]) + print("")''' def set_terrain(grid, x, y): cell = grid[x,y] @@ -105,9 +113,9 @@ old[:,0] = CELL_OBS # boundary: south old[:,-1] = CELL_OBS # boundary: north old[0,:] = CELL_OBS # boundary: west old[-1,:] = CELL_OBS # boundary: east -old[EXIT_X,EXIT_Y-1] = CELL_EMP # exit -old[EXIT_X,EXIT_Y] = CELL_EMP # exit -old[EXIT_X,EXIT_Y+1] = CELL_EMP # exit +old[EXIT_X,EXIT_Y-1] = CELL_EMP # exit +old[EXIT_X,EXIT_Y] = CELL_EMP # exit +old[EXIT_X,EXIT_Y+1] = CELL_EMP # exit new = old.copy() # set random starting points for pedestrians @@ -128,9 +136,9 @@ plt.pause(VIS_PAUSE) while count_peds(old) > 0 and time < MAX_TIME: new[1:GRIDSIZE_X+1,1:GRIDSIZE_Y+1] = CELL_EMP update(old, new) - new[EXIT_X,EXIT_Y-1] = CELL_EMP # clear exit + new[EXIT_X,EXIT_Y-1] = CELL_OBS # clear exit new[EXIT_X,EXIT_Y] = CELL_EMP # clear exit - new[EXIT_X,EXIT_Y+1] = CELL_EMP # clear exit + new[EXIT_X,EXIT_Y+1] = CELL_OBS # clear exit old = new.copy() numpeds = count_peds(old) dens.append(comp_density(old))