Lösungen
Contents
Lösungen#
Aufgabe 1#
Schreibe eine Funktion, welche aus einem eingegebenen Preis und der eingegebenen Höhe des bezahlten Geldes das entsprechende Rückgeld berechnet und als Output ausgibt.
def calculate_change(price, given_money):
"""Berechnet Wechselgeld und gibt den Wert zurück."""
# Differenz berechnen und ausgeben
return given_money - price
my_change = calculate_change(price=6.50, given_money=10)
print(my_change)
3.5
Aufgabe 2#
Schreibe eine Funktion, die die Länge einer Liste misst und zurückgibt, ohne dabei selbst die Funktion
len()
zu benutzen.
def length(sequence):
"""Gibt Länge eines sequentiellen Datentyps zurück."""
# Zählvariable
length = 0
# für jedes Element in Sequenz (z.B. Liste)
for element in sequence:
# Zählvariable um 1 erhöhen
length += 1
# Zählvariable ausgeben
return length
test_list = ["Rinde", "Moos", "Sonnenblume", "Glasfaser"]
length(test_list)
4
Aufgabe 3#
Funktionen erlauben uns im Kontext von ABM, den Code für ein Modell kompakt in einer Funktion zu speichern und gleichzeitig bestimmte Parameter des Modells über den Funktionsinput kontrollieren zu können. Das ist praktisch, wenn wir Simulationsexperimente durchführen, bei welchen wir das gleiche Modell mehrmals mit unterschiedlichen Parametern ausführen wollen, um den Effekt der Parameterveränderung zu untersuchen.
Nimm den untigen Code für das Nagel-Schreckenberg-Modell und verändere diesen so, dass er durch eine Funktion aufgerufen werden kann.
Definiere die Funktion so, dass Modellparameter deiner Wahl (z.B. die anfängliche Distanz zwischen den Agenten oder die Trödelwahrscheinlichkeit) mittels Funktionsinput kontrolliert werden können. Setze dabei Standardwerte für die Funktionsinputs, wenn du magst.
Rufe die definierte Funktion mit verschiedenen Inputwerten auf.
import random
def nasch_model(
ticks=100,
max_speed=5,
dawdling_prob=0.1,
n_agents=15,
initial_distance=6,
):
street_len = n_agents * initial_distance
# Leere Liste, die gleich mit Agenten befüllt wird
population = []
# für jeden zu erstellenden Agenten
for i in range(n_agents):
# Agent als Dictionary erstellen
agent = {
"id": i,
"position": i * initial_distance,
"speed": max_speed,
"space_ahead": initial_distance - 1,
}
# Agent an die Populationsliste hängen
population.append(agent)
# Population nochmal überarbeiten - jeweils vorausfahrende und nachfahrende Agenten einspeichern
# für jeden Agenten in Population
for agent in population:
# den vorausfahrenden Agenten merken/als Eigenschaft einspeichern
agent.update({"agent_ahead": population[(agent["id"]+1)%len(population)]})
# den nachfahrenden Agenten merken/als Eigenschaft einspeichern
agent.update({"agent_behind": population[(agent["id"]-1)%len(population)]})
# für jeden Zeitschritt
for tick in range(ticks):
# "leere" Straße als Liste von Punkten erstellen
street_as_list = []
for i in range(street_len):
street_as_list.append(".")
# für jeden Agenten
for agent in population:
# Agenten auf entsprechender Position auf Straße einfügen
# Agent wird in diesem Fall als dessen Geschwindigkeit repräsentiert
street_as_list[agent["position"]] = str(agent["speed"])
# Repräsentation der Straße in einen String umwandeln
street_as_string = "".join(street_as_list)
# grafische Darstellung in Konsole anzeigen
print(street_as_string)
# für jeden Agenten (die vier Handlungsschritte umsetzen)
for agent in population:
# 1. Acceleration
if agent["speed"] < max_speed:
agent["speed"] += 1
# 2. Slowing down
if agent["speed"] > agent["space_ahead"]:
agent["speed"] = agent["space_ahead"]
# 3. Randomization
if agent["speed"] > 0 and random.random() <= dawdling_prob:
agent["speed"] -= 1
# 4. Car motion
agent["position"] = (agent["position"] + agent["speed"]) % street_len
# für jeden Agenten (die Anzahl der freien Straßenabschnitte neu berechnen)
for agent in population:
# neue Anzahl der freien Zellen vor Agent berechnen und einspeichern
agent["space_ahead"] -= agent["speed"]
# neue Anzahl der freien Zellen vor dem NACHFAHRENDEM Agent berechnen und DIESEM einspeichern
agent["agent_behind"]["space_ahead"] += agent["speed"]
nasch_model(dawdling_prob=0)
5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....
.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5
....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.
...5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5..
..5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5...
.5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5....
5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....
.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5
....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.
...5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5..
..5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5...
.5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5....
5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....
.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5
....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.
...5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5..
..5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5...
.5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5....
5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....
.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5
....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.
...5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5..
..5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5...
.5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5....
5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....
.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5
....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.
...5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5..
..5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5...
.5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5....
5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....
.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5
....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.
...5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5..
..5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5...
.5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5....
5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....
.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5
....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.
...5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5..
..5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5...
.5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5....
5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....
.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5
....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.
...5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5..
..5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5...
.5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5....
5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....
.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5
....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.
...5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5..
..5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5...
.5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5....
5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....
.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5
....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.
...5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5..
..5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5...
.5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5....
5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....
.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5
....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.
...5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5..
..5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5...
.5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5....
5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....
.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5
....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.
...5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5..
..5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5...
.5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5....
5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....
.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5
....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.
...5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5..
..5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5...
.5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5....
5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....
.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5
....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.
...5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5..
..5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5...
.5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5....
5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....
.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5
....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.
...5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5..
..5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5...
.5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5....
5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....
.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5
....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.
...5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5..
..5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5...
.5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5....
5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....
.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5
....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.
...5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5..
nasch_model(dawdling_prob=0.2)
5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....
.....5.....5....4......5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5
...4.....4.....4.....5......5.....5.....5.....5.....5.....5.....5.....5.....5.....5....4..
..5.....5....4......5.....5.....4......5.....5.....5.....5.....5.....5.....5....4.....4...
.5.....5....4.....5......5....4.....4.......5.....5.....5.....5....4......5....4.....5....
5.....5....4.....5....4......4.....5.....5.......5.....5.....5....4.....5.....4....4......
.....5....4.....5...3......5......5.....5....4........5.....5...3......5.....5....4.....5.
...5.....4....4....3....4.......5.....4.....4.....5.......4....3....4.......5....4.....5..
.4......5...3.....4....4....4........5.....5.....5.....5......4....4.....5......4.....5...
4.....5....3....4.....4....4.....5.......4......5.....5.....5....3.....4......5......5....
.....5....4....4.....5....4.....5.....5.......5......5.....5...3.....4......5......5.....4
....5....4....4.....5....4.....5.....5.....5......4.......5...3...3.......5......5......5.
...5....4....4....4.....4.....5.....5.....5.....5.....4......3...3....4.......4.......5...
.5.....4....4....4.....5.....5.....5.....5.....5.....5.....5....3....4.....5.......5......
......5....4....4.....5.....5.....5....4......5....4......5...3.....4.....5.....5......4..
.4........4....4.....5....4......5....4.....5.....4.....5...2.....4......5.....5.....5....
5.....5.......4....4....3.....4.....3......5.....5....4....3...3.......5......5.....5.....
.....5....4......3.....4....4......5....4.......5...3.....4...3....4........5......5.....5
....5....4.....5.....4.....4.....5.....4....4......3...3....2.....4.....5........5.....4..
..5.....4.....5.....5.....5....4......5....4.....5....3....4..2........5.....5.......4....
5.....4......5....4......5....4....4......4....4.....4....4..2..2...........5.....5.......
.....5....4......4.....5....3.....4.....5.....4.....5....4..2..2...3.............5.....5..
..5......4.....5......5....4....4......5....4......5...3...2..2...3...3...............5...
.5.....5......5.....5....3.....4.....5.....4....4.....3...3..2...3...3....4...............
......5.....5......5...3.....4......5....4.....4.....5..2..1....3..2.....4.....5..........
...........5.....5....3....4.....4......4.....5.....5..2..2..2....2...3......4......5.....
................5....4....4.....5....4.......5....4...2..2..2..2....2.....4......4.......5
....5..............3.....4....4.....4.....5......4...3..2..2..2...3....3.......5......5...
4.......4..............4.....4.....5....4......5....3.1...2..2...3....4...3.........5.....
....4........5.............4......5....4.....5.....4.1..2..1....3....4..2.....4..........5
...4.....5........5.............5.....4.....5.....5.1..2..2..2......4.1....3......4.......
.......4......5.......4..............5.....5.....5.1..2..2.1....3...0..1......3........5..
.4..........5......5......4...............5.....5.1..2..2.1..2.....3.1...2........4.......
......5..........5......5......5..............4..1..2..2.1..2..2....1..2....3..........5..
..5........5.........4......4.......5...........2..2..20...2..2...3..1....3.....4.........
.......5........5.........5......5.......5.......1...20.1....2...3..2.1.......4......5....
5...........5........5.........5......5.......5....2.0.1..2.....3.1..1..2..........5......
.....5...........5.......4.........4......4......3..10..1....3..0...2.1...2............4..
..5.......5...........5.......5.........5......5...20.1...2....2.1..0...2....3............
.......5......4............5.......5.........5....300...2...2..0...2.1.....3.....4........
............5......5............5......4........3.000.....2...2.1...1..2.......4......5...
.5...............5......5............5......5....100.1.......3.1.1....2...3.........5.....
......5...............5......5............5....3.00.1.1.......1.1.1......3....4..........5
...4.......5...............5......5...........4.10.10...2.....0..1.1.........4.....5......
........5.......5...............5......5.......100.0.1.....3..0..0...2............5.....5.
...5.........5.......5...............5.....4...000..1.1......2.1..1.....3.............4...
.5.....4..........5.......5...............5...300.1..1..2.....1..2..2.......4.............
.....4......5..........5.......5.............300.1..2..2...3....2..2...3.........5........
..........5......5..........5.......5........00.1..2..2...3....4..2...3....4.........4....
...............5......5..........5.......5...0.1..2..2...3....4..2...3....4.....5........4
...4...............4.......5.........4......30...2..2...3....4..2...3....4.....5.....5....
.......4................5......4..........5.0.1....2...3....4.1....3....4.....5.....5....4
....5.......5................5......5......1.1..2.....3....4.1..2.....3......5.....5....4.
...5....4.......4.................5......5..1..2...3.....3..1..2...3......4......4....3...
4.....3.....4........5.................5...2..2..2.....4...2..2...3....4.......5....3.....
.....5....4.....4.........5...............3..2..2...3.....3.1...2.....4.....5......4....4.
..4......4....4......5.........5............2..2...3....4..1..2....3.......5.....5.....4..
.4.....5.....4.....5......5.........5.........2...3....4..2..2...3.....4........5....4....
5.....5.....5.....5.....5.....4..........5.......3....4..2..2...3....4......5.......4.....
.....5....4.....4......5.....5.....5..........5......4..2..2...3....4.....5......5.......5
....5...3.....4......5.....4......5....4...........5...2..2...3....4.....5.....5......5...
4......3....4.....4.......5....4......4.....5.........3..2..2.....4.....5.....5.....5.....
.....5....3......5.....5......4....4.......5.....5......2..2...3.......5.....5.....5.....5
....5....4....4.......5.....5....3......5.......5.....5...2...3....4.......4......5.....5.
...5....4....4.....5......4.....4....4.......5.......5..2....3....4.....5......4.......5..
..5....4....4.....5.....5......5....4.....5......4....1...2......4.....5.....5......5.....
......4...3......5.....5.....5.....4.....5.....5.....4.1.....3........5.....5.....5......5
....5...2....3........5.....5.....5.....5....4......50...2.......4.........5.....5.....5..
.4.....3...3....3..........5.....5.....5...3.....4..0.1.....3.........5.........5.....5...
4.....5...3...3.....4..........4.....4....3....4..1..1..2.......4.........4..........5....
....4....3...3....4......5..........5....4....4..2..2..2...3........4..........5........3.
..4.....4...3....4.....5.....4..........4...3...2..2..2..2.....4.........5..........5.....
.......5...3...3.....4......5....4.........3...3..2..2..2...3.......5.........5..........5
...4......3...3...3......4......4.....5......2...2..2..2..2.....4........5........4.......
........5....3...3...3.......4.......5.....5....3..2..2..2...3......4.........5........5..
..5.........4...3..2.....4........5.......5....4..2..2..2..2.....4.......5........4.......
.......5......2...2...3.......5.......4.......4..2..2..2..2...3.......5......4.........5..
..5........4....2....3....4........5.......5....2..2..2.1....3....4........5......5.......
.......5.......4...3....3......5........5......4..2.1..1..2......4....4.........5......5..
.4.........4.....2.....4....4.......5........5...2.1..2..2...3.......4.....5.........5....
5.....5.........5...3......4.....5......4.......3.1.1...2...3...3.........5....4..........
.....5.....5.......3....4.......5....4.......5...1.1.1....2...2.....4.........4.....5.....
..........5.....5......4.....5......4.....5.....3.1.1..2.....3..2........5.........5.....5
....5..........5....4.......5.....5......5.....5.10...2..2.....2...3..........5.........5.
...5.....5.........4....4........5.....5.....4.0.0.1....2...3.....3...3............5......
........5.....5........4.....5........5.....5.1.1.1..2.....3....4....3....4.............5.
...5........4......5.......4......5........5.1.1.1..2..2.......4....4....4.....5..........
........5........5......5.......5......5....1.10...2..2..2.........4....4.....5.....5.....
............4........4......4........5.....40.00.....2..2...3..........4.....5.....5.....5
....5............5.......4.......5.......4.0.10.1.....1....3....4...........5.....5....4..
..5......5............5.......5.......5...1.10.1..2.....2.....3......5...........5....4...
.5.....5......5............5......4.....2.0.0.1..2...3.....3......4.......5..........4....
5.....5.....5......5............5......5.1.1.1..2...3....4.....4......4.......4...........
.....5.....5.....5.....4.............5..10..1.1....3....4.....5.....5......5.......5......
..........5.....5.....5.....5.........1.0.1.0...2.....3......5.....5.....5......5.......5.
...5...........5.....5....4.....4......1.1.1.1....2.......4.......5.....5.....5.....4.....
.......4............5...3......5.....5..1.1.1..2.....3........4........5.....5....4......5
....5.......5.........2.....4.......5..2.1.1..2...3......4........4.........5....4.....5..
..5......5.......5.......3.......5....2.1.1.1....3....4......4........4.........4....4....
.......5.....4........5......4.......40..1.1..2......4....4.......5........5........4....4
nasch_model(dawdling_prob=0.4)
5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....
....4......5....4......5.....5....4......5....4.....4.....4......5....4......5....4......5
...4....4......4.....5......5....4....4......4.....5.....5....4......4.....5.....4.....5..
.4.....4.....5.....4......5.....4...3......5......5....4.....4.....5......5....4......5...
4.....5.....5.....5.....5.....4....3...3........5.....4.....5.....5....4......4.....5.....
.....5....4.....4......5.....5....4..2....3..........5.....5.....5....4....4.......5....4.
...5.....4.....5.....5.....4.....4.1....3....3...........4......5....4....4....4.......4..
..5.....5.....5.....5.....5.....50...2......4...3.............5....3.....4...3......5.....
.......5.....5.....5.....5....4.00......3.....2.....4.............4....4....3...3........5
....5......4.....4......5...3..10.1.........4...2.......4.............4....4...3...3......
........4.......5....4.....3..20.1.1...........3...3........4.............4..2....3....4..
..5..........5.....3.....4...200..1..2............3...3.........4...........2...3.....4...
.5.....5.........4....3.....300.1...2...3............3....4..........5.........3....4.....
......5.....5........4....4.00.1..2....3....4............4....4...........5........4.....5
....5......5.....5......3..100...2..2.....3......5...........4....4............5........5.
..4.....4.......5....4....2000.....2..2......3........5.........3.....4.............5.....
......4......5......4...3.000.1......2...3......3..........5........4......5.............5
...4.......5......5...2..100.1.1.......2.....4......4...........5.......4......4..........
........5.......5....3..200.1.1.1.........3......4.......5...........5......4......4......
.............5.....3...200.10.0...2...........4.......5.......5..........4......4......4..
.4...............4...2.00.100.0.....2..............5.......5......4...........5......5....
5....4..............30.00.000..1.......3...............4........5......5..........4.......
....4....4..........0.10.100.1..1.........3................4........4.......5.........4...
.5......4....4......0.0.100.1.1..1............4................4........4........5........
......5.....4.....5.0.0.00.1.1..2..2..............4................4.........5........5...
.5.........5....4..1.10.0.1.1..2.1...2.................5...............4..........5.......
.....4.........4..20.0.10..1..2.1.1.....3..................4................5.........4...
.5........5......200..100...1.0..1..2.......4...................5...............4.........
......5........5.000..000...0.0...1...2.........4...................4...............4.....
..........4.....1000..000...0.0.....2....3..........4...................4...............4.
...5...........50000..000....10........3....3...........4....................5............
........5......00000..00.1...00............4....4............5....................5.......
............4..00000..0.1..2.0.1..............3......5............5...................4...
.5...........1.0000.1.0...2.1.1..2................4......4............4...................
......5.......1000.10..1...1.1.1...2...................5......5...........4...............
...........5..000.100...1..0.0...2....3.....................5......5...........5..........
............1.000.00.1....2.1.1....2......4.....................4.......5..........4......
.............100.100...2...10...2.....3........5....................4.......4..........4..
..5..........000.00.1.....30.1....2.......4.........5....................5.......5........
.......5.....00.100..1....00...2.....3.........5.........5...................4.......4....
............500.000....2..0.1.....3.....3...........5.........5...................5......4
....5.......00.100.1....1..1..2......3.....3............4.........4....................5..
.4......4...0.100.1..2....2.1....3.......4....3..............5........4...................
......5....30.000...2..2..0...2......4......3.....4..............4.........5..............
.........3.0.100.1...1..1.0......3........5.....4.....4...............5.........5.........
..........1.1000..1....2.1.1.........4.........5.....5....4...............4.........4.....
..........0.000.1..1...0.0...2............5.........5....4.....5..............4..........5
....5......100.1.1..1..0..1....2...............5........4....4......5..............5......
.........5.00.10..1..1..1...2.....3................4........4....4.......5..............5.
...5......10.100....2..2..2...2......3..................5......3......5.......5...........
........5.0.1000......2..2..2....3.......4..................4......4.......5.......5......
.........1.10000........2.1....3.....4........5.................4......4........5.......5.
...5.....0.00000.........1..2......4......5........5.................5......5.......4.....
........50.00000...........2..2.........5......5........5.................5.....4.......4.
..4.....0.100000............1....3..........4.......5........5.................5.....5....
5......5.100000.1............1.......4...........5......4.........5.................5.....
.....5.0.000000..1.............2..........5...........5......5........4.................4.
..4..0..1000000....2..............3............5...........5......5.......4...............
...1..1.0000000......2................4............4............5......5.......5..........
.....2.10000000........2...................5...........4.............5......5......4......
.....0.0000000.1..........3.....................5...........5............4.......5.....4..
..5...10000000...2............4......................5...........5............5.......5...
.5...30000000.1....2...............5......................5..........4.............5......
...2.0000000.1..2....2.................4......................4...........5............4..
..5.10000000...2...3....3...................5......................5...........5..........
...100000000.....2.....4...3....................4.......................5..........4......
...00000000.1.......3.....3....4.....................5.......................5.........4..
..50000000.1.1.........3......4....4......................5.......................5.......
..00000000..1.1...........3......3.....4......................4........................5..
.400000000...1..2.............4......4......5......................5......................
.00000000.1....2...3...............5......5......5......................5.................
.00000000..1.....2....3.................5......5.....4......................4.............
.0000000.1..1......2.....3..................4.......5.....5......................5........
.000000.1.1..1........3......4...................5.......5....4.......................5...
.00000.10...2..2.........3.......4....................5......4.....5.....................3
.0000.10.1...1....3..........4........5....................5......5....4.................0
.0000.00...2..1.......4..........4.........5....................5....3.....4.............0
.000.10.1...1...2.........4...........5........4...................3....3.......5........0
.00.10.1..2...2....3...........5...........5.......4...................4....4........5...0
.00.0.1.1....3..2.....3.............5...........5.......5.................3......5.....2.0
10.1.10..1....1....3......4.............4............5......4.................4......4..1.
00..100....2...1......3.......4.............4............4.......5.................5...20.
0.1.00.1......3.1.........4.......4.............4............4........5...............300.
.1.10.1.1......1..2............5.......5.............5............5........5..........00.1
1.10.1.1..2......2..2...............5......4.............4.............5........5.....0.1.
0.0.10...2..2.....1...2.................4.......5............4.............4........4..1.1
.1.100....1...2....1.....3..................4.......4............4.............4.....1..10
1.1000......2...2...1........4...................5.......5............5............4..1.0.
.10000.........3..2..1...........4...................4.......4............4..........2.10.
.0000.1..........2..2..2..............5..................4........5...........4.......10.1
1000.1..2..........2..2...3...............4..................4........4...........4...0.1.
000.1.1....3.........2...3...3.................5.................4.........5........2..1.1
000.0...2......4........3..2....3..................4..................5.........5.....2.10
000.0......3........5....1...2......4...................5..................5........4..100
000.0..........4........4.1.....3.......4....................5..................5....1.000
00.10...............5....1.1........4.......4....................4.................3..1000
00.0.1..................4.1..2...........5.......5...................4..............1.0000
0.10..1..................1..2..2..............5.......5...................5.........0.0000
.10.1..1...................2..2...3................5......4...................4......10000
100...2.1....................2...3....4.................5......5...................5.0000.
Aufgabe 4#
Verändere den Code so, dass du per Funktionsinput kontrollieren kannst, ob die grafische Darstellung der Simulation in der Konsole angezeigt wird oder nicht. Der Rest der Simulation sollte dennoch weiter funktionsfähig bleiben und bei Funktionsaufruf durchgeführt werden. Allein auf die grafische Darstellung sollte optional verzichtet werden können.
Möchte man die kontrollieren können, ob die grafische Darstellung erzeugt und ausgegeben wird oder nicht, kann man den Code, welcher die grafische Darstellung erzeugt, in ein If-Statement einbinden und nur unter der Bedingung ausführen lassen, dass ein eingebener Funktionsinput True
ist.
Unten füge ich das Funktionsargument display
hinzu. Ich setze zudem den Standardwert auf True
. Den Codeblock, welcher die grafische Darstellung erzeugt, versehe ich mit einem If-Statement, welches den Codeblock nur ausführt, wenn display
gleich True
ist. Weil der Standardwert von display
True
ist, wird die grafische Darstellung standardmäßig erzeugt und angezeigt. Setzt man display
jedoch auf False
, dann wird nichts angezeigt.
Das Nicht-Anzeigen der Simulation kann später sinnvoll werden, wenn wir viele Modelle berechnen und wir die grafische Darstellung gar nicht sehen wollen, sondern stattdessen eine Maßzahl pro Simulationsdurchgang berechnen wollen.
import random
def nasch_model(
ticks=100,
max_speed=5,
dawdling_prob=0.1,
n_agents=15,
initial_distance=6,
display=True,
):
street_len = n_agents * initial_distance
# Leere Liste, die gleich mit Agenten befüllt wird
population = []
# für jeden zu erstellenden Agenten
for i in range(n_agents):
# Agent als Dictionary erstellen
agent = {
"id": i,
"position": i * initial_distance,
"speed": max_speed,
"space_ahead": initial_distance - 1,
}
# Agent an die Populationsliste hängen
population.append(agent)
# Population nochmal überarbeiten - jeweils vorausfahrende und nachfahrende Agenten einspeichern
# für jeden Agenten in Population
for agent in population:
# den vorausfahrenden Agenten merken/als Eigenschaft einspeichern
agent.update({"agent_ahead": population[(agent["id"]+1)%len(population)]})
# den nachfahrenden Agenten merken/als Eigenschaft einspeichern
agent.update({"agent_behind": population[(agent["id"]-1)%len(population)]})
# für jeden Zeitschritt
for tick in range(ticks):
# Wenn die Simulation dargestellt werden soll
if display:
# "leere" Straße als Liste von Punkten erstellen
street_as_list = []
for i in range(street_len):
street_as_list.append(".")
# für jeden Agenten
for agent in population:
# Agenten auf entsprechender Position auf Straße einfügen
# Agent wird in diesem Fall als dessen Geschwindigkeit repräsentiert
street_as_list[agent["position"]] = str(agent["speed"])
# Repräsentation der Straße in einen String umwandeln
street_as_string = "".join(street_as_list)
# grafische Darstellung in Konsole anzeigen
print(street_as_string)
# für jeden Agenten (die vier Handlungsschritte umsetzen)
for agent in population:
# 1. Acceleration
if agent["speed"] < max_speed:
agent["speed"] += 1
# 2. Slowing down
if agent["speed"] > agent["space_ahead"]:
agent["speed"] = agent["space_ahead"]
# 3. Randomization
if agent["speed"] > 0 and random.random() <= dawdling_prob:
agent["speed"] -= 1
# 4. Car motion
agent["position"] = (agent["position"] + agent["speed"]) % street_len
# für jeden Agenten (die Anzahl der freien Straßenabschnitte neu berechnen)
for agent in population:
# neue Anzahl der freien Zellen vor Agent berechnen und einspeichern
agent["space_ahead"] -= agent["speed"]
# neue Anzahl der freien Zellen vor dem NACHFAHRENDEM Agent berechnen und DIESEM einspeichern
agent["agent_behind"]["space_ahead"] += agent["speed"]
nasch_model()
5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....5.....
.....5.....5....4......5.....5.....5.....5....4......5.....5.....5....4......5.....5.....5
...4......5....4.....5......5.....5.....5...3......5.....4......5....4....4.......5.....5.
..4.....5.....4.....5.....5......5.....5...3....4.......5.....5.....4....4.....5.......5..
.4.....5.....5.....5.....5....4.......5...3....4.....5.......5.....5....4.....5.....5.....
......5.....5.....5.....5....4.....5.....3....4.....5.....5.......5....4.....5....4......5
....5......5.....5.....5....4.....5....4.....4.....5.....5.....5......4.....5....4.....5..
..5.....4.......5.....5....4.....5....4.....5.....5.....5.....5.....5......5....4....4....
5......5.....5.......5....4.....5....4.....5.....5....4.....4......5.....5.....4....4.....
....4.......5....4......3......5....4.....5.....5....4.....5.....5......5.....5....4.....5
...4.....5......4.....5.....4......4....4......5....4.....5.....5.....5......5....4....4..
..5.....5.....5......5....4......5.....4.....5.....4.....5.....5.....5.....5.....4....4...
.5.....5.....5.....5.....4.....5......5.....5.....5.....5.....5.....5.....5.....5....4....
5.....5.....5.....5.....5.....5.....5......5.....5.....5.....5.....5.....5.....5....4.....
.....5.....5.....5.....5.....5.....5.....5......5.....5.....5.....5.....5.....5....4.....5
....5.....5.....5.....5.....5.....5.....5.....5......5.....5....4......5.....5....4.....5.
...5.....5....4......5.....5.....5.....5.....5....4......4.....4.....5......5....4.....5..
..5.....5....4.....5......5.....5.....5.....5...3.....4.......5.....5.....5.....4.....5...
.5.....5...3......5.....5......5.....5.....5...3....4.....4........5.....5.....5.....5....
5.....5...3....4.......5.....5.....4......5...3....4.....5.....5........5.....5.....5.....
.....5...3....4.....5.......5....4......5....3....4.....5.....5....4.........5.....5.....5
....5...3....4.....5.....5......4.....5.....4....4.....5....4.....4.....5.........5.....5.
..4....3....4.....5.....5.....5......5.....5....4.....5...3......5.....5.....5.........5..
.4....4....4.....5.....5.....5.....5......5....4.....5...3....4......4.....4......5.......
.....4...3......5.....5.....5.....5.....5.....4.....5...3...3......5......5.....5......5..
..5....2.....4.......5.....5.....5.....5.....5.....5...3...3....4.......5......5.....5....
5.....4..2........5.......5.....5.....5.....5.....5...3...3....4.....5.......5.....4......
.....5..2...3..........5.......5....4......5.....5...3...3....4.....5.....5.......5.....5.
...5...2...3....4...........5.....3......5......5...3...3....4....4......5.....5......4...
.5....3...3....4.....5..........4.....4.......5....3...3....4....4.....5......5.....5.....
.....4...3....4.....5.....5..........5.....5.....3....3....4....4.....5....4.......5.....5
....5...3....4.....5.....5.....5..........5.....5....4....4....4.....5....4.....5.......5.
...5...3....4.....5....4.....4......5..........5....4....4....4.....5....4.....5.....5....
5.....3....4.....5....4.....5....4.......5........3.....4....4.....5....4.....5.....5.....
....4.....4.....5...3......5....4.....5.......5.......4.....4.....5....4.....5.....5.....5
...4.....5.....5...3....4......4....4......5.......5.......5.....5....4.....5.....5.....5.
..4.....5.....5...3....4.....5.....4.....5......5.......5.......5....4.....5.....5.....5..
.4.....5.....5...3....4....4......5.....5.....5......5......4.......4.....5.....5....4....
5.....5.....5...3....4...3......5......5.....5.....5......5......5.......5.....5....4.....
.....5.....5...3....4..2.....4.......5......5.....5.....5.....4.......5.......5....4.....5
....5.....5...3....4..2...3.......5.......5......5.....5.....5.....5.......5......4.....5.
...5.....5...3...3..1....3....4........5.......5.....4......5.....5.....5......4.......5..
.4......5...3...3.1...2......4.....5.......4........5....4.......5.....5.....5.....4......
......5....3...3.1..2....3........5.....5.......5.......4.....5.......5.....5.....5.....5.
...5......4...30...2...3.....4.........5....4........5.......5.....5.......5.....5.....5..
..5.....5....30.1.....3....4......5........4.....5........5.......5.....5......4......5...
.5.....5....40.1.1........4.....5......5........5.....5........5.......5.....5......5.....
......5....40.1.1..2...........5.....5......5........5.....5........5.......5.....5.....4.
...5......400..1..2...3.............5.....5......5........5.....5........5.......5.....5..
..5.....5.00.1...2...3....4..............5.....5......5.......4......5........5.......5...
.5.....5.10.1..2....3....4.....5..............5.....5......5.......5......5.......4.......
......5.10.1..2...3.....4.....5....4...............5.....5......5.......5.....4........5..
..5....10.1..2...3....4......5....4.....5...............5.....5......5.......5.....5......
......40.1..2...3....4.....5.....4.....5.....5...............5.....5......5.......5.....5.
...5..0.1..2...3....4.....5.....5.....5.....5.....5...............5.....5......5.......5..
..5..20...2...3....4.....5.....5....4.....4......5....4................5.....5......5.....
....20.1.....3....4.....5.....5....4.....5.....5.....4.....5................5.....5......5
...40.1..2.......4.....5.....5....4.....5.....5.....5.....5.....5................5....4...
.5.0.1..2...3.........5.....5....4.....5.....5.....5.....5.....5.....5..............3.....
..1.1..2...3....4..........5....4.....5.....5....4......5.....5.....5.....5............3..
.4.1..2..2....3......5.........4.....5.....5....4.....5......5.....5.....5.....5..........
..1.1...2...3.....4......4.........4......5....4.....5.....5......5....4.....4......5.....
...1..2....3....4......5......5.........5.....4.....5.....5.....5.....4.....5....4.......5
..3..2...3.....4.....5......5......5.........5.....5.....5.....5.....5.....5....4.....5...
.5..2...3...3.......5.....5......5......5.........5.....5.....5.....5.....5....4.....5....
5..2...3...3....4........5.....5.....4.......5.........5.....5.....5.....5....4.....5.....
..2...3...3....4.....5........5....4......5.......5.........5.....5.....5....4.....5.....5
.2...3...3....4.....5.....5......3......5......5.......5.........5.....5....4.....5.....5.
2...3...3....4.....5.....5.....5.....4.......5......5.......5.........5....4.....5.....5..
...3...3....4....4......5.....5.....5....4........5......5.......5........4.....5.....5..2
.2....3....4....4.....5......5.....5....4.....5........5......5.......5........5.....5..2.
2...3.....4...3......5.....5......5....4.....5.....5........5......5.......5.......4...2..
...3....4....3....4.......5.....5.....4.....5.....5.....5........5......5.......5.....3..2
..3....4...3.....4.....5.......5.....5.....5.....5.....5.....5........5......5.......5..2.
.3....4..2.....4......5....4........5.....5.....5.....5.....5.....5........5......5...1...
.....4..2...3.......5.....4.....5........5....4......5.....5.....5.....5........5....3..2.
.3.....2...3....4........5.....5.....5.......4.....5......5.....5.....5....4........4..2..
3....4....3....4.....5........5.....5.....5.......5.....5......5.....5....4.....5.....2...
....4....4....4.....5.....5........5....4......5.......5.....5......5....4.....5....4....3
...4...3.....4.....5.....5....4........4.....5......5......4......5.....4.....5....4....4.
..4...3....4......5.....5....4.....5........5.....5......5.....4.......5.....5....4....4..
.4...3....4.....5......5....4.....5.....5........5.....5......5.....5.......5...3.....4...
4...3....4.....5.....5....3......5.....5....4.........5.....5.....4......5.....3....4.....
..2.....4.....5.....5....4....4.......5...3......5.........5.....5.....5......5....4.....5
1....3.......5.....5....4....4.....5.....3....4.......5........4......5.....5.....4.....5.
..2......4........5....4....4.....5.....5....4.....5.......5.......4.......5.....5....4..1
.2...3........5.......4....4.....5.....5....4.....5....4........5.......5.......5....4..2.
2...3....4.........5......4.....5....4.....4.....5....4.....5........5.......5.....3...2..
...3....4.....5.........5......5....4.....5.....5....4.....5....4.........5......4....3..2
..3....4.....5.....5.........5.....4.....5.....5....4.....5....4.....5.........5.....4..2.
2....3......5.....5.....5.........5.....5.....5....4.....5....4.....5....4..........5..2..
..2......4.......5.....5.....5.........5.....5...3......5....4....4.....4.....5.......2..2
.2...3........5.......5.....5.....5.........5..2.....4......4....4.....5.....5.....5....2.
2...3....4.........5.......5....4......5......2..2........5.....4.....5.....5.....5....4..
..2.....4.....5.........5......4.....5......5...2...3..........5.....5.....5.....5....4..2
.2...3.......5....4..........5......5.....5....3...3....4...........5....4.....4.....4..2.
2..2.....4.......4.....5..........5......5....4..2.....4.....5..........4.....5....4...2..
.1....3.......5.......5.....5..........5....3..1....3.......5....4...........5....4...3..2
1..2......4........5.......5.....5.........4..2..2......4.......4.....5..........4...3..2.
..2...3........5........5.......5.....5......2..2...3........5.......5.....5........3..2.1
nasch_model(display=False)
Wie man sieht, sieht man nichts, da die grafische Darstellung deaktiviert wurde.