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)
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