From 014df61e4f7b3a5a60a161f095f6ac92cb2881ce Mon Sep 17 00:00:00 2001 From: git-sandro Date: Fri, 5 Dec 2025 15:33:14 +0100 Subject: [PATCH] verkehrsimulation --- verkehrssimulation/verkehr.py | 55 ++++++++++++++++++++++++++++++++ verkehrssimulation/verkehr_sk.py | 21 ++---------- 2 files changed, 57 insertions(+), 19 deletions(-) create mode 100644 verkehrssimulation/verkehr.py diff --git a/verkehrssimulation/verkehr.py b/verkehrssimulation/verkehr.py new file mode 100644 index 0000000..b801d3b --- /dev/null +++ b/verkehrssimulation/verkehr.py @@ -0,0 +1,55 @@ +#!/usr/bin/python + +import numpy as np +import matplotlib.pyplot as plt + +GRIDSIZE = 300 +INIT_CELLS = int(GRIDSIZE*0.3) +MAX_TIME = 300 +EMPTY_CELL = -1 +DALLY_LIMIT = 0.2 + + +# query distance between two cars +def get_distance(grid, i): + dist = 0 + while grid[(i+dist+1)%GRIDSIZE] == EMPTY_CELL and dist < 5: + dist = dist + 1 + return dist + +# state transition t -> t + dt +def update(grid_old, grid_new): + for i in range(GRIDSIZE): + + if grid_old[i] != EMPTY_CELL: + v = np.min((grid_old[i]+1, 5)) # accelerate + dist = get_distance(grid_old, i) + if v > dist: v = dist # break + p = np.random.random() + if p == DALLY_LIMIT: v = max(grid_old[i-1], 0) + grid_new[(i+v)%GRIDSIZE] = v # move + +# allocate memory and initialise grids +grid_old = np.full((GRIDSIZE), EMPTY_CELL, dtype=np.int32) +grid_new = np.full((GRIDSIZE), EMPTY_CELL, dtype=np.int32) +traffic = np.zeros((MAX_TIME, GRIDSIZE), dtype=np.int32) + +# set intial car positions and velocities +for k in range(INIT_CELLS): + while True: + i = int(float(GRIDSIZE)*np.random.random()) + if grid_old[i] == EMPTY_CELL: + grid_old[i] = int(float(6)*np.random.random()) + break + +# run updates +for t in range(MAX_TIME): + traffic[t,:] = grid_old[:] + update(grid_old, grid_new) + for i in range(GRIDSIZE): + grid_old[i] = grid_new[i] + grid_new[i] = EMPTY_CELL +plt.xlabel('Cells') +plt.ylabel('Timesteps') +plt.imshow(traffic, cmap='Blues') +plt.show() diff --git a/verkehrssimulation/verkehr_sk.py b/verkehrssimulation/verkehr_sk.py index d11676f..c6b79bd 100644 --- a/verkehrssimulation/verkehr_sk.py +++ b/verkehrssimulation/verkehr_sk.py @@ -9,12 +9,6 @@ INIT_CELLS = int(GRIDSIZE*0.1) MAX_TIME = 300 EMPTY_CELL = -1 -def unit_distance(grid, v): - for i in range(1, v): - if grid[i] != -1: - return i - return -1 - # query distance between two cars def get_distance(grid, i): dist = 0 @@ -23,10 +17,7 @@ def get_distance(grid, i): Insert your code here """ - print(i % 300) - quit() - - for n in range(1, grid[i]+1): + for n in range(1, (grid[i]+1)&GRIDSIZE): if grid[i + n] != -1: return n return -1 @@ -40,15 +31,7 @@ def update(grid_old, grid_new): Insert your code here """ if dist != -1: - if dist == 0: - grid_new[i] = 0 - elif dist - grid_old[i] < 0: - grid_new[i] = dist - 1 - else: - if grid_old[i] != 5: - grid_new[i] += 1 - else: - grid_new[i] = grid_old[i] + print(dist) # allocate memory and initialise grids grid_old = np.full((GRIDSIZE), EMPTY_CELL, dtype=np.int32)