Do you need help?
Simutrans Wiki Manual can help you to play and extend Simutrans. In 9 languages.

new Ciygrowth

Started by Sirius, May 27, 2020, 06:51:24 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.


I'd like to add my considerations on citygrowth, partly discussed in Possible additional calibration mechanism for passenger transport

Succes rates are a good starting point to a new citygrowth system.

Imho, there are three very important factors for citygrowth:
1. Service level.
2. Land value.
3. Locality.

Service quality might be measured fairly well by success rates of surrounding buildings.
This is a very important factor as people will usually prefer to settle in locations that are well connected to the world.

Land value might be measured by the density and class of surrounding buildings. Further aspects like nearby water, stations or the number of vehicles passing by and congestion of nearby ways might also be considered.
It is a very important factor to people as not everyone can afford a house in the city center, whilst others might be able to, but will weighten up the costs to their preferences, thus they might pick a location that is a little worse if it's much less expensive.

Locality is measured as the distance to the origin they wanted to settle to, which is not neccessarily near the town they are "originating" from, although it's more likely to be near the originating town.
This is quite important as people usually have a clear choice in which area they want to settle. A person that wants to settle in Birmingham won't move to London, just because he found a cheap house with very good service level in London, whilst settleing to Smethwick under these circumstances might be prefered. (I know that example is a little bad, as a cheap house in the well-served areas of London is not quite realistic, anyways I guess the point is clear.)

With these,we can do something like the following:
On citygrowth, select a maximum affordable price and randomise a location where the citizen wants to settle.
We could, for example, get such a location by first selecting an origin housing, then randomising a distance, using an exponential distribution, and finally selecting a location at that distance.

Now query the (air-distance) closest city and further cities that are at most an (absolute or relative) threshold further away.
Now pick a fair number of random locations within that selection, that fulfill the following:
- the land value is below the maximum affordable price
- the service is above a minum level, that minumum level might be constant or randomised.
- the location is suitable for the type of building we are attempting to build (res/com/ind)
- the location does not already have the currently available maximum density of all building types

Each of the now selected locations is a location where our imaginary citizen would settle to if there were no alternatives, so the final step is to decide which one he prefers and which building will be built there.

To do so, these locations will be judged according to service, land_price, distance and potentially some further factors as mentioned above.
We simply calculate (a*service + b*another_positive_factor) / (c*land_price + d*distance + e*another_negative_factor),
or alternatively a*service + b*another_positive_factor + c/land_price + d/distance + e/another_negative_factor

The citizen will pick the location with the best judgement, so we need to determine which building fits best.
First, get the average density of surrounding buildings and the density of the building at the selected location. Remember a 0 density for that location, if there is no building yet.
Calculate the maximum of buildings density and average building density of surrounding buildings.
Filter all buildings, so the remaining buildings will have the same type (res/com/ind) as the one we are about to place and a higher overall density than the calculated maximum.
From the remaining buildings, Pick the building that is closest to the calculated class of our imaginary new inhabitant.

Finally, build that building and reduce the "homeless" count of the originating city by the difference in between the new and the old building.


The proposed overhaul of the town growth system has been discussed extensively in the past: may I ask whether you have read this thread?
Download Simutrans-Extended.

Want to help with development? See here for things to do for coding, and here for information on how to make graphics/objects.

Follow Simutrans-Extended on Facebook.