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.