Del 1: Agenter i Python

Den første agent

Før vi begynder at lave agenter, der kan simulere smittespredning, skal vi først have en model, vi kan have dem i. Begynd med at lave en fil, kaldet epidemic.py, og giv den følgende indhold:

from agents import *

epidemic_model = Model("Epidemi-model", 50, 50)

run(epidemic_model)

Linje 1 gør sådan, at alle funktionaliteterne i biblioteket AgentsPy kan bruges i filen. Det er det bibliotek, der giver adgang til alle de nødvendige funktioner.

Linje 3 laver en model med 50x50 felter (tiles), og navnet Epidemi-model.

Linje 5 starter modellen.

Prøv at køre programmet, og se, hvad der sker. Der burde vises et vindue af en sort firkant. Dette er en tom model.

Tilføj nu, på linje 4, følgende kode:

min_agent = Agent()
epidemic_model.add_agent(min_agent)

Disse to linjer laver en agent ved at bruge Agent(), og tilføjer den så til modellen ved at bruge add_agent(). Starter man modellen igen, burde der vises en enkelt lille trekant inde i modellen - dette er agenten.

../_images/epidemic-1.1.png

Knapper

For at gøre det nemmere at styre vores model undervejs, vil vi gerne tilføje nogle knapper til vinduet, som man kan klikke på for blandt andet at starte og stoppe simulationen.

Lad os først tilføje en setup knap, som genstarter modellen. Indtil videre skal den bare slette alle eksisterende agenter, og lave en ny.

Slet først de sidste to linjer, du tilføjede ovenfor (altså dem, der laver en agent og tilføjer den til modellen). Tilføj så denne funktion, lige efter, at du har importeret agents:

def model_setup(model):
    model.reset()
    model.add_agent(Agent())

Funktionen her sletter alle agenter med model.reset() og tilføjer en ny med model.add_agent(). Det kan virke lidt ligegyldigt nu, men det vil blive brugbart senere.

Tilføj så, efter du har lavet epidemic_model, følgende linje:

epidemic_model.add_button("Setup", model_setup)

Linjen tilføjer en knap til vinduet som, når den klikkes på, kører model_setup-funktionen.

../_images/epidemic-1.2.png

Flere agenter

Lad os tilføje lidt flere agenter. Ændr model_setup funktionen, sådan at den siger følgende:

def model_setup(model):
    model.reset()
    for agent in range(100):
        model.add_agent(Agent())

Nu laver vi 100 agenter og tilføjer dem til modellen.

Lige nu laver agenterne ikke særlig meget. Lad os gøre det muligt for agenterne at gå rundt omkring. Tilføj denne model_step funktion under model_setup funktionen:

def model_step(model):
    for agent in model.agents:
        agent.direction += randint(-10,10)
        agent.forward()

Vi gennemgår funktionen:

  • For hver agent i modellen:
    • Juster dens retning med en tilfældig vinkel mellem -10 og 10.
    • Ryk den et skridt fremad i den retning, den peger.

randint(a,b) er en funktion, det vælger et tilfældigt tal mellem a og b. For at bruge den, skal du lige importere den (gør dette i toppen af filen, sammen med at du importerer agents):

from random import randint

Slut af med at tilføje denne linje efter at du tilføjer setup-knappen:

epidemic_model.add_button("Go", model_step, toggle=True)

Dette laver en knap, som man kan slå til og fra. Når den er slået til, kører den model_step-funktionen konstant, hvilket får agenterne til at bevæge sig rundt.

../_images/epidemic-1.3.png

Samlet kode

Her er den samlede kode du gerne skulle have nu:

from agents import *
from random import randint

# Opret model
epidemic_model = Model("Epidemi-model", 50, 50)

# Reset model
def model_setup(model):
    model.reset()
    for agent in range(100):
        model.add_agent(Agent())

# Tag et skridt i modellen
def model_step(model):
    for agent in model.agents:
        agent.direction += randint(-10,10)
        agent.forward()

# Tilføj knapper til reset og go
epidemic_model.add_button("Setup", model_setup)
epidemic_model.add_button("Go", model_step, toggle=True)

# Kør modellen
run(epidemic_model)