Utopia  2
Framework for studying models of complex & adaptive systems.
Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
Utopia::Models::PredatorPrey::PredatorPrey Class Reference

PredatorPrey Model on grid cells. More...

#include <PredatorPrey.hh>

Inheritance diagram for Utopia::Models::PredatorPrey::PredatorPrey:
Inheritance graph
[legend]
Collaboration diagram for Utopia::Models::PredatorPrey::PredatorPrey:
Collaboration graph
[legend]

Public Types

using Base = Model< PredatorPrey, ModelTypes >
 The base model. More...
 
using DataSet = typename Base::DataSet
 Data type for a dataset. More...
 
using CellManager = Utopia::CellManager< CellTraits, PredatorPrey >
 The type of the cell manager. More...
 
using Cell = typename CellManager::Cell
 The type of a cell. More...
 
using Rule = typename CellManager::RuleFunc
 Type of the update rules. More...
 
- Public Types inherited from Utopia::Model< PredatorPrey, ModelTypes >
using Config = typename ModelTypes::Config
 Data type that holds the configuration. More...
 
using DataManager = DataIO::Default::DefaultDataManager< PredatorPrey >
 The data manager to use, specialized with the derived model. More...
 
using DataGroup = typename ModelTypes::DataGroup
 Data type that is used for storing datasets. More...
 
using DataSet = typename ModelTypes::DataSet
 Data type that is used for storing data. More...
 
using RNG = typename ModelTypes::RNG
 Data type of the shared RNG. More...
 
using Space = typename ModelTypes::Space
 Data type of the space this model resides in. More...
 
using Time = typename ModelTypes::Time
 Data type for the model time. More...
 
using Monitor = typename ModelTypes::Monitor
 Data type for the monitor. More...
 
using MonitorManager = typename ModelTypes::MonitorManager
 Data type for the monitor manager. More...
 
using Level = typename ModelTypes::Level
 Data type for the hierarchical level. More...
 

Public Member Functions

template<class ParentModel >
 PredatorPrey (const std::string &name, ParentModel &parent_model, const DataIO::Config &custom_cfg={})
 Construct the PredatorPrey model. More...
 
void perform_step ()
 Perform an iteration step. More...
 
void monitor ()
 Monitor model information. More...
 
void write_data ()
 Write data. More...
 
- Public Member Functions inherited from Utopia::Model< PredatorPrey, ModelTypes >
 Model (const std::string &name, const ParentModel &parent_model, const Config &custom_cfg={}, std::tuple< WriterArgs... > w_args={}, const DataIO::Default::DefaultDecidermap< PredatorPrey > &w_deciders=DataIO::Default::default_deciders< PredatorPrey >, const DataIO::Default::DefaultTriggermap< PredatorPrey > &w_triggers=DataIO::Default::default_triggers< PredatorPrey >)
 Constructs a Model instance. More...
 
const std::shared_ptr< Space > & get_space () const
 Return the space this model resides in. More...
 
Time get_time () const
 Return the current time of this model. More...
 
Time get_time_max () const
 Return the maximum time possible for this model. More...
 
Config get_cfg () const
 Return the config node of this model. More...
 
std::string get_name () const
 Return the name of this model instance. More...
 
std::string get_full_name () const
 Return the full name of this model within the model hierarchy. More...
 
std::shared_ptr< DataGroupget_hdfgrp () const
 Return a pointer to the HDF group this model stores data in. More...
 
Time get_write_start () const
 Return the parameter that controls when write_data is called first. More...
 
Time get_write_every () const
 Return the parameter that controls how often write_data is called. More...
 
DataManager get_datamanager () const
 return the datamanager More...
 
hsize_t get_remaining_num_writes () const
 Return the number of remaining write_data calls this model will make. More...
 
std::shared_ptr< RNGget_rng () const
 Return a pointer to the shared RNG. More...
 
std::shared_ptr< spdlog::logger > get_logger () const
 Return a pointer to the logger of this model. More...
 
Monitor get_monitor () const
 Return the monitor of this model. More...
 
std::shared_ptr< MonitorManagerget_monitor_manager () const
 Get the monitor manager of the root model. More...
 
