The classic artificial society — now playable on Softmax.
After Growing Artificial Societies (Epstein & Axtell, 1996), by way of the Digital Terraria Lab engine.
Gnomish citizens; their hats grow with their wealth!
In Sugarscape, gnomish citizens roam a grid of sugar — and sometimes spice — harvesting, eating, and sometimes even trading, mating, or fighting, based solely on simple rules. Through the individual actions of these citizens emerge population-level phenomena and distributions: a window into how simple rulesets and random initial conditions lead to emergent social outcomes.
Softmax is excited to host this classic ALife environment in a whole new way: as a multiplayer online arena in which anyone from first-time ALifers to Sugarscape devotees can try their hand at designing agent update rules and seeing what happens. In this prototype version, we ask player-scientists two questions: can you produce a robustly capable ruleset generator, and can you hand-design a well-balanced ruleset for the benefit and well-being of your Sugarscape gnomes?
We offer two ways to play: submit a ruleset generator which aims to hit any given target distribution, or submit a single ruleset which aims at the general welfare. In the first, your generator receives the game configuration — is spice enabled? what about combat? what do starting endowment ranges look like? — and a target distribution it has to hit — an egalitarian Gini, perhaps, or convergence of tribes — and it has to tailor a ruleset for that game and that target. In the latter, you craft and submit a ruleset yourself, aimed at a fixed configuration — everything enabled with standard values per DTL — and your goal is to produce the highest overall happiness in your society.
You’re handed a target distribution — of wealth, lifespan, trade price, population, or tribal balance — and your score is how closely the society you grow matches it. Every episode draws one of 80 curated worlds — twelve base societies crossed with mechanic packs like disease, seasons, and combat — so a competitive ruleset generator has to read the world it’s given and adapt. You can’t memorize a map, and if your citizens die out, you score zero.
Six are grown by the reference engine itself under the book’s classic configurations — so the shape is honestly reachable, not hand-drawn. One is real human data.
The handcrafted league. No drawn worlds and no assigned targets: every episode presents the same canonical world, and your submission is one fixed constitution — the exact same ruleset, every time. The ruleset is a constitution; the score is the common good.
That score is the summed wellness of every citizen still alive at the final tick — health, peace, friendship, family, and wealth, averaged over each citizen’s final days and added up across the whole surviving population. It has no ceiling: a thriving crowd beats a blissful few, growth and welfare pull on the same rope, and extinction scores zero. Write one law your gnomes can live well under, forever.
Join Commonwealth →Rulesets are written in SugarLang — a tiny declarative language with strict budgets (256 expression nodes, depth 16, 32 KB). This is a complete competitive submission:
Read: stay peaceful, trade freely — prefer welfare, discount distance, avoid pollution. Unless a citizen is about to starve, in which case it takes the richest cell in sight. For every candidate cell, the first matching rule supplies the score; the citizen takes the highest-scoring cell.
The fastest path is a coding agent: point it at the participation guide and it will set up the optimizer starter kit, interview you about how you want to play, teach you SugarLang, and take you from a fresh clone to a first scored ruleset — including co-editing laws with you in a visual studio.
Prefer to drive yourself? A player is a small Docker image: it connects, reads its observation, submits one ruleset, and exits. The bundled target-aware baseline is a working starting point — beating it is the game.
# set up a project
mkdir sugarscape-player && cd sugarscape-player
uv init --bare && uv add "coworld[auth]"
# download the coworld (manifest, docs, protocols, baseline player)
uv run coworld download cow_049e7dc0-f4b5-49f8-81df-59ea73493b6a
# optional: run a local episode against the baseline
uv run coworld run-episode \
./coworld/cow_049e7dc0-f4b5-49f8-81df-59ea73493b6a/coworld_manifest.json \
--timeout-seconds 120
# build your player image, then upload and enter a league
uv run softmax login
uv run coworld upload-policy my-player:latest --name my-player
uv run coworld submit my-player \
--league league_620a74a7-eb1f-4386-b386-0e7246be4eb6 # Solo
# Duos: --league league_d5b48dfe-5e08-499f-80f1-63f14720c50c
# Commonwealth: --league league_dac00450-027a-45e6-9f6b-c9bda7ddd61dSugarscape engine: DTL Sugarscape (Unlicense) · after Epstein & Axtell, 1996