Redoland
How would history be different if Franz Ferdinand’s motorcade had not made a wrong turn in Sarajevo in 1914? If Mozart had not managed to recover from the scarlet fever he had during childhood, how would music have evolved? What if Vasily Arkhipov had agreed to launch the nuclear torpedoes during the Cuban Missile Crisis? We tend to underappreciate the effects of small random events in world history. The biggest (and only, actually) reason for us not being able to test this is because you cannot roll back time, tweak some stuff, and then unpause time to compare the two timelines.
Real life has too many variables for us to simulate it perfectly, but a controlled environment with AIs might take us a long way. This is not a new idea, but I felt like the flavor of simulation that I had in mind wasn’t made before, so I made a small proof-of-concept called Redoland. It is not fully-fledged, but I hope that people will find it useful and make more advanced simulation frameworks from it. Redoland was built on top of DeepMind’s Concordia, “a library for generative social simulation.”
Because the goal was to be faithful to real human societies, the framework had to accommodate simulations that ran for multiple “years,” which led to the realization that the agents in the simulation must have an equivalent of the human lifecycle, including birth, reproduction, and death.
So, here is the gist of the first version of Redoland: a bunch of AI agents are given a summary of how the (simulated) world works, and told to 1) survive long enough to have children, 2) have children, 3) make sure their children also have children (one can argue that #3 already covers #1 and #2). They handle the rest. The simulation framework doesn’t enforce or even suggest a social system, survival strategy, or tradition. The framework gives the user the ability to start an alternate universe at any point the user wants, thus helping to answer the questions I raised in the first paragraph.
Since inference costs are getting cheaper and cheaper, we can expect that at some point, we will be able to run simulations with thousands of agents (or millions, billions, etc.) and thus simulate entire societies. We can give every agent a job, let them roam around in a 3D world, and run everything in continuous time. Imagine how fun it would be to track the culture they create. What kind of political systems would they establish? We might be able to get closer to answering the nature vs nurture problem. So many possibilities here.
Some rules that I set for the current framework:
- Traits: every agent has a score from 0 to 100 for physical strength and the Big Five personality traits (openness, conscientiousness, extraversion, agreeableness, neuroticism). All of these, plus intelligence and memory, pass from parents to offspring (my understanding is that the five traits exhibit significant heritability). Intelligence is simulated by the duration of thinking allowed, and memory is simulated using the context window length. When you use the same LLM for each agent, this becomes a controlled experiment.
- Heritability of traits: when two agents have a child, the characteristics of the child are calculated by taking the midpoint between the parents’ values, then adding a random noise drawn from a Gaussian distribution.
- Inherited knowledge: each child begins life at age 21, with a note from their parents describing the state of the world they’re entering, including, for example, social dynamics within the world. This is supposed to represent the knowledge an individual gains during childhood.
- Food: at the beginning of every year, a certain amount of food appears at the center of the village (currently, a fixed minimum amount, and as the village grows, the food source also grows proportionally). Agents must compete for limited food sources to survive and reproduce.
- Communication between agents: agents are able to talk to any subset of the agents in the village. When an agent speaks to a group of agents, every agent in that group sees who else is in the conversation.
- Warfare: combat outcomes follow Lanchester’s laws.
- Mortality: agents age, starve, and die. The probability of an agent dying at the end of a given year is determined using the Actuarial Life Table of the Social Security Administration of the US. If an agent does not eat food for some time, they die of starvation.
Simulation infrastructure/logistics:
- Simulation flow: time is not continuous. The simulation engine works in discrete steps. At each step, only one agent is allowed to act.
- Simulation state: every action is saved as a separate git commit. If you want to create an alternate timeline, you just fork the branch.
- Web UI: for humans to track the events happening in a simulation. Basic start/pause ability for each worldline. The primary method for making changes in the timeline is using the CLI commands, which are documented in the code repository.
Next steps:
- Currently, the Big Five personality traits are just numbers and some descriptions in the system prompts of the agents. What if we used an open source model and steered the activations of each model in the simulation based on their scores in each of the Big Five traits (check these two posts by Anthropic)? This way, the simulation of different personalities would be more realistic because the agents would not even be aware of what their personality is.
- Making time continuous in the simulation would make it more realistic. We can use Gas City as the foundation for this continuous time framework. The idea of a “role” for an agent can be repurposed for Redoland.