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)
        ]
Beispiel #2
0
class Fecundity(object):
    """
    Class to setup and run a simulation of the female fecundity

    Variables:
        fecundity: the fecundity model
    """

    init_num = init_bio.init_num(param.lam_0_egg)
    fecundity = repro.fecundity(param.fecundity_maximum, param.fecundity_decay)

    def run(self, ages: list) -> list:
        """
        Run the model for each age

        Args:
            ages: list of ages

        Returns:
            list of number of eggs
        """

        numbers = []
        for age in ages:
            number_egg_mass = self.fecundity(age, 0, 'none')
            number_eggs = self.init_num('none')

            numbers.append(number_egg_mass * number_eggs)

        return numbers

    @classmethod
    def run_sim(cls, ages: list) -> list:
        """
        Setup and rum the sim

        Args:
            ages: ages to simulate

        Returns:
            number of eggs produced
        """

        new = cls()

        return new.run(ages)
                      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)
]

base_dir = sys.argv[0].split('.')[0]
base_save = base_dir.split('/')[-1]
Beispiel #4
0
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.fecundity(param.fecundity_maximum, param.fecundity_decay),
        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) -> int:
        """
        Collect the number of egg_masses

        Returns:
            number of egg_masses
        """

        egg_masses = self.simulation.agents.agents(keyword.egg_mass)

        return len(egg_masses)

    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 = self.simulation.agents[(0,)]['female'].agents
        # for agent in females:
        #     print('Agent: {}, Num_eggs: {}'.format(agent.unique_id,
        #                                            agent.num_eggs))

        data = [self.collect()]
        for time in times[1:]:
            print('        {} Running step: {}'.format(datetime.datetime.now(),
                                                       time))
            self.simulation.step()
            data.append(self.collect())

            # females = self.simulation.agents[(0,)]['female'].agents
            # for agent in females:
            #     print('Agent: {}, Num_eggs: {}'.format(agent.unique_id,
            #                                            agent.num_eggs))

        density = []
        for number in data:
            density.append(number / (field_grid**2))

        return data, density