ich wollte eine sehr einfache Verkehrssimulation nach dem Nagel-Schreckenberg-Modell schreiben. Die Funktioniert so weit auch gut, alle Fahrzeuge bewegen sich so wie gewollt.
Nur wird dabei jedes mal die "Straße", die ich als Input gebe, verändert:
a
Out[3]: [4, 5, -1, 5, -1, -1, -1, 2, 0, -1, -1, -1, 4, -1, 0]
NaSch(a,0,5)
Out[4]: [0, -1, 1, -1, -1, -1, 3, 0, -1, 1, -1, -1, -1, 1, -1]
a
Out[5]: [0, 1, -1, 3, -1, -1, -1, 0, 1, -1, -1, -1, 1, -1, -1]
Das verstehe ich nicht, da ich die input-Liste nur am Anfang einmal kopiere und ansonsten nicht anrühre. Hier der Code der Funktion:
Code: Alles auswählen
def NaSch(st,p,v,a=1):
"""
Umsetzung Nagel-Schreckenberg, s: Straße,
p: Trödel.wsk. v: max Geschwind., a: Beschleunigung
"""
s = st
# 1. Schritt: Beschleunigung für Fahrzeuge unter max. v + Trödel.wsk.
for i in range(0,len(s)):
if s[i] != -1:
if s[i] < 5:
s[i] += a
if s[i] > 0:
if random.randint(1,100) < p:
s[i] -= 1
# 2. Schritt: Begrenzung der Geschwindigkeit durch andere Fahrzeuge
for i in range(0,len(s)):
if s[i] != -1:
for j in range(i+1,i+s[i]+1):
try:
if s[j] != -1:
s[i] = j-i-1
break
except IndexError:
s[i] = -1
# 3. Schritt: Ausführen der Bewegungen
s_n = [-1]*len(s)
for i in range(0,len(s)):
if s[i] != -1:
s_n[i+s[i]] = s[i]
return s_n