Level get_level () const
 Return the hierarchical level within the model hierarchy. More...
 
virtual void prolog ()
 A function that is called before starting model iteration. More...
 
virtual void epilog ()
 A function that is called after the last iteration of a model. More...
 
void iterate ()
 Iterate one (time) step of this model. More...
 
void run ()
 Run the model from the current time to the maximum time. More...
 
std::shared_ptr< DataSetcreate_dset (const std::string name, const std::shared_ptr< DataGroup > &hdfgrp, std::vector< hsize_t > add_write_shape, const std::size_t compression_level=1, const std::vector< hsize_t > chunksize={})
 Create a new dataset within the given group. More...
 
std::shared_ptr< DataSetcreate_dset (const std::string name, const std::vector< hsize_t > add_write_shape, const std::size_t compression_level=1, const std::vector< hsize_t > chunksize={})
 Create a new dataset within the model's base data group. More...
 
std::shared_ptr< DataSetcreate_cm_dset (const std::string name, const CellManager &cm, const std::size_t compression_level=1, const std::vector< hsize_t > chunksize={})
 Create a dataset storing data from a CellManager. More...
 
std::shared_ptr< DataSetcreate_am_dset (const std::string name, const AgentManager &am, const std::size_t compression_level=1, const std::vector< hsize_t > chunksize={})
 Create a dataset storing data from a AgentManager. More...
 

Private Member Functions

void move_predator_to_nb_cell (const std::shared_ptr< Cell > &cell, const std::shared_ptr< Cell > &nb_cell)
 Move a predator to a neighboring cell. More...
 
void move_prey_to_nb_cell (const std::shared_ptr< Cell > &cell, const std::shared_ptr< Cell > &nb_cell)
 Move a prey to a neighboring cell. More...
 

Private Attributes

CellManager _cm
 The cell manager. More...
 
SpeciesParams _params
 Predator-specific model parameters. More...
 
CellContainer< Cell_prey_cell
 A container to temporarily accumulate the prey neighbour cells. More...
 
CellContainer< Cell_empty_cell
 A container to temporarily accumulate empty neighbour cells. More...
 
CellContainer< Cell_repro_cell
 A container to temporarily accumulate neighbour cells for reproduction. More...
 
std::uniform_real_distribution< double > _prob_distr
 
const std::shared_ptr< DataSet_dset_prey
 Dataset of Prey locations on the grid. More...
 
const std::shared_ptr< DataSet_dset_predator
 Dataset of Predator locations on the grid. More...
 
const std::shared_ptr< DataSet_dset_resource_prey
 Dataset of Prey resources on the grid. More...
 
const std::shared_ptr< DataSet_dset_resource_predator
 Dataset of Predator resources on the grid. More...
 
Rule _cost_of_living
 Cost of Living. More...
 
Rule _move_predator
 Define the movement rule of predator. More...
 
Rule _flee_prey
 Define the movement rule of prey. More...
 
Rule _eat
 Define the eating rule. More...
 
Rule _repro
 Define the reproduction rule. More...
 
Rule _reset_predator_movement
 Resets the movement flag of predators to "false" for next turn. More...
 

Additional Inherited Members

- Protected Member Functions inherited from Utopia::Model< PredatorPrey, ModelTypes >
void __perform_step ()
 Perform the computation of a step. More...
 
void __monitor ()
 Monitor information in the terminal. More...
 
void __write_data ()
 Write data; calls the implementation's write_data method. More...
 
void __write_initial_state ()
 Write the initial state. More...
 
void increment_time (const Time dt=1)
 Increment time. More...
 
void __prolog ()
 The default prolog of a model. More...
 
void __epilog ()
 The default epilog of a model. More...
 
PredatorPrey & impl ()
 cast to the derived class More...
 
const PredatorPrey & impl () const
 const cast to the derived interface More...
 
- Protected Attributes inherited from Utopia::Model< PredatorPrey, ModelTypes >
const std::string _name
 Name of the model instance. More...
 
const std::string _full_name
 The full name within the model hierarchy. More...
 
