Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

New town growth rate calculation

5 views
Skip to first unread message

Marcin Grzegorczyk

unread,
May 19, 2003, 8:01:37 AM5/19/03
to
All right, I promised to post an explanation of the new town growth rate
calculation, so here it is. I hope it's comprehensible, and there are
no big errors... I was a bit sleepy when I wrote this ;-)

***

Internally TTD uses an inverse growth rate, i.e. the number of 70-tick
time units (a day in TTD is ~74 ticks long) between attempts to build a
new house. However, my enhanced rate calculation uses a direct growth
rate, i.e. the average number of new town buildings per 38400 time
units, which is approximately 100 years. At the end of calculations
this rate is converted to the inverse growth rate. If the inverse
growth rate is larger than 255, it's reduced and town growth is blocked
randomly to have the same effect on the average.

If towngrowthratemode=0, the rates are:

number of average rate
active stations (new houses per 100 years)
--------------- --------------------------
0 20
1 182
2 256
3 349
4 480

or, if a building fund is active, the rate is 640 new houses per
century. These rates are as they're normally in TTD, except that a bug
with 5 or more stations is fixed.

If towngrowthratemode=1, the above rules are slightly modified; refer to
<http://groups.google.com/groups?ie=us-ascii&selm=b2du9i%241a863c%242%40ID-37968.news.dfncis.de>
for more information. (direct growth rate = 38400 / growth_rate, where
growth_rate is TTD's inverse growth rate.)

***

Now, if towngrowthratemode=2, the advanced calculations are performed.


First, we have the maximum and minimum rate, 'towngrowthratemin' and
'towngrowthratemax'. Let 'ratediff' be the difference between the
maximum and the minimum, i.e.

ratediff = towngrowthratemax - towngrowthratemin


Then the /base rate delta multiplier/ is calculated as follows:

BRDM = (AS*ASW + PO*POW + MO*MOW
+ PI*PIW + MI*MIW + GI*GIW
+ FI*FIW + WI*WIW + SI*SIW + DI*DIW)
/ (ASW + POW + MOW + PIW + MIW + GIW + FIW + WIW + SIW + DIW)

where the two-letter abbreviations represent /growth boost components/
(explained in detail later in this message) depending on, respectively:

AS - the number of active stations
PO - percentage of passengers transported ('passengers out')
MO - percentage of mail transported ('mail out')
PI - incoming passengers ('passengers in')
MI - incoming mail (you get the picture...)
GI - incoming goods
FI - incoming food
WI - incoming water
SI - incoming sweets/candy
DI - incoming fizzy drinks

Each component is a number between 0 and 1, so the result (BRDM) is also
between 0 and 1. The rest are weighting factors, represented by the
following settings in the CFG file:

ASW = tgractstationsweight
POW = tgrpassoutweight
MOW = tgrmailoutweight
PIW = tgrpassinweight
MIW = tgrmailinweight
GIW = tgrgoodsinweight
FIW = tgrfoodinweight
WIW = tgrwaterinweight
SIW = tgrsweetsinweight
DIW = tgrfizzydrinksinweight

The higher the weighting factor for some component is relative to the
other weighting factors, the more influence the asociated growth boost
component has on the final growth rate. Note that it's the relation
betwen weighting factors that matters; for instance, if all the other
weighting factors are zero, the following set

tgractstationsweight = 10
tgrpassoutweight = 5

yields exactly the same results as

tgractstationsweight = 2
tgrpassoutweight = 1

The growth boost components are calculated as follows:

* AS = ((NAS * tgractstations) + tgractstationexist) * 10 / ratediff,
or: AS = 0 if NAS = 0; AS = 1 if the above term > 1;
where NAS = number of active stations. If 'tgractstationsweight' is the
only nonzero weighting factor, then the default values,
tgractstations=10 and tgractstationexist=5 result in an approximation of
the standard TTD behaviour. Note that 'tgractstationexist' can be negative.

* PO and MO are simply percentages of passengers and mail, respectively,
generated by this town and transported within the last month.

* PI = PILM/tgrpassinmax,
or 1 if PILM>tgrpassinmax, where PILM = number of passengers 'in' (i.e
accepted at all stations belonging to the town) last month. The
rationale is that incoming passengers boost growth of a town, but only
up to a point.

* GI = (GILM*tgrmailinoptim)/(P*2),
or 1 if GILM>(P*2/tgrmailinoptim), where GILM = number of crates of
goods 'in' last month and P = population of the town. The rationale is
that incoming goods boost growth of a town, but only up to some
'optimum', which is directly proportional to the population of the town;
in a sort of way, each inhabitant can consume only up to some amount of
goods each month. This 'optimum' is defined as population per 2 crates
of goods. For example, if tgrgoodsinoptim=20, then a town with
population of 400 needs (400/20)*2 = 40 crates of goods each month; more
goods will be still accepted but will not contribute to the growth of
the town.

* MI, FI, WI, SI, DI are calculated the same way GI is, except that each
uses its own 'trg*optim' setting. Any cargo type not available in the
current climate is omitted from the calculations, as if its weighting
factor were zero.

* An additional calculation is done for towns in snow and desert areas.
It is presumed that towns above the snow line (or in desert) need some
minimum food to grow at all. This is defined via 'tgrfoodinmin', again
as population per 2 tonnes of food. Before FI is calculated, RFI =
(P*2)/tgrfoodinmin is subtracted from FILM (which is, remember, the
number of tonnes of food 'in' last month); if the result is negative,
the town will not grow at all. Similarly, RWI = (P*2)/tgrwaterinmin is
subtracted from WILM for towns in desert.


OK, so we have the base rate delta multiplier. This is then used to
calculate the /rate delta multiplier/:

RDM = BRDM * ((NTB / tgrtownsizebase) * TSF) + (1 - TSF))

