Example #1
0
    def update_population(self):
        deaths = [0 for _ in BirthData.rates]
        incomes = [0. for _ in BirthData.rates]
        thresholds = [quantile(self.get_overall_incomes(),q)\
                      for q in BirthData.quantiles]

        for ind in self.population:
            ind.grow_older()
            if not ind.is_alive():
                level = sum([ind.get_overall_income()> threshold \
                         for threshold in thresholds])
                deaths[level] += 1
                incomes[level] += ind.get_overall_income()
                self.population.remove(ind)

        births = [int(d * (1. + r)) for d, r in zip(deaths, BirthData.rates)]

        for birth, income in zip(births, incomes):
            if birth > 0:
                for _ in range(birth):
                    ind = Individual()
                    ind.endowment = income / birth
                    ind.current_age = 0
                    ind.age_at_death = DeathDist.draw_age_at_death()
                    ind.schooling = SchoolingDist.draw_schooling()
                    self.population.append(ind)

        self.size = len(self.population)
Example #2
0
    def populate(self, size):
        for _ in range(size):
            ind = Individual()

            age1, age2 = AgeDist.draw_age(), DeathDist.draw_age_at_death()
            ind.current_age, ind.age_at_death = sorted([age1, age2])
            ind.endowment = IncomeDist.draw_income()
            ind.schooling = SchoolingDist.draw_schooling()

            self.population.append(ind)

        self.size = size