# Can a pair of rats multiply to 200 within a year?

A story on the BBC News website makes the following claim:

Brown rats are one of the planet's most serious mammalian pests, ruining crops and harbouring disease. Expert jumpers, climbers and swimmers, a single pair can multiply to 200 within a year.

Can rats multiply this quickly?

According to this site rats:

• reach sexual maturity at 4 months (for females, who are the limiting factor here)
• can give birth seven times a year
• have litters of about 8

Starting with two sexually mature rats (and assuming averages of all the above throughout), the original pair will produce 7 litters of 8 rats in a year - 56 rats. The first litter in the second generation become fertile at 4 months after birth (5 months from the start of the year), and so the four females in that litter will have around 7/12*7 = 4 litters each in the year - 128 rats. 128 + 56 = 184. That's so close to the 200 that we don't need to worry about the remaining 6 litters or further generations. Rats are clearly capable of becoming at least 200 within a year.

• I was just doing a similar calculation based on the Wikipedia values, which were sexual maturity at 5 weeks, typically 7 per litter, can give birth 5 times a year. Jul 12 '12 at 14:09
• Do you mean "so close to the 100" ? Jul 12 '12 at 20:44
• @Walkerneo The figure given was "200 in a year". 128+56=184, so close to 200 with many generations still to go that the total will clearly exceed 200. Jul 12 '12 at 21:08
• @Tom77 That of course assumes that all rats in a litter survive to breed more litters, meaning adequate food supplies and zero predators in the ecosystem. And let's not even begin looking at the results of multiple generations' worth of inbreeding... Nov 24 '17 at 17:05
• @Shadur At worse you'll have one inbred generation with this simulation. It definitely won't be an issue. Also, that's that happens in the span of a single year. While I agree that survival may be an issue, they are still reproducing at extreme rates! Nov 24 '17 at 18:12

Using the statistics cited in DJClayworth's answer, this Python program calculates that a male/female pair of mature rats could grow (under ideal conditions) to a population of about 250 in one year.

``````import matplotlib.pyplot as plt

maturity_age = 120     # days
litter_frequency = 52  # 7 litters per year implies a new litter is born every 52 (=365/7) days
# starting population consists of a mature male and female pair
rats = [{'gender':'male', 'age':litter_frequency*2},
{'gender':'female', 'age':litter_frequency*2}]
pop = []
for day in range(365):
new_rats = []
for i, rat in enumerate(rats):
if ((rat['age'] >= maturity_age)
and (rat['gender'] == 'female')
and (rat['age'] % litter_frequency == 0)):
# new litter consists of 4 males, 4 females
new_rats.extend([
{'gender': gender, 'age': 0} for gender in ['male', 'female']
for i in range(4)])
print('Day {}: rat #{} ({} days old) gives birth to a new litter. (Pop size = {})'.format(day, i, rat['age'], len(rats)+len(new_rats)))
rat['age'] += 1
rats.extend(new_rats)
pop.append(len(rats))

plt.plot(pop)
plt.xlabel('days')
plt.ylabel('population')
plt.show()
``````

yields

``````Day 52: rat #1 (156 days old) gives birth to a new litter. (Pop size = 10)
Day 104: rat #1 (208 days old) gives birth to a new litter. (Pop size = 18)
Day 156: rat #1 (260 days old) gives birth to a new litter. (Pop size = 26)
Day 208: rat #1 (312 days old) gives birth to a new litter. (Pop size = 34)
Day 209: rat #6 (156 days old) gives birth to a new litter. (Pop size = 42)
Day 209: rat #7 (156 days old) gives birth to a new litter. (Pop size = 50)
Day 209: rat #8 (156 days old) gives birth to a new litter. (Pop size = 58)
Day 209: rat #9 (156 days old) gives birth to a new litter. (Pop size = 66)
Day 260: rat #1 (364 days old) gives birth to a new litter. (Pop size = 74)
Day 261: rat #6 (208 days old) gives birth to a new litter. (Pop size = 82)
Day 261: rat #7 (208 days old) gives birth to a new litter. (Pop size = 90)
Day 261: rat #8 (208 days old) gives birth to a new litter. (Pop size = 98)
Day 261: rat #9 (208 days old) gives birth to a new litter. (Pop size = 106)
Day 261: rat #14 (156 days old) gives birth to a new litter. (Pop size = 114)
Day 261: rat #15 (156 days old) gives birth to a new litter. (Pop size = 122)
Day 261: rat #16 (156 days old) gives birth to a new litter. (Pop size = 130)
Day 261: rat #17 (156 days old) gives birth to a new litter. (Pop size = 138)
Day 312: rat #1 (416 days old) gives birth to a new litter. (Pop size = 146)
Day 313: rat #6 (260 days old) gives birth to a new litter. (Pop size = 154)
Day 313: rat #7 (260 days old) gives birth to a new litter. (Pop size = 162)
Day 313: rat #8 (260 days old) gives birth to a new litter. (Pop size = 170)
Day 313: rat #9 (260 days old) gives birth to a new litter. (Pop size = 178)
Day 313: rat #14 (208 days old) gives birth to a new litter. (Pop size = 186)
Day 313: rat #15 (208 days old) gives birth to a new litter. (Pop size = 194)
Day 313: rat #16 (208 days old) gives birth to a new litter. (Pop size = 202)
Day 313: rat #17 (208 days old) gives birth to a new litter. (Pop size = 210)
Day 313: rat #22 (156 days old) gives birth to a new litter. (Pop size = 218)
Day 313: rat #23 (156 days old) gives birth to a new litter. (Pop size = 226)
Day 313: rat #24 (156 days old) gives birth to a new litter. (Pop size = 234)
Day 313: rat #25 (156 days old) gives birth to a new litter. (Pop size = 242)
Day 364: rat #1 (468 days old) gives birth to a new litter. (Pop size = 250)
``````

To run the script on a machine (with Python and matplotlib installed), save the code to a file called `script.py`, then run from the command-line:

``````python script.py
``````

Note that DJClayworth's answer estimates that the second generation of rats give birth to 4 litters. Assuming the first litter is born on day 52, the simulation above shows females from the second generation may only have 3 litters each. So the accounting is a bit different, though the conclusion (that a single pair can give rise to >200 rats) is the same.

• +10 for using a Python script. Nov 29 '17 at 14:32
• Why day 365 is excluded? Nov 30 '17 at 9:14
• @Federico: Python ranges (by default) start at zero. So `for day in range(365)` iterates over the integers from 0 to 364 (inclusive). Nov 30 '17 at 12:13
• but then I don't understand why the first litter is born on day 52 instead of day 51, since "litter_frequency = 52" Nov 30 '17 at 12:21
• @Federico: Yes, you are right that if we have the first litter born on day 51, then pop size increases to 378. (Change `litter_frequency*2` to `litter_frequency*2+1` in the initial definition of `rats`. Nov 30 '17 at 12:28