metapopulation_mobility_stochastic.h Source File

CPP API: metapopulation_mobility_stochastic.h Source File
metapopulation_mobility_stochastic.h
Go to the documentation of this file.
1 /*
2 * Copyright (C) 2020-2026 MEmilio
3 *
4 * Authors: Daniel Abele
5 *
6 * Contact: Martin J. Kuehn <Martin.Kuehn@DLR.de>
7 *
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 */
20 #ifndef METAPOPULATION_MOBILITY_STOCHASTIC_H
21 #define METAPOPULATION_MOBILITY_STOCHASTIC_H
22 
26 
27 namespace mio
28 {
29 
33 template <typename FP>
34 using MobilityCoefficients = DampingMatrixExpression<FP, VectorDampings<FP>>;
35 
39 template <typename FP>
41 {
42 public:
48  : m_coefficients(coeffs)
49  {
50  }
51 
56  MobilityParametersStochastic(const Eigen::VectorX<FP>& coeffs)
58  {
59  }
60 
65  bool operator==(const MobilityParametersStochastic& other) const
66  {
67  return m_coefficients == other.m_coefficients;
68  }
69  bool operator!=(const MobilityParametersStochastic& other) const
70  {
71  return m_coefficients != other.m_coefficients;
72  }
74 
85  {
86  return m_coefficients;
87  }
89  {
90  return m_coefficients;
91  }
96  {
97  m_coefficients = coeffs;
98  }
99 
104  template <class IOContext>
105  void serialize(IOContext& io) const
106  {
107  auto obj = io.create_object("MobilityParameters");
108  obj.add_element("Coefficients", m_coefficients);
109  }
110 
115  template <class IOContext>
117  {
118  auto obj = io.expect_object("MobilityParameters");
119  auto c = obj.expect_element("Coefficients", Tag<MobilityCoefficients<FP>>{});
120  return apply(
121  io,
122  [](auto&& c_) {
123  MobilityParametersStochastic params(c_);
124  return params;
125  },
126  c);
127  }
128 
129 private:
130  MobilityCoefficients<FP> m_coefficients; //one per group and compartment
131 };
132 
136 template <typename FP>
138 {
139 public:
145  : m_parameters(params)
146  {
147  }
148 
153  MobilityEdgeStochastic(const Eigen::VectorX<FP>& coeffs)
154  : m_parameters(coeffs)
155  {
156  }
157 
162  {
163  return m_parameters;
164  }
165 
169  template <class Sim>
170  Eigen::VectorX<FP> get_transition_rates(SimulationNode<FP, Sim>& node_from)
171  {
172  Eigen::VectorX<FP> transitionRates(node_from.get_last_state().size());
173  for (Eigen::Index i = 0; i < node_from.get_last_state().size(); ++i) {
174  transitionRates[i] =
175  node_from.get_last_state()(i) * m_parameters.get_coefficients().get_baseline()[(size_t)i];
176  }
177  return transitionRates;
178  }
179 
186  template <class Sim>
187  void apply_mobility(size_t event, SimulationNode<FP, Sim>& node_from, SimulationNode<FP, Sim>& node_to);
188 
189 private:
191 };
192 
193 template <typename FP>
194 template <class Sim>
196  SimulationNode<FP, Sim>& node_to)
197 {
198  node_from.get_result().get_last_value()[event] -= 1;
199  node_to.get_result().get_last_value()[event] += 1;
200 }
201 
206 template <typename FP, class Sim, class StochasticEdge>
207 void apply_mobility(StochasticEdge& mobilityEdge, size_t event, SimulationNode<FP, Sim>& node_from,
208  SimulationNode<FP, Sim>& node_to)
209 {
210  mobilityEdge.apply_mobility(event, node_from, node_to);
211 }
212 
223 template <typename FP, class Sim>
224 GraphSimulationStochastic<FP, Graph<SimulationNode<FP, Sim>, MobilityEdgeStochastic<FP>>>
226 {
227  return make_graph_sim_stochastic<FP>(
228  t0, dt, graph, &advance_model<FP, Sim>,
231 }
232 
233 template <typename FP, class Sim>
234 GraphSimulationStochastic<FP, Graph<SimulationNode<FP, Sim>, MobilityEdgeStochastic<FP>>>
236 {
237  return make_graph_sim_stochastic<FP>(
238  t0, dt, std::move(graph), &advance_model<FP, Sim>,
241 }
242 
245 } // namespace mio
246 
247 #endif //METAPOPULATION_MOBILITY_STOCHASTIC_H
represents the coefficient wise matrix (or vector) expression B - D * M where B is a baseline,...
Definition: contact_matrix.h:46
generic graph structure
Definition: graph.h:153
represents the mobility between two nodes.
Definition: metapopulation_mobility_stochastic.h:138
MobilityEdgeStochastic(const MobilityParametersStochastic< FP > &params)
create edge with coefficients.
Definition: metapopulation_mobility_stochastic.h:144
Eigen::VectorX< FP > get_transition_rates(SimulationNode< FP, Sim > &node_from)
get the cumulative transition rate of the edge.
Definition: metapopulation_mobility_stochastic.h:170
MobilityEdgeStochastic(const Eigen::VectorX< FP > &coeffs)
create edge with coefficients.
Definition: metapopulation_mobility_stochastic.h:153
void apply_mobility(size_t event, SimulationNode< FP, Sim > &node_from, SimulationNode< FP, Sim > &node_to)
compute mobility from node_from to node_to for a given event
Definition: metapopulation_mobility_stochastic.h:195
const MobilityParametersStochastic< FP > & get_parameters() const
get the mobility parameters.
Definition: metapopulation_mobility_stochastic.h:161
MobilityParametersStochastic< FP > m_parameters
Definition: metapopulation_mobility_stochastic.h:190
parameters that influence mobility.
Definition: metapopulation_mobility_stochastic.h:41
bool operator==(const MobilityParametersStochastic &other) const
equality comparison operators
Definition: metapopulation_mobility_stochastic.h:65
MobilityCoefficients< FP > & get_coefficients()
Get/Set the mobility coefficients.
Definition: metapopulation_mobility_stochastic.h:88
MobilityParametersStochastic(const Eigen::VectorX< FP > &coeffs)
constructor from mobility coefficients.
Definition: metapopulation_mobility_stochastic.h:56
void serialize(IOContext &io) const
serialize this.
Definition: metapopulation_mobility_stochastic.h:105
const MobilityCoefficients< FP > & get_coefficients() const
Get/Set the mobility coefficients.
Definition: metapopulation_mobility_stochastic.h:84
MobilityParametersStochastic(const MobilityCoefficients< FP > &coeffs)
constructor from mobility coefficients.
Definition: metapopulation_mobility_stochastic.h:47
static IOResult< MobilityParametersStochastic > deserialize(IOContext &io)
deserialize an object of this class.
Definition: metapopulation_mobility_stochastic.h:116
void set_coefficients(const MobilityCoefficients< FP > &coeffs)
Definition: metapopulation_mobility_stochastic.h:95
bool operator!=(const MobilityParametersStochastic &other) const
Definition: metapopulation_mobility_stochastic.h:69
MobilityCoefficients< FP > m_coefficients
Get/Set the mobility coefficients.
Definition: metapopulation_mobility_stochastic.h:130
represents the simulation in one node of the graph.
Definition: metapopulation_mobility_instant.h:41
Eigen::Ref< const Eigen::VectorX< FP > > get_last_state() const
Definition: metapopulation_mobility_instant.h:82
decltype(auto) get_result() const
get the result of the simulation in this node.
Definition: metapopulation_mobility_instant.h:58
int size(Comm comm)
Return the size of the given communicator.
Definition: miompi.cpp:75
A collection of classes to simplify handling of matrix shapes in meta programming.
Definition: models/abm/analyze_result.h:30
boost::outcome_v2::in_place_type_t< T > Tag
Type that is used for overload resolution.
Definition: io.h:407
auto i
Definition: io.h:809
details::ApplyResultT< F, T... > apply(IOContext &io, F f, const IOResult< T > &... rs)
Evaluate a function with zero or more unpacked IOResults as arguments.
Definition: io.h:481
GraphSimulation< FP, Graph< SimulationNode< FP, Sim >, MobilityEdge< FP > >, FP, FP, void(*)(FP, FP, mio::MobilityEdge< FP > &, mio::SimulationNode< FP, Sim > &, mio::SimulationNode< FP, Sim > &), void(*)(FP, FP, mio::SimulationNode< FP, Sim > &)> make_mobility_sim(FP t0, FP dt, const Graph< SimulationNode< FP, Sim >, MobilityEdge< FP >> &graph)
create a mobility-based simulation.
Definition: metapopulation_mobility_instant.h:667
DampingMatrixExpression< FP, VectorDampings< FP > > MobilityCoefficients
time dependent mobility coefficients.
Definition: metapopulation_mobility_instant.h:108
void apply_mobility(abm::TimePoint t, abm::TimeSpan, ABMMobilityEdge< History... > &edge, ABMSimulationNode< History... > &node_from, ABMSimulationNode< History... > &node_to)
Edge functor for abm graph simulation.
Definition: graph_abm_mobility.h:164
boost::outcome_v2::unchecked< T, IOStatus > IOResult
Value-or-error type for operations that return a value but can fail.
Definition: io.h:353