After 35 years of playing SimCity, I still could not say what makes a "Perfect" city. An evaluation screen provides a "Score", and I could reach 900 without ever knowing which of my decisions earned it. Working that out by experiment is the fun of a simulation game, and this one has the advantage that the source is available to check the answers against.
Don Hopkins has been maintaining FOSS ports of SimCity (1989) as Micropolis and MicropolisCore, faithfully reproducing the ruleset of the original. Using the Python shims provided by gym-city I have run many experiments and share these results here, presenting five high-scoring and five high-population cities, designed algorithmically using the strategies shared below.
Citizens Demand Fewer Roads
The median population of a perfectly scoring city is 14,640. Their population level, crime rate, pollution and land value are balanced to sustain a 1% Tax Rate. Their roads and rails are few and non-contiguous. A perfectly scoring city can turn disasters off, or risk them on without any fire department at all, and four of the five presented here have no police station.
| city | score | population | crime | pollution | land value | unemployment | cash / year |
|---|---|---|---|---|---|---|---|
| bigscore1 | 949.5 | 16,560 | 13 | 36 | 126 | -93 | +6 |
| bigscore2 | 940.0 | 18,400 | 22 | 41 | 124 | -99 | +147 |
| bigscore3 | 940.0 | 12,440 | 22 | 35 | 122 | -96 | +93 |
| bigscore4 | 939.0 | 12,400 | 16 | 30 | 128 | -95 | +86 |
| bigscore5 | 937.0 | 14,640 | 20 | 41 | 127 | -98 | +117 |
Travel requirements of residential and industrial zone citizens are simple: A zone reads the twelve surrounding tiles for any road or rail to decide if it should grow. If none is there, the zone declines. Commercial zones require a "delivery": a vehicle starts on the perimeter road and walks up to 30 steps, arriving the moment it stands beside a developed tile. The zone's own tiles count, so any loop of track under 30 steps satisfies it.
Commercial zones are placed in the city center because the engine provides a "downtown bonus", starting at +64 and falling off to a -64 penalty in the far corners of the map.
The PC SimCity manual recommends rails and it is the most obvious strategy that most players discover on their own. Roads carry traffic and emit pollution, which suppresses residential growth. Rails emit no pollution and register no traffic at all.
A city with positive cashflow requires a Tax Rate above 0%, 1% appears to be the optimal value. Roads and rails incur an annual cost, and Police and Fire are very large budget items, and severely impact scoring when under-funded. Having neither departments is the lowest annual cost allowing for the lowest Tax Rate. Raising the Tax Rate lowers the score by an estimated 29 points, through direct and indirect factors.
Citizens Demand More Citizens
In the Super Nintendo edition the game rewards population, and a Megapolis at 500,000 is the largest rewarded size. Casual players report cities of 600k to 700k on the SNES platform, with one player reporting 911,200.
911,200 is probably out of reach for Micropolis, as the Super Nintendo is the only edition to offer gifts, which increase land value when placed, allowing for higher zone density in the areas of negative "downtown bonus".
I have also experimented with optimizing for population, as most players do, and I am able to reach 700k population with an algorithmically designed city.
| city | population | score | tax | crime | pollution | cash / year |
|---|---|---|---|---|---|---|
| bigpop1 | 709,405 | 467.0 | 2% | 140 | 174 | +2,206 |
| bigpop2 | 694,670 | 468.5 | 5% | 175 | 179 | +7,944 |
| bigpop3 | 688,435 | 458.5 | 5% | 218 | 171 | +7,568 |
| bigpop4 | 682,590 | 525.0 | 2% | 116 | 168 | +470 |
| bigpop5 | 670,950 | 461.5 | 3% | 219 | 171 | +4,194 |
For most players, maximizing population is a more engaging creative plan than optimizing for score, but the rest of this article is focused on maximizing for score.
Citizens Demand More Housing
Score is calculated in two stages, the first uses seven penalty terms:
- crime, the citywide crime average
- pollution, the citywide pollution average
- housing, the citywide land value average
- taxes, the tax rate
- traffic, the citywide traffic average
- unemployment
- fire, the tiles burning at that moment
Figure 2. The seven scoring terms. Six are bounded at zero and can only subtract, and traffic can be as high as 576. Unemployment has no lower bound, a negative value raises score.
Six out of seven terms are bounded at zero. However, unemployment is unbounded:
unemployment = (resPop / (8 * jobs) - 1) * 255
When the number of jobs exceeds the residents zoned to fill them, The Unemployment term goes negative and adds to the score, providing a score bonus of about 128 points. It is the biggest lever in the game. Population factors into the score indirectly, and so we can "right-size" the population by design.
The second stage of score calculation is reduction by nine more penalties:
Figure 3. Each penalty applies to what the one above it left, so the same factor is worth less further down the list. The right-hand column is what each costs a city scoring 940.
The first three are penalties for failing to build a special zone. Surpassing 500 residents demands a stadium, 100 commercial an airport and 70 industrial a seaport. Where a stadium is placed does not matter to score: it pollutes nothing and generates no traffic. Airports and Seaports however do reduce overall score by their high-density pollution.
Park Overflow
Many strategy guides recommend parks to reduce or "absorb" pollution, but they do not reduce pollution. However, pollution reduces land value and land value drives crime, so parks do lower crime indirectly by raising the land value around them.
Water, park and tree tiles all increase land value, and the engine counts them in 4x4 blocks. Every such tile credits its block 15 points, and the final Land Value credit is that sum, plus the downtown bonus, minus pollution.
However, this land value credit is kept as a single byte, and smoothTerrain() in scan.cpp blends a block with its neighbors before it divides, so a block with its surroundings may sum past 255 and wrap around, counter-intuitively lowering land value.
Figure 4. Green tiles in a 4x4 block, against the land value credit that block reports. Eight tiles is the most greenery the engine can count, but the ninth tile wraps around, making the land value worth less.
The PC SimCity manual declares that "Parks, like forests and water, raise the land value of surrounding zones". However, too many parks and trees can cause higher cause crime and lowered land value!
Citizens Demand More Industries
Common strategy is to lay industrial zones by map edges, and this is recommended to maximize for population. The SNES SimCity manual writes, "One of the great benefits of building industrial Zones along the edges is that half the pollution is off the map and doesn't affect the city. This is very important when it comes to heavily polluting industries, Airports and Coal Power Stations."
This is partly true. The Micropolis engine spreads pollution outward from each source, divides the map into 4x4 blocks, and then creates an average of only the blocks that contain pollution:
pollutionAverage = ptot / pnum
- ptot is the pollution totaled over the dirty blocks
- pnum is the count of those blocks
Counter-intuitively the tiles with lowest levels of pollution help bring our total pollution value down, and so contrary to the SNES Manual, we keep our model keeps its pollution to itself, away from the edge.
Citizens Demand Humanity
Jay Wright Forrester's Urban Dynamics (1969) is often cited as an influence on Will Wright, Chief Designer of SimCity (1989). Urban Dynamics is essentially a paperback simulation of cities. Its implementation is hardly recognizable compared to SimCity's, but it arrives at the same place: a city improves by taking away housing.
The concurrent reduction of excess housing is absolutely essential. It supplies the land for new job-creating structures. Equally important, the resulting housing shortage creates the population-stabilizing pressure that allows economic revival to proceed without being inundated by rising population.
—Jay Forrester, Counterintuitive Behavior of Social Systems, 1971
My study of HAMURABI.BAS (1973) found the same anti-pattern, where the winning strategy starves 3% of the population each year. In 2026, no one is complaining that housing is too affordable. Was it elementary models like these that put them so far out of reach?