where NTB is the number of buildings in the town and
TSF=tgrtownsizefactor/255 (i.e. it's a value between 0 and 1, which
determines how much of the growth rate depends on the town size, in
percent). This can be used to add a bit of 'exponentiality' to the
growth of towns (remember, the growth rate is expressed in new buildings
per time unit, so with a constant rate larger towns will appear to grow
slower).

Then the /real growth rate/ is calculated:

RGR = towngrowthratemin + ratediff*CRDM

where CDRM=RDM if RDM<=1, and CRDM=1 otherwise.

Then, if a town building fund is active in this town, 600 is added.
Then, if the town is one of those supposed to be larger (see
'largertowns'), the rate is doubled. And *this* is the final growth
rate, in new houses per century.

Now, I wonder if anyone managed to follow me to this point... ;-)

As a final note, the real growth of towns is a second- or third-order
effect of the final growth rate, so don't expect towns to grow exactly
at the rate you've calculated from the formulae above... But on the
average it shouldn't be far off.

--
Marcin Grzegorczyk

nylon.net

unread,
May 21, 2003, 5:22:21 AM5/21/03
to

RGR = towngrowthratemin + ratediff*CRDM?

That may be all very well, but have you built into your calculations the
rate of sewerage pipes laid in towns?

If not, we may have to route our buses around towns that really pong
badly :-)

And what about including the effects of the number of flower boxes in
cottage windows?? You guys are really getting sloppy. :-))

And as for the effects of sunspots on traffic patterns - don't get me
started...

In truth, the way TTD is evolving, it should be bought by every
county/state/city traffic management authority and used as a model.

Well done do all the clever people out there who are keeping the spirit
of TT alive.

And if Lord Chris is listening - the bar has *officially* been raised!

--

nylon.net
Transport Tycoon: http://nylon.net/ttd
Not to be confused with COPYCAT, FAKE, BADLY-SPELLED and SACRILIGIOUS
Churches of Transport Tycoon you might suffer in your travels. Ours is
the only one with a money-and-soul back guarantee.

Marcin Grzegorczyk

unread,
May 21, 2003, 7:21:31 AM5/21/03
to
nylon.net wrote:
> RGR = towngrowthratemin + ratediff*CRDM?
>
> That may be all very well, but have you built into your calculations the
> rate of sewerage pipes laid in towns?

Wait until TTDPatch 3.1 alpha 22. :->

(And *please* don't quote the entire 170-line message when replying...)
--
Marcin Grzegorczyk

0 new messages