from random import uniform, shuffle import matplotlib.pyplot as plt import numpy as np L = 500 # number of cells in row num_iters = 500 # number of iterations density = 0.48 # how many positives vmax = 2 p = 0.2 cars_num = int(density * L) initial = [0] * cars_num + [-1] * (L - cars_num) shuffle(initial) iterations = [initial] for i in range(num_iters): prev,curr = iterations[-1],[-1] * L for x in range(L): if prev[x] > -1: vi = prev[x] d = 1 while prev[(x + d) % L] < 0: d += 1 vtemp = min(vi+1, d - 1, vmax) # increse speed up to max speed, but don't move further than next car v = max(vtemp - 1, 0) if uniform(0,1) < p else vtemp # with probability p hit the brakes, otherwise sustain velocity curr[(x + v) % L] = v # perform the move #print(x,v) iterations.append(curr) a = np.zeros(shape=(num_iters,L)) for i in range(L): for j in range(num_iters): a[j,i] = 1 if iterations[j][i] > -1 else 0 # showing image plt.imshow(a, cmap="Greys", interpolation="nearest") plt.show()