「夫婦同姓が続くと…2531年には「全員が佐藤さん」 東北大試算」という毎日新聞のニュース記事がありました。
そんなはずはないと思うのですがシミュレーションしてみました。
条件
条件は次のとおりとします。
初期の人口は100万人。
「佐藤」の割合は1.529%。元の記事の通り。
全員が結婚しどちらかの姓を名乗る。
子供は2人ずつ生まれ、姓を引き継ぐ。
100世代繰り返す。
結果
コードは後で示します。
結果を先に書くと次のとおりになります。
結果としては「「佐藤」の割合は変わらない」となりました。
元の記事では「佐藤姓が人口に占める割合は22~23年の1年間で、1・0083倍の伸び率」ということでこの増え方がずっと続くと「全員が佐藤になる」ということのようです。
「そりゃそうだろう」と思うのですが、夫婦別姓に反対するためにこのようなもっともらしい記事を乗せる毎日新聞の悪意を感じました。
エープリルフールだとしてもやりすぎだと思います。
コード
import random
def main():
population_size = 1000000
sato_ratio = 1.529 / 100
persons = []
for i in range(population_size):
if i < population_size * sato_ratio:
persons.append("sato")
else:
persons.append("sonota")
for n in range(100):
persons = next_generation(persons)
sato_count = persons.count("sato")
print(n,sato_count)
def next_generation(persons):
random.shuffle(persons)
population_size = len(persons)
persons_new = []
for i in range(0, population_size, 2):
sei = persons[i]
persons_new.append(sei)
persons_new.append(sei)
return persons_new
if __name__ == "__main__":
main()
def main():
population_size = 1000000
sato_ratio = 1.529 / 100
persons = []
for i in range(population_size):
if i < population_size * sato_ratio:
persons.append("sato")
else:
persons.append("sonota")
for n in range(100):
persons = next_generation(persons)
sato_count = persons.count("sato")
print(n,sato_count)
def next_generation(persons):
random.shuffle(persons)
population_size = len(persons)
persons_new = []
for i in range(0, population_size, 2):
sei = persons[i]
persons_new.append(sei)
persons_new.append(sei)
return persons_new
if __name__ == "__main__":
main()
コメント