What is FRED?

FRED, a Framework for Reconstructing Epidemiological Dynamics, is a programming language for building agent-based models. The FRED Modeling Language™ represents the programming language definition. The FRED Modeling Platform™ represents the various simulation environments provided by Epistemix for simulating fred programs to see how a population changes over time. The population might change in many ways, including the number of people (through birth and death) or the age structure of the population (how many people there are in each age group). One of the more interesting kinds of population changes concern how many people, and exactly which people, might be in a given state within a condition at a given time. FRED enables the user to explore a wide range of conditions and how they spread within a population over time. Conditions might include diseases, behaviors, attitudes, economic status, or just about any other kind of condition a modeler wants to study.

FRED is a tool for building epidemiological models. The Wikipedia definition of epidemiology is “the study and analysis of the distribution (who, when, and where), patterns and determinants of health and disease conditions in defined populations.” Indeed, FRED has been used to model the spread of both infectious and noninfectious diseases. Epidemiology also traditionally includes health-related conditions such as obesity, drug use, etc., but there is also the casual and non-technical use of the term where epidemiology encompasses the study of any pattern that can spread in a population. For example, one may speak of the epidemic of gun violence, or the epidemic of panic, or the epidemic of social media use. In this usage, the term epidemic refers to any rapidly increasing patterns in a population (see examples in Malcolm Gladwell’s book, The Tipping Point). FRED lets us study the dynamics of epidemics by tracking how such patterns in populations vary over time and space.

Design Goals of FRED

There are many alternatives to building an agent-based model. Any large software system is designed with specific objectives in mind. This section describes the design goals of FRED. These goals have had a significant impact on why FRED works the way it does. Understanding these goals helps a potential user of FRED to assess whether the tool is a good fit to the user’s problem.

Efficiency with Large Populations

FRED is designed to simulate interactions among individuals in a large population. The early applications of FRED were in the field of modeling infectious disease epidemics in specific areas, such as U.S. cities, counties, or states. To do so, we needed a system that could represent millions of individuals and their potential interactions. If a problem concerns a small number of individuals, then FRED might not be the right tool to use.

Realistic Population Models

Because we are motivated to provide decision makers with simulations of epidemics in particular locations, FRED was designed take full advantage of synthetic populations that include both individuals and their mixing groups, including households, neighborhoods, schools, and workplaces. An extensive synthetic population for the United States was developed independently by RTI Inc., and FRED was initially designed to read this database directly. FRED has been generalized to allow it to understand any suitably formatted population database. FRED does not require all the data fields that are available in the RTI database. At a minimum, FRED requires a list of individuals and a reporting of individuals to geo-located households. However, much of the power of FRED lies in its ability to model interactions among individuals that occur in realistic social groupings, so it is best suited for applications where such data is available.

Track Conditions at Population Level

The goal of FRED is to track the spread of conditions within a population. The output includes summary statistics of how many people are in a given state during each day of the simulation. The output can also include reports showing the location of these individuals and videos that help visualize the spread of conditions over time and space.

Although FRED’s primary focus is on patterns within a population, FRED can also provide data on specific individual agents in the simulation. FRED can optionally record a kind of electronic health record (EHR) for each individual that includes every change to that individual’s state over time. FRED offers a limited set of tools for searching this EHR dataset, or the user can use it as input to an external analysis tool. In summary, FRED can produce big data, but FRED itself was not designed to analyze big data.

Limited Active Set of Individuals

FRED works most efficiently if there is a limited set of actively changing individuals. The internal bookkeeping methods in FRED attempt to limit as much computation as possible to the active set of individuals and those individuals who may directly interact with the active set. Other agents are updated on a strictly as-needed basis. For models in which a small subset of a large population is in the active set, FRED can produce dramatic speedups compared to simpler approaches that update each individual agent on each time step. For models in which most individuals may change on each time step, FRED will still work well, but its performance will reflect that additional computation required.


FRED permits modelers to design models that are quite complex. FRED models can track any number of conditions spreading through a population. The characteristics of each condition are defined by the user. The evolution of each agent’s state may depend on a wide range of factors, including the agent’s demographics, their social interactions, and the state of other agents in the model. All of these features are defined by the user of FRED, with no software changes required to the core platform.