103 lines
2.7 KiB
Python
103 lines
2.7 KiB
Python
import matplotlib.pyplot as plt
|
|
import numpy as np
|
|
import random
|
|
from enum import IntEnum
|
|
|
|
|
|
class Model:
|
|
def __init__(self, width=32, height=32, humandens=0.15, mosquitodens=0.10,
|
|
immumepct=0.1, mosqinfpct=0.1, hm_infpct=0.5, mh_infpct=0.5,
|
|
hinfdiepct=0.01, mhungrypct=0.1, humandiepct=10**-6,
|
|
mosqdiepct=10**-3, mosqnetdens=0.05, time_steps=500):
|
|
self.width = width
|
|
self.height = height
|
|
|
|
self.humandens = humandens
|
|
self.mosquitodens = mosquitodens
|
|
self.immunepct = immunepct
|
|
self.mosqinfpct = mosqinfpct
|
|
self.hm_infpct = hm_infpct
|
|
self.mh_infpct = mh_infpct
|
|
self.hinfdiepct = hinfdiepct
|
|
self.mhungrypct = mhungrypct
|
|
self.humandiepct = humandiepct
|
|
self.mosqdiepct = mosqdiepct
|
|
self.mosqnetdens = mosqnetdens
|
|
|
|
self.time_steps = time_steps
|
|
|
|
self.humans = self.gen_humans()
|
|
self.mosquitos = self.gen_mosquitos()
|
|
|
|
def recycle_human(self):
|
|
# Get all living humans
|
|
humans = np.transpose(np.where(a != Human.DEAD))
|
|
deaths = numpy.random.rand(len(humans)) < self.humandiepct
|
|
grid[humans[deaths]] = Human.DEAD
|
|
|
|
for x, y in humans:
|
|
if numpy.random.rand() < self.humandiepct:
|
|
grid[x, y] =
|
|
|
|
# Pick a random, unpopulated spot
|
|
x, y = random.choice(np.transpose(np.where(a == Human.DEAD)))
|
|
|
|
def gen_humans(self):
|
|
p_dead = 1 - self.humandens
|
|
p_immune = self.humandens * self.immunepct
|
|
p_healthy = p_dead - p_immune
|
|
|
|
return np.random.choice((Human.DEAD, Human.HEALTHY, Human.IMMUNE),
|
|
size=(self.width, self.height),
|
|
p=(p_dead, p_immune, p_healthy))
|
|
|
|
def gen_mosquitos(self):
|
|
mosquitos = []
|
|
|
|
count = self.width * self.height * self.mosquitodens
|
|
for _ in count:
|
|
|
|
|
|
|
|
def run(self):
|
|
for _ in range(self.time_steps):
|
|
self.step()
|
|
self.draw()
|
|
|
|
|
|
def step(self):
|
|
#dingen
|
|
pass
|
|
|
|
def draw(self):
|
|
# this function draws the humans
|
|
plt.imshow(self.humans)
|
|
plt.pause(0.0001)
|
|
plt.clf()
|
|
|
|
|
|
class Mosquito:
|
|
def __init__(self, x: int, y: int, infected: bool, hungry: bool):
|
|
self.x = x
|
|
self.y = y
|
|
|
|
self.infected = infected
|
|
self.hungry = hungry
|
|
|
|
|
|
class Human(IntEnum):
|
|
DEAD = 0
|
|
HEALTHY = 1
|
|
INFECTED = 2
|
|
IMMUNE = 3
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
plt.ion()
|
|
|
|
for i in range(500):
|
|
img = np.random.randint(0, 3, (10000, 10000))
|
|
plt.imshow(img)
|
|
plt.pause(0.0001)
|
|
plt.clf()
|