def input_models(mate_encounter: float, mate_radius: float): """ Create all the input models Args: mate_encounter: mate encounter constant mate_radius: mate radius Returns: input models """ return [ growth.max_gut(), growth.growth(param.alpha_ss, param.alpha_rr, param.beta_ss, param.beta_rr, dominance), init_bio.init_num(param.lam_0_egg), init_bio.init_mass(param.mu_0_egg_ss, param.mu_0_egg_rr, param.sig_0_egg_ss, param.sig_0_egg_rr, dominance), init_bio.init_juvenile(param.mu_0_larva_ss, param.mu_0_larva_rr, param.sig_0_larva_ss, param.sig_0_larva_rr, dominance), init_bio.init_mature(param.mu_0_mature_ss, param.mu_0_mature_rr, param.sig_0_mature_ss, param.sig_0_mature_rr, dominance), init_bio.init_plant(param.mu_leaf, param.sig_leaf), move.adult(param.adult_scale, param.adult_shape), repro.mating(mate_encounter), repro.radius(mate_radius), repro.fecundity(param.fecundity_maximum, param.fecundity_decay), repro.density(param.eta, param.gamma), repro.init_sex(param.female_prob) ]
param.sig_larva_dev_ss, param.sig_larva_dev_rr, dominance), develop.pupa_dev(param.mu_pupa_dev, param.sig_pupa_dev), forage.adlibitum(param.forage_steps), forage.egg(param.egg_factor), forage.larva(param.larva_factor), forage.fight(param.fight_slope), forage.encounter(cannib), forage.radius(param.cannibalism_radius), move.larva(param.larva_scale, param.larva_shape), move.adult(param.adult_scale, param.adult_shape), repro.mating(param.mate_encounter), repro.radius(param.mate_radius), repro.fecundity(param.fecundity_maximum, param.fecundity_decay), repro.density(param.eta, param.gamma), repro.init_sex(param.female_prob), survive.egg_sur(param.egg_prob), survive.pupa_sur(param.pupa_prob), survive.adult_sur(param.adult_prob), survive.larva_sur(param.larva_prob_non_bt_rr, param.larva_prob_non_bt_ss, param.larva_prob_bt_rr, sur, dominance) ]
class Simulator(object): """ Class to setup and run a simulation of only biomass growth: Variables: nums: initial population numbers bt_prop: bt proportion """ grid = [graph.graph(field_grid), (keyword.hexagon, 1, 1, True)] attrs = {0: tracking.genotype_attrs} data = (np.inf, ) steps = [({ keyword.female: [keyword.move, keyword.reproduce], keyword.male: [keyword.move] }, param.forage_steps), ({ keyword.female: [keyword.advance_age, keyword.reset], keyword.male: [keyword.advance_age, keyword.reset] }, )] emigration = [] immigration = [] input_models = [ growth.max_gut(), growth.growth(param.alpha_ss, param.alpha_rr, param.beta_ss, param.beta_rr, dominance), init_bio.init_num(param.lam_0_egg), init_bio.init_mass(param.mu_0_egg_ss, param.mu_0_egg_rr, param.sig_0_egg_ss, param.sig_0_egg_rr, dominance), init_bio.init_juvenile(param.mu_0_larva_ss, param.mu_0_larva_rr, param.sig_0_larva_ss, param.sig_0_larva_rr, dominance), init_bio.init_mature(param.mu_0_mature_ss, param.mu_0_mature_rr, param.sig_0_mature_ss, param.sig_0_mature_rr, dominance), init_bio.init_plant(param.mu_leaf, param.sig_leaf), move.adult(param.adult_scale, param.adult_shape), repro.mating(param.mate_encounter), repro.radius(param.mate_radius), repro.density(param.eta, param.gamma), repro.init_sex(param.female_prob) ] input_variables = param.repro_values nums: hint.init_pops bt_prop: float simulation: hint.simulation = None def __post_init__(self): self.simulation = main_simulation.Simulation. \ setup(self.nums, self.grid, self.attrs, self.data, self.bt_prop, self.steps, self.emigration, self.immigration, *self.input_models, **self.input_variables) def collect(self) -> tuple: """ Collect the number of egg_masses Returns: number of egg_masses """ females = self.simulation.agents.agents(keyword.female) mated = [] for female in females: if female.mate is not None: mated.append(female) return len(females), len(mated) def run(self, times: list) -> tuple: """ Run the simulation for each time Args: times: the times for the simulation Returns: num egg_mass, densities """ females, mated = self.collect() data_females = [females] data_mated = [mated] data_prop = [mated / females] for time in times[1:]: print(' {} Running step: {}'.format(datetime.datetime.now(), time)) self.simulation.step() females, mated = self.collect() data_females.append(females) data_mated.append(mated) data_prop.append(mated / females) return data_females, data_mated, data_prop