Introduction to TAU
A number of universities with the requisite resources and personnel are building bespoke simulations to help guide policy-level decisions about operating under COVID-19 conditions. Such simulations have access to confidential data but the research can’t be published or shared. On the other end of the spectrum are one-size-fits-all sources of advice, which can’t take account of the hard facts that universities operate in different contexts with different measures of what counts as success. Many universities can’t shut down football for short-term revenue and long-term fund-raising reasons, and centralized contact tracing would be a perilous venture in a university with privacy-conscious students, faculty, and staff.
The Artificial University (TAU) facilitates the evaluation of intervention plans using multiple metrics, generates insights to inform policy decisions, and produces visualizations that help to communicate policy reasoning. TAU is a uniquely useful epidemiological model because:
- it takes account of human factors such as social networks, individual vulnerabilities, and multiple types of compliance;
- it is highly configurable to individual universities and accommodates politically feasible interventions and varied health and equity metrics;
- it is calibrated using only public data, while allowing individual universities to employ confidential information if they so choose;
- it can be made responsive to regularly updated data about the local region and to university health data;
- it supports cost-benefit analyses of a host of infection and anti-body testing strategies;
- it is open-source, placing freely available code in the hands of university administrators for their own use; and
- it generates valuable insights, including tipping points and cost-benefit analyses that can aid university planners as they seek to optimize health outcomes and maintain the confidence of staff, faculty, students, and parents without breaking the university bank.
TAU is both theoretically important, as a serious advance in the fields of social simulation and health policy, and practically important, particularly for universities lacking the resources to create their own bespoke policy simulations to assist in evaluating operating plans.
Open Source Release Notes
TAU is open-source, placing freely available code in the hands of university administrators for their own use, and benefitting from open-source development efforts.
Build status
TAU builds and runs in version 1.1, the subject of the open-source release on July 15, 2020.
Code style
This version of TAU was not developed with strict guidelines but is generally intended to make the code as readable as possible.
The in-line documentation style uses informative method names and local variable names, and in-line comments for method parameter names (i.e. methodCall(/*parameterName=*/ parameter)). The aim is to make the code as clear as possible without comments, only requiring comments when the code purpose cannot be made clear with clear code and naming alone.
Indentation is used as much as needed to make the code as readable as possible.
Braces are used after if statements even when not necessary for code compilation or function.
Agent and class names use PascalCase. Method and variable names generally use camelCase. However, casing was inconsistent in model development, and some older methods and variable names use PascalCase, snake_case, or other case methods. Generally, we stick to the usual Java convention of PascalCase for class names and camelCase for non-constant method and variable names, with some exceptions being made for parameters that may be visible to non-coder users of the model.
Framework used
AnyLogic version 8.5.2 (https://www.anylogic.com/) is the platform used for the model and simulation development, so some AnyLogic frameworks are used. For the agent-level SIRS model, statecharts are used to represent the person’s status regarding infection, isolation, and testing. Inheritance is used for Student, Faculty, and Staff agent types to inherit the behavior of the Person agent base class.
AnyLogic’s message-passing framework is used for people agents to infect each other, administer tests, and contact trace.
AnyLogic events are used for a daily infection and testing job.
Java I/O from the java.io.* package is used for file reading and writing.
Features
Details about the model implementation and parameters are in the ODD-D documentation, released with TAU.
Code Example
Below is a coding example of the code which assigns on-campus housing buildings to dining halls. Note that this version of the model (TAU v 1.1) assumes that buildings are assigned to dining halls, and that all students who live in a building will only go to its assigned dining hall.
We first calculate an approximate number of people who will be assigned (indirectly, through their building) to a dining hall – aiming to make the number of students assigned to a dining hall approximately even. Then, we randomly assign buildings to a dining hall until the approximate number of people is reached, then move on to the next dining hall. Note that the random initialization uses the Random object initializationRandom, which is set for all initializations in order to keep a consistent network across simulation runs.
This code is found in the method Main#makeDiningHalls.
int buildingIndex = 0;
int approxNumPeoplePerDiningHall = (int)
(studentPopulation.stream().filter(p ->
p.livesOnCampus).count() / ((double) numDiningHalls)) + 1;
int diningHallNum = 0;
Collections.shuffle(housingBuildings, initializationRandom);
while (buildingIndex < housingBuildings.size()) {
DiningHall hall = new DiningHall(diningHallInfectivity);
hall.setName(“Dining Hall ” + (diningHallNum++));
allConnections.add(hall);
int numPeopleAssignedToCurrentDiningHall = 0;
while (numPeopleAssignedToCurrentDiningHall <
approxNumPeoplePerDiningHall &&
buildingIndex < housingBuildings.size()) {
hall.addBuilding(housingBuildings.get(buildingIndex));
numPeopleAssignedToCurrentDiningHall +=
housingBuildings.get(buildingIndex).getPeople().size();
buildingIndex++;
}
}
Installation
AnyLogic must be installed to run the model. Most functionality of the model can be run in the free Personal Learning edition of AnyLogic version 8.5.2, which can be downloaded at https://www.anylogic.com/downloads/ and can be installed on Windows, MacOS, and Linux.
API Reference
AnyLogic documentation can be found at https://help.anylogic.com/index.jsp.
Tests
This version of the model includes an AnyLogic Experiment called SimulationSchool, which allows you to adjust the parameters of the model and perform a single run and view the infection curve over time. We have performed face validation of the core of the model (without the TAU network), and have rechecked that face validation on extreme scenarios in SimulationSchool.
How to use?
To run a single simulation and view the infection curve, the AnyLogic experiment SimulationSchool allows the user to adjust many parameters and perform a single run of the simulation. This can be done by opening the model in AnyLogic and navigating to TheArtificialUniversity > SimulationSchool. After clicking SimulationSchool, a properties pane will open, and model parameters may be adjusted. While many parameters are adjustable in the SimulationSchool parameters, some of the highly customizable university network parameters are hard-coded into the model. These parameters can be found in the initializeSchool method of the Main agent. We include two sets of parameters for the university network – the large research university and the small college. This setting is toggled by the top-level parameter IRU, IsResearchUniversity.
To run a parameter sweep, we can use the experiment SchoolExperiment. Directly cloning from the git repo, one should be able to immediately run SchoolExperiment on the parameter sweep included. The SchoolExperiment experiment includes the Java I/O to read the parameters from the included file, TAU_parameter_student_compliances_samples_count_510.csv, and output results to the files AggregateResults.csv and AggregateResultsDaily.csv. Note that simulation runs of the large university cannot be run on the personal learning edition of AnyLogic, as it uses too many agents. Also note that it may be necessary to increase the maximum available memory in order to run the simulation; this can be done in the properties pane of the SchoolExperiment experiment.
MVP Version
TAU version 1.1 (released as open-source code on July 15, 2020) is being developed into Minimum Viable Product version, which should be available at or near the end of July 2020. This freely available product includes a user-friendly interface that addresses a dataset produced by TAU, enabling users to navigate and visualize findings without needing to employ the AnyLogic platform or even run the model.
Contribute
This is an Open Source collaboration project. Any improvements of the current methods as well as adding new methods is encouraged. Any updates should be send with supporting literature and references to tauopensource@gmail.com. The Human Simulation Group, which is releasing TAU version 1.1, is also working on more advanced versions; suggestions and ideas are welcome.
Credits
The Core Version was developed by the Human Simulation Group under lead of the Center for Mind and Culture in Boston with active contributions of the Virginia Modeling Analysis and Simulation Center at Old Dominion University and conceptual recommendation by The MITRE Corporation under the umbrella of the Covid-19 Healthcare Coalition (https://c19hcc.org). The code was reviewed and improved by Simudyne.
License
This code and supplemental material is distributed under the Apache License 2.0 (Apache-2.0). As long as the user gives credit to The Human Simulation Group and the Covid-19 Healthcare Coalition, there are no restrictions on use, reuse, or modification.
Links
Human Simulation Group:
http://humansimulation.org
Care of: Center for Mind and Culture:
http://mindandculture.org
Link to TAU v1.1 open-source repository:
https://github.com/centerformindandculture/TheArtificialUniversity/tree/V1_1