const Level _level
 The level within the model hierarchy. More...
 
const Config _cfg
 Config node belonging to this model instance. More...
 
const std::shared_ptr< RNG_rng
 The RNG shared between models. More...
 
const std::shared_ptr< spdlog::logger > _log
 The (model) logger. More...
 
std::shared_ptr< Space_space
 The space this model resides in. More...
 
Time _time
 Model-internal current time stamp. More...
 
const Time _time_max
 Model-internal maximum time stamp. More...
 
const std::shared_ptr< DataGroup_hdfgrp
 The HDF group this model instance should write its data to. More...
 
const Time _write_start
 First time at which write_data is called. More...
 
const Time _write_every
 How often to call write_data from iterate. More...
 
Monitor _monitor
 The monitor. More...
 
DataManager _datamanager
 Manager object for handling data output; see DataManager. More...
 
- Static Protected Attributes inherited from Utopia::Model< PredatorPrey, ModelTypes >
static constexpr WriteMode _write_mode
 Which data-writing mode the base model should use. More...
 

Detailed Description

PredatorPrey Model on grid cells.

Predators and prey correspond to the Population state of each cell, either empty, prey, predator or both. Cells are updated based on the following interactions: 1) resource levels are reduced by a cost_of_living for both species and individuals are removed if resource <= 0 2) predators move to neighbouring cells if there is a no prey on their own cell. Prey flees with a certain probability, if there is a predator on the same cell 3) predators eat prey if on the same cell, else if there is only a prey it takes up resources 4) both predators and prey reproduce if resources are sufficient and if there is a cell in their neighbourhood not already occupied by the same species

Member Typedef Documentation

◆ Base

The base model.

◆ Cell

The type of a cell.

◆ CellManager

The type of the cell manager.

◆ DataSet

Data type for a dataset.

◆ Rule

Type of the update rules.

Constructor & Destructor Documentation

◆ PredatorPrey()

template<class ParentModel >
Utopia::Models::PredatorPrey::PredatorPrey::PredatorPrey ( const std::string &  name,
ParentModel &  parent_model,
const DataIO::Config custom_cfg = {} 
)
inline

Construct the PredatorPrey model.

Parameters
nameName of this model instance; is used to extract the configuration from the parent model and set up a HDFGroup for this instance
parent_modelThe parent model this model instance resides in
custom_cfgA custom configuration to use instead of the one extracted from the parent model using the instance name

Member Function Documentation

◆ monitor()

void Utopia::Models::PredatorPrey::PredatorPrey::monitor ( )
inline

Monitor model information.

Calculate the densities for both species

◆ move_predator_to_nb_cell()

void Utopia::Models::PredatorPrey::PredatorPrey::move_predator_to_nb_cell ( const std::shared_ptr< Cell > &  cell,
const std::shared_ptr< Cell > &  nb_cell 
)
inlineprivate

Move a predator to a neighboring cell.

This function resets the states predator state and updates the neighboring predator state.

◆ move_prey_to_nb_cell()

void Utopia::Models::PredatorPrey::PredatorPrey::move_prey_to_nb_cell ( const std::shared_ptr< Cell > &  cell,
const std::shared_ptr< Cell > &  nb_cell 
)
inlineprivate

Move a prey to a neighboring cell.

This function resets the states prey state and updates the neighboring prey state.

◆ perform_step()

void Utopia::Models::PredatorPrey::PredatorPrey::perform_step ( )
inline

Perform an iteration step.

An iteration step consists of:

  1. Subtracting costs of living
  2. Let predator and prey move to neighboring cells
  3. Lunch time: Prey eats grass and predator eats prey if on the same cell
  4. Reproduction: Create offspring

◆ write_data()

void Utopia::Models::PredatorPrey::PredatorPrey::write_data ( )
inline

Write data.

When invoked, stores cell positions and resources of both prey and predators.

Note
Positions are cast to char and therefore stored as such. This is because C has no native boolean type, and the HDF5 library thus cannot store it directly. With 8 bit width, char is the smallest data type available; short int is already 16 bit.

Member Data Documentation

◆ _cm

