Skip to content

jerr-it/SpreadSimulator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SpreadSimulator

Simulation of the spread and containment of infections


Run

Requires https://github.com/veandco/go-sdl2
Plotgeneration requires Python and Matplotlib, however these are not required to run the simulator

go build
./SpreadSimulator [options]

The following options are available;

  1. -cfg [filame] | Choose a configuration by its filename, will use 'standard' if omitted
  2. -v | Log current statistics in console
  3. -export | Saves the statistics into the export directory as a CSV-File, run
  4. -nogui | Disable graphics view.
python plotGenerator.py

to generate a plot for all csv files in the export directory

Example calls

./SpreadSimulator -v
./SpreadSimulator -cfg customConfig -v
./SpreadSimulator -v -export -nogui
./SpreadSimulator -cfg customConfig -export
./SpreadSimulator -cfg customConfig -export -nogui

TODO

  1. Config via JSON
  2. Statistics export using CSV
  3. CLI Options/Flags
  4. R0 and Re
  5. NoGUI option
  6. (Live?) Visual Statistics
  7. More Rendering Backends
  8. ???
  9. Profit

How it works

The simulator creates a given number of entities within a confined space.
Each of them is given a randomized motion vector, which is applied every tick.
A number of them will be infected at the start.
A number of them will be able to move around.
If another entity passes within a given radius, it'll get infected by a certain probability.
When an entity gets infected a timer will start. As soon as this timer runs out, the entity will either survive or die by a certain chance.
The hospital capacity determines how many hospital slots are available to the infected.
Each tick a number of random entities will be tested and detected using a certain probability. This simulates test accuracy.
In the case of an entity getting a positive test result, the entity will be hospitalized, which means he will be immobile and its chance of survival rises to 90%.
If active social distancing is set to true, the entities will actively try to avoid each other. Randomly placed central locations attract entities during opening hours and repell them during closing time.