CellManager Utopia::Models::PredatorPrey::PredatorPrey::_cm
private

The cell manager.

◆ _cost_of_living

Rule Utopia::Models::PredatorPrey::PredatorPrey::_cost_of_living
private
Initial value:
= [this](const auto& cell) {
auto& state = cell->state;
state.predator.resources =
std::clamp( state.predator.resources
state.prey.resources =
std::clamp( state.prey.resources
if (state.predator.on_cell and state.predator.resources <= 0.) {
state.predator.on_cell = false;
}
if (state.prey.on_cell and state.prey.resources <= 0.) {
state.prey.on_cell = false;
}
return state;
}
SpeciesParams _params
Predator-specific model parameters.
Definition: PredatorPrey.hh:122
double resource_max
Maximal resource level.
Definition: species.hh:39
double cost_of_living
Cost of living that is taken each time step.
Definition: species.hh:30
PredatorParams predator
Predator parameters.
Definition: species.hh:111
PreyParams prey
Prey parameters.
Definition: species.hh:108

Cost of Living.

subtract the cost of living from the resources of an individual and map the values below zero back to zero, then remove all individuals that do not have sufficient resources

◆ _dset_predator

const std::shared_ptr<DataSet> Utopia::Models::PredatorPrey::PredatorPrey::_dset_predator
private

Dataset of Predator locations on the grid.

◆ _dset_prey

const std::shared_ptr<DataSet> Utopia::Models::PredatorPrey::PredatorPrey::_dset_prey
private

Dataset of Prey locations on the grid.

◆ _dset_resource_predator

const std::shared_ptr<DataSet> Utopia::Models::PredatorPrey::PredatorPrey::_dset_resource_predator
private

Dataset of Predator resources on the grid.

◆ _dset_resource_prey

const std::shared_ptr<DataSet> Utopia::Models::PredatorPrey::PredatorPrey::_dset_resource_prey
private

Dataset of Prey resources on the grid.

◆ _eat

Rule Utopia::Models::PredatorPrey::PredatorPrey::_eat
private

Define the eating rule.

Update procedure is as follows:

  • prey is consumed by a predator if they are on the same cell. The predator increases its resources.
  • prey eats grass which increases its resources

◆ _empty_cell

CellContainer<Cell> Utopia::Models::PredatorPrey::PredatorPrey::_empty_cell
private

A container to temporarily accumulate empty neighbour cells.

◆ _flee_prey

Rule Utopia::Models::PredatorPrey::PredatorPrey::_flee_prey
private

Define the movement rule of prey.

If a prey is on the same cell as a predator, determine whether it may flee and where to.

◆ _move_predator

Rule Utopia::Models::PredatorPrey::PredatorPrey::_move_predator
private

Define the movement rule of predator.

If a predator is on the given cell, it moves random to a neighbour cell with prey on it. If no prey is available on neighbour cells, it moves randomly to an empty cell, if there is on. Otherwise it stays on its current cell.

◆ _params

SpeciesParams Utopia::Models::PredatorPrey::PredatorPrey::_params
private

Predator-specific model parameters.

◆ _prey_cell

CellContainer<Cell> Utopia::Models::PredatorPrey::PredatorPrey::_prey_cell
private

A container to temporarily accumulate the prey neighbour cells.

◆ _prob_distr

std::uniform_real_distribution<double> Utopia::Models::PredatorPrey::PredatorPrey::_prob_distr
private

◆ _repro

Rule Utopia::Models::PredatorPrey::PredatorPrey::_repro
private

Define the reproduction rule.

If space is available reproduce with reproduction probabilities of predator and prey respectively.

◆ _repro_cell

CellContainer<Cell> Utopia::Models::PredatorPrey::PredatorPrey::_repro_cell
private

A container to temporarily accumulate neighbour cells for reproduction.

◆ _reset_predator_movement

Rule Utopia::Models::PredatorPrey::PredatorPrey::_reset_predator_movement
private
Initial value:
= [](const auto& cell) {
auto& state = cell->state;
state.moved_predator = false;
return state;
}

Resets the movement flag of predators to "false" for next turn.


The documentation for this class was generated from the following file: