diff --git a/README.md b/README.md
index 8e9f954..24830c0 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ Analysis of a dynamical system with three species in a competitive loop: a rock
The notebook [`long_range_simulations.ipynb`](./long_range_simulations.ipynb) analyzes simulations of the long-range dispersal model.
-The model is examined under both discrete and continuous time frameworks. For the continuous time approach, the differential equation system defining the model is solved using the [`scipy.integrate`](https://docs.scipy.org/doc/scipy/reference/integrate.html#module-scipy.integrate) package. Additionally, the model is reframed in terms of chemical reactions for stochastic simulations, which are conducted using the [`StochPy`](https://stochpy.sourceforge.net) package. It is further examined as a continuous-time Markov chain with the [`PRISM`](https://www.prismmodelchecker.org) stochastic model checker.
+The model is examined under both discrete and continuous time frameworks. For the continuous time approach, the differential equation system defining the model is solved using the [`scipy.integrate`](https://docs.scipy.org/doc/scipy/reference/integrate.html#module-scipy.integrate) package. Additionally, the model is reframed in terms of chemical reactions for stochastic simulations, which are conducted using the [`StochPy`](https://stochpy.sourceforge.net) package. It is further examined as a continuous-time Markov chain with the [`PRISM`](https://www.prismmodelchecker.org) stochastic model checker and as a Petri net with the tool [`Charlie`](https://www-dssz.informatik.tu-cottbus.de/DSSZ/Software/Charlie).
## Lattice model
diff --git a/index.md b/index.md
index 644e216..74ae879 100644
--- a/index.md
+++ b/index.md
@@ -4,7 +4,7 @@ Analysis of a dynamical system with three species in a competitive loop: a rock
## Long range dispersal model
-Click [here](./long_range_simulations.html) to view the notebook `long_range_simulations.ipynb`, which analyzes simulations of the long-range dispersal model. The model is examined under both discrete and continuous time frameworks. For the continuous time approach, the differential equation system defining the model is solved using the [`scipy.integrate`](https://docs.scipy.org/doc/scipy/reference/integrate.html#module-scipy.integrate) package. Additionally, the model is reframed in terms of chemical reactions for stochastic simulations, which are conducted using the [`StochPy`](https://stochpy.sourceforge.net) package. It is further examined as a continuous-time Markov chain with the [`PRISM`](https://www.prismmodelchecker.org) stochastic model checker.
+Click [here](./long_range_simulations.html) to view the notebook `long_range_simulations.ipynb`, which analyzes simulations of the long-range dispersal model. The model is examined under both discrete and continuous time frameworks. For the continuous time approach, the differential equation system defining the model is solved using the [`scipy.integrate`](https://docs.scipy.org/doc/scipy/reference/integrate.html#module-scipy.integrate) package. Additionally, the model is reframed in terms of chemical reactions for stochastic simulations, which are conducted using the [`StochPy`](https://stochpy.sourceforge.net) package. It is further examined as a continuous-time Markov chain with the [`PRISM`](https://www.prismmodelchecker.org) stochastic model checker and as a Petri net with the tool [`Charlie`](https://www-dssz.informatik.tu-cottbus.de/DSSZ/Software/Charlie).
## Lattice model
diff --git a/lattice_simulations.html b/lattice_simulations.html
index 3d98668..8bc4226 100644
--- a/lattice_simulations.html
+++ b/lattice_simulations.html
@@ -7517,6 +7517,25 @@
This notebook simulates the evolution of the system with local dispersal, featuring three variants of the rock-paper-scissors game. All lattice-based model were developed using the Mesa framework. With Mesa's visualization tools, we can observe the spatial structures that emerge from the interactions between the agents.
In this model the N sites are taken to be sites in a periodic, square lattice and each agent is activated once per time-step, in random order. During each activation, an agent competes with a randomly chosen neighboring agent. If the neighboring agent can be defeated, the agent wins the competition with a probability determined by the invasion rate. If the agent wins the competition, the neighboring agent is transformed into an individual of the same species of the winning agent.
-
See the original paper for more details: Frean, Marcus, and Edward R. Abraham. "Rock–scissors–paper and the survival of the weakest." Proceedings of the Royal Society of London. Series B: Biological Sciences 268.1474 (2001): 1323-1327.
In this model the N sites are taken to be sites in a periodic, square lattice and each agent is activated once per time-step, in random order. During each activation, an agent competes with a randomly chosen neighboring agent. If the neighboring agent can be defeated, the agent wins the competition with a probability determined by the invasion rate. If the agent wins the competition, the neighboring agent is transformed into an individual of the same species of the winning agent.
This is a variant of the model where the N sites are again taken to be sites in a periodic, square lattice, but at each time step, all agents are activated simultaneously. During activation, each agent competes with all its neighboring agents. If an agent is surrounded by at least three neighbors of the species that defeat it, it is transformed into an individual of that species. Note that invasion rates are not considered in this model.
This is a variant of the model where the N sites are again taken to be sites in a periodic, square lattice, but at each time step, all agents are activated simultaneously. During activation, each agent competes with all its neighboring agents. If an agent is surrounded by at least three neighbors of the species that defeat it, it is transformed into an individual of that species. Note that invasion rates are not considered in this model.
Let's define the parameters to perform a simulation of a system with 3 species, on a square lattice with $N=200\cdot 200$ sites, initialized with the sites being randomly assigned to each of the three species in equal proportions (init0=0.33, init1=0.33, init2=0.33).
Let's define the parameters to perform a simulation of a system with 3 species, on a square lattice with $N=200\cdot 200$ sites, initialized with the sites being randomly assigned to each of the three species in equal proportions (init0=0.33, init1=0.33, init2=0.33).
In this model the N sites are taken to be sites in a periodic, square lattice. Each patch can be occupied by one of the species or can be blank. Each tick, the following types of events happen at defined average rates:
In this model the N sites are taken to be sites in a periodic, square lattice. Each patch can be occupied by one of the species or can be blank. Each tick, the following types of events happen at defined average rates:
Select event: Two random neighbors compete with each other. The losing patch becomes blanks.
Reproduce event: Two random neighbors attempt to reproduce. If one of the neighbors is blank, it acquires the color of the other. Nothing happens if neither neighbor is blank.
Swap event: Two random neighbors swap color. This represents the organisms moving.
Therefore, this model combines the local competition and reproduction from the Frean and Abraham model with spatial migration, a ubiquitous feature of real ecosystems.
+
For more details, see the original paper [2].
The exact number of, for instance, swap events that occur each tick is drawn from a Poisson distribution with mean equal to $(number\_ of\_ patches) * 10 ^{swap-exponent}$. A Poisson distribution defines how many times a particular event occurs given an average rate for that event assuming that the occurrences of that event are independent. Here, the occurrences of the events are approximately independent since they're being performed by different organisms.
The events occur in a random order involving random pairs of neighbors.
See the original paper for more details: Reichenbach, Tobias, Mauro Mobilia, and Erwin Frey. "Mobility promotes and jeopardizes biodiversity in rock–paper–scissors games." Nature 448.7157 (2007): 1046-1049.
Let's define the parameters to perform a simulation of a system with 3 species, on a square lattice with $N=150\cdot 150$ sites, initialized with the sites being randomly assigned to each of the three species and empty sites in equal proportions (init0=0.25, init1=0.25, init2=0.25, init3=0.25). Black patches represent empty sites.
Let's define the parameters to perform a simulation of a system with 3 species, on a square lattice with $N=150\cdot 150$ sites, initialized with the sites being randomly assigned to each of the three species and empty sites in equal proportions (init0=0.25, init1=0.25, init2=0.25, init3=0.25). Black patches represent empty sites.
[1] Frean, Marcus, and Edward R. Abraham. "Rock–scissors–paper and the survival of the weakest." Proceedings of the Royal Society of London. Series B: Biological Sciences 268.1474 (2001): 1323-1327.
+
[2] Reichenbach, Tobias, Mauro Mobilia, and Erwin Frey. "Mobility promotes and jeopardizes biodiversity in rock–paper–scissors games." Nature 448.7157 (2007): 1046-1049.
+
diff --git a/lattice_simulations.ipynb b/lattice_simulations.ipynb
index 8f23124..d1d7732 100644
--- a/lattice_simulations.ipynb
+++ b/lattice_simulations.ipynb
@@ -8,6 +8,19 @@
"\n",
"This notebook simulates the evolution of the system with local dispersal, featuring three variants of the rock-paper-scissors game. All lattice-based model were developed using the [Mesa](https://mesa.readthedocs.io/en/stable/) framework. With Mesa's visualization tools, we can observe the spatial structures that emerge from the interactions between the agents.\n",
"\n",
+ "**Outline**\n",
+ "\n",
+ "- [1. Frean and Abraham model](#1.-frean-and-abraham-model)\n",
+ " - [1.1. Implementation details](#1.1.-implementation-details)\n",
+ " - [1.2. Simulations](#1.2.-simulations)\n",
+ "- [2. Model with simultaneous activation of agents](#2.-model-with-simultaneous-activation-of-agents)\n",
+ " - [2.1. Implementation details](#2.1.-implementation-details)\n",
+ " - [2.2. Simulations](#2.2.-simulations)\n",
+ "- [3. Reichenbach, Mobilia and Frey model](#3.-reichenbach,-mobilia-and-frey-model)\n",
+ " - [3.1. Implementation details](#3.1.-implementation-details)\n",
+ " - [3.2. Simulations](#3.2.-simulations)\n",
+ "- [4. References](#4.-references)\n",
+ "\n",
"Importing the necessary libraries:"
]
},
@@ -51,13 +64,13 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "## Frean and Abraham model\n",
+ "## 1. Frean and Abraham model\n",
"\n",
"In this model the N sites are taken to be sites in a periodic, square lattice and each agent is activated once per time-step, in random order. During each activation, an agent competes with a randomly chosen neighboring agent. If the neighboring agent can be defeated, the agent wins the competition with a probability determined by the invasion rate. If the agent wins the competition, the neighboring agent is transformed into an individual of the same species of the winning agent.\n",
"\n",
- "See the original paper for more details: Frean, Marcus, and Edward R. Abraham. \"Rock–scissors–paper and the survival of the weakest.\" Proceedings of the Royal Society of London. Series B: Biological Sciences 268.1474 (2001): 1323-1327.\n",
+ "For more details, see the original paper [1].\n",
"\n",
- "### Implementation details\n",
+ "### 1.1. Implementation details\n",
"\n",
"The model is defined by the class `RSPRandAct` in the file `./lattice_models/model_rand_act.py`:"
]
@@ -284,7 +297,7 @@
"- At each step, a neighbor is randomly chosen and the agent in the patch interacts with it. According to the invasion rates, the neighboring agent may be defeated and may become the same species as the agent in the patch.\n",
"- If the parameter `increase_rate` is set to `True`, after 100 steps the invasion rate of species 0 is increased whenever it replicates onto a new site. The increment is a random number uniformly distributed between 0 and 1e-4 and the new invasion rate is accepted if it is in the range $0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/long_range_simulations.html b/long_range_simulations.html
index f696d3b..c7fc051 100644
--- a/long_range_simulations.html
+++ b/long_range_simulations.html
@@ -7517,6 +7517,19 @@
We consider a model world that has $N$ available sites. The sites are occupied by three species, namely species $r$ (rock), $s$ (scissors) and $p$ (paper), which occur in the proportions $n_r$ , $n_s$ and $n_p$ (with $n_r + n_s + n_p = 1$). Two sites are chosen at each time-step. The occupant of the first replicates into the second with a given probability - individual of species $r$ can invade a species $s$ with probability $P_r$, a species $s$ invades a species $p$ with probability $P_s$, a species $p$ invades a species $r$ with probability $P_p$ and all other invasion probabilities are zero.
We consider a model world that has $N$ available sites. The sites are occupied by three species, namely species $r$ (rock), $s$ (scissors) and $p$ (paper), which occur in the proportions $n_r$ , $n_s$ and $n_p$ (with $n_r + n_s + n_p = 1$). Two sites are chosen at each time-step. The occupant of the first replicates into the second with a given probability - individual of species $r$ can invade a species $s$ with probability $P_r$, a species $s$ invades a species $p$ with probability $P_s$, a species $p$ invades a species $r$ with probability $P_p$ and all other invasion probabilities are zero.
Defining a function to simulate the evolution of the system for a world with $N$ sites:
To enhance accuracy, we simulate the system's evolution by solving the differential equations that define it.
The odeint method from scipy.integrate solves a system of ordinary differential equations using lsoda from the FORTRAN library odepack. This library uses the Adams/BDF method with automatic stiffness detection and switching.
While ODEs are deterministic and do not account for fluctuations in population densities, stochastic simulation methods offer greater accuracy, particularly when analyzing reaction systems with small quantities of molecules.
While ODEs are deterministic and do not account for fluctuations in population densities, stochastic simulation methods offer greater accuracy, particularly when analyzing reaction systems with small quantities of molecules.
To perform stochastic simulations, we need to translate the ODE system
Info: Direct method is selected to perform stochastic simulations.
-Parsing file: /Users/irenetesta/Stochpy/pscmodels/ImmigrationDeath.psc
-Info: No reagents have been fixed
-Parsing file: ./long_range_models/voters_model.psc
-Info: No reagents have been fixed
-['R', 'S', 'P']
-
-
-
-
-
-
-
-
-
-
-
In [ ]:
-
-
-
smod.DoStochSim(end=10000,trajectories=1000)
-smod.PlotAverageSpeciesTimeSeries(
- colors=["tab:red","purple","gold"],xlabel="Steps",
- title="Average species in 100 stochastic simulations, direct method\n$P_r=0.5$, $P_s=0.5$, $P_p=0.5$, $R=33$, $S=33$, $P=33$")
-
-
-
-
-
-
-
-
-
-
-
-
-
Info: 1000 trajectories are generated
-Info: Time simulation output of the trajectories is stored at voters_model(trajectory).dat in directory: /Users/irenetesta/Stochpy/temp
-Info: Simulation time: 18.548667907714844 *** WARNING ***: No regular grid is created yet. Use GetRegularGrid(n_samples) if averaged results are unsatisfactory (e.g. more or less 'samples')
-
Stochastic model checking enables the verification of properties in stochastic systems by quantifying their probabilities through systematic exploration of all possible system behaviors. To perform stochastic model checking we need to translate the model into a Continuous Time Markov Chain (CTMC) and specify the properties we want to verify. Dynamical properties of the resulting CTMC could then be analyzed using the stochastic model checker PRISM. PRISM describes CTMC states through a set of bounded integer variables, hence we need to discretize the state space of the system replacing the continuous variables with bounded integer variables. This leads to the following CTMC specification in PRISM input language, where model parameters are defined by Pr, Ps and Pp constants (initialized with the same values used in the previous simulations), MAX is the discretization constant, r, s and p are the model variables (initialized with the densities of the species at the fixed point) and we have three transitions describing the three possible reactions:
Stochastic model checking enables the verification of properties in stochastic systems by quantifying their probabilities through systematic exploration of all possible system behaviors. To perform stochastic model checking we need to translate the model into a Continuous Time Markov Chain (CTMC) and specify the properties we want to verify. Dynamical properties of the resulting CTMC could then be analyzed using the stochastic model checker PRISM. PRISM describes CTMC states through a set of bounded integer variables, hence we need to discretize the state space of the system replacing the continuous variables with bounded integer variables. This leads to the following CTMC specification in PRISM input language, where model parameters are defined by Pr, Ps and Pp constants (initialized with the same values used in the previous simulations), MAX is the discretization constant, r, s and p are the model variables (initialized with the densities of the species at the fixed point) and we have three transitions describing the three possible reactions:
@@ -10791,6 +10732,904 @@
Stochastic Model Checking
After a time step, the probability mass of species $s$ and $p$ is concentrated at lower values, while species $r$ has a more uniform distribution.
A graphical representation of a system of chemical reaction can also be given in terms of Petri nets. Several variants of Petri nets exist, here we consider stochastic Petri nets, a variant that allows the modeling of stochastic systems.
+
For the rock-scissors-paper model, analyzing the net through property verification is relatively straightforward and doesn't provide substantial insights. However, we will carry out this verification as a tutorial to illustrate the step-by-step approach to modeling and analyzing more complex biochemical networks.
+
The Petri net representing the system was created using the Snoopy tool, saved as ./long_range_models/rsp.spn, and subsequently imported into the Charlie tool for analysis.
+
Let's introduce some definitions, necessary for the analysis of the Petri net.
+
A Stochastic Petri net consists of places, transitions with corresponding kinetic functions, arcs and tokens. Places represent the species, transitions represent the reactions, arcs represent the flow of species between reactions and tokens represent the number of molecules of each species.
+
More formally, a stochastic Petri net is a quintuple $N = (P, T, f, \nu, m_0)$, where
+
+
$P$ and $T$ are finite, non empty, and disjoint sets. $P$ is the set of places (in the figures represented by circles). $T$ is the set of transitions (in the figures represented by rectangles);
+
$f : ((P \times T)\cup (T \times P)) \rightarrow \mathbb{N}_0$ defines the set of directed arcs, weighted by nonnegative integer values;
+
$\nu:T \rightarrow \Psi$, with $\Psi=M\rightarrow R\geq 0$, is a function that assigns to each transition a function corresponding to the computation of a kinetic formula to every possible marking $m \in M$;
+
$m_0 \in M: P \rightarrow \mathbb{N}_0$ gives the initial marking.
+
+
The stochastic Petri net for the rock-paper-scissor system is shown below, where we set the initial marking $P=20, R=50, S=30$ and made the kinetic functions correspond to the law of mass action with constants equal to the invasion rates $P_r=0.2$, $P_s=0.5$ and $P_p=0.3$:
+
+
The preset of a node $x\in P \cup T$ is defined as $•x:=\{y\in P\cup T |f(y,x) \neq 0\}$, and its post set as $x• :=\{y\in P \cup T| f(x,y) \neq 0\}$. Altogether we get four types of sets:
+
+
$•t$, the preplaces of a transition $t$, consisting of the reaction’s precursors
+
$t•$, the postplaces of a transition $t$, consisting of the reaction’s products
+
$•p$, the pretransitions of a place $p$, consisting of all reactions producing this species
+
$p•$, the posttransitions of a place $p$, consisting of all reactions consuming this species
+
+
Given a set of places $S=p_1, p_2, \ldots$, the pre-transition of a set of places $S$ is defined as $•S=•p_1 \cup •p_2 \cup \ldots$, while the post-transition of a set of places $S$ is defined as $S•=p_1• \cup p_2• \cup \ldots$.
+
In this particular net, the pretransition and posttransition of the sites are as follows:
+
+
$•P=\{Pp\}$
+
$•R=\{Pr\}$
+
$•S=\{Ps\}$
+
$P•=\{Pp,Ps\}$
+
$R•=\{Pr,Pp\}$
+
$S•=\{Ps,Pr\}$
+
+
The incidence matrix of $\mathcal{N}$ is a matrix $C:P\times T \rightarrow \mathbb{Z}$, indexed by $P$ and $T$, such that $C(p,t)=f(t,p)−f(p,t)$.
+
Loading the file containing the incidence matrix produced by Charlie:
A place vector (transition vector) is a vector $x : P \rightarrow \mathbb{Z}$, indexed by $P$ ($y : T \rightarrow \mathbb{Z}$, indexed by $T$).
+
A place vector (transition vector) is called a P-invariant (T-invariant) if it is a nontrivial nonnegative integer solution of the linear equation system $x \cdot C = 0$ ($C \cdot y = 0$).
+
If $p$ is a P-invariant, then the weighted sum of tokens across the places (using the weights specified by the p-invariant) is preserved under the firing of transitions.
+If $t$ is a T-invariant, then if you fire the transitions according to the vector $t$ (where the number of times each transition is fired is given by the corresponding entry in $t$), the net's marking will remain unchanged.
Any vector of the form $[x,x,x]$ is a place invariant. In fact it is trivial that the sum of the number of tokens in the places is constant (equal to 100).
+
Checking the file containing the P-invariants computed by Charlie:
Any vector of the form $[y,y,y]$ is a transition invariant. In fact it is trivial that applying the three transitions an equal number of times will not change the marking of the net.
+
Checking the file containing the T-invariants computed by Charlie:
All markings, which can be reached from a given marking m by any firing sequence of arbitrary length, constitute the set of reachable markings $[m⟩$.
+
A transition t is dead in the marking m if it is not enabled in any marking $m^{\prime}$ reachable from m: $\nexists m^{\prime} \in [m⟩ : m^{\prime}[t⟩$. A transition t is live if it is not dead in any marking reachable from $m_0$.
+
A marking $m$ is dead if there is no transition which is enabled in $m$.
+
A nonempty set of places $D \subseteq P$ is called siphon if $•D \subseteq D•$ (the set of pretransitions is contained in the set of posttransitions), i.e. every transition which fires tokens onto a place in this structural deadlock set, also has a preplace in this set.
+
In this particular net, we have:
+
+
$•\{P\} = \{Pp\} \subseteq \{P\}•=\{Pp, Ps\} \implies \{P\}$ is a siphon
+
$•\{R\} = \{Pr\} \subseteq \{R\}•=\{Pr, Pp\} \implies \{R\}$ is a siphon
+
$•\{S\} = \{Ps\} \subseteq \{S\}•=\{Ps, Pr\} \implies \{S\}$ is a siphon
+
$•\{R,S\}=\{Pr, Ps\} \subseteq \{R,S\}•=\{Pr, Pp, Ps\} \implies \{R,S\}$ is a siphon
+
$•\{P, R\} = \{Pp, Pr\} \subseteq \{P, R\}• = \{Pp, Ps, Pr\} \implies \{P, R\}$ is a siphon
+
$•\{P, S\} = \{Pp, Ps\} \subseteq \{P, S\}• = \{Pp, Ps, Pr\} \implies \{P, S\}$ is a siphon
Once a siphon becomes empty (i.e., contains no tokens), it cannot be refilled with tokens by the firing of any transitions (i.e. such part of the system becomes permanently disabled). This means that once a species (or a couple of species) goes extinct, it cannot be reintroduced in the system.
+
A siphon is minimal if it does not properly contain a non-empty siphon.
+
In this particular net, $\{P\}, \{R\}, \{S\}$ are minimal siphons.
+
Checking the file containing the minimal siphons computed by Charlie:
A set of places $Q \subseteq P$ is called trap if $Q• \subseteq •Q$ (the set of posttransitions is contained in the set of pretransitions), i.e. every transition which subtracts tokens from a place of the trap set, also has a postplace in this set.
+
In this particular net, we have:
+
+
$\{P\}•=\{Pp, Ps\} \nsubseteq •\{P\} = \{Pp\}\implies \{P\}$ is not a trap
+
$\{R\}•=\{Pr, Pp\} \nsubseteq •\{R\} = \{Pr\} \implies \{R\}$ is not a trap
+
$\{S\}•=\{Ps, Pr\} \nsubseteq •\{S\} = \{Ps\} \implies \{S\}$ is not a trap
+
$\{R,S\}•=\{Pr, Pp, Ps\} \nsubseteq •\{R,S\}=\{Pr, Ps\} \implies \{R,S\}$ is not a trap
+
$\{P, R\}• = \{Pp, Ps, Pr\} \nsubseteq •\{P, R\} = \{Pp, Pr\} \implies \{P, R\}$ is not a trap
+
$\{P, S\}• = \{Pp, Ps, Pr\} \nsubseteq •\{P, S\} = \{Pp, Ps\} \implies \{P, S\}$ is not a trap
The "Net Properties" dialog in Charlie provides an overview of the key properties of the net. For this particular net, they are shown below:
+
+
The properties are described in the following Table (sourced from [2]).
+
+
+
+
Abbreviation
+
Name
+
Description
+
Status
+
+
+
+
+
PUR
+
pure
+
$\forall x, y \in P \cup T : f (x, y) \neq 0 \implies f (y, x) = 0$, i.e. there are no two nodes, connected in both directions. This precludes read arcs. Then the net structure is fully represented by the incidence matrix, which is used for the calculation of the P- and T-invariants.
+
❌
+
+
+
ORD
+
ordinary
+
$\forall x, y \in P \cup T : f (x, y) \neq 0 \implies f (x, y) = 1$, i.e. all arc weights are equal to 1. This includes homogeneity. A non-ordinary Petri net cannot be live and 1-bounded at the same time.
+
❌
+
+
+
HOM
+
homogeneous
+
$\forall p \in P :t,t^{\prime} \in p• \implies f(p,t)=f(p,t^{\prime})$, i.e. all outgoing arcs of a given place have the same multiplicity.
+
✅
+
+
+
NBM
+
non blocking multiplicity
+
A net has non-blocking multiplicity if $\forall p \in P :•p \neq 0 \land min\{f(t,p)\vert \forall t \in •p\}\geq max\{f(p,t)\vert \forall t \in p•\}$, i.e. an input place causes blocking multiplicity. Otherwise, it must hold for each place: the minimum of the multiplicities of the incoming arcs is not less than the maximum of the multiplicities of the outgoing arcs.
+
✅
+
+
+
CSV
+
conservative
+
A Petri net is conservative if $\forall t \in T : \sum_{p \in •t} f(p,t) = \sum_{p \in t•} f(t,p)$ i.e. all transitions add exactly as many tokens to their postplaces as they subtract from their preplaces, or briefly, all transitions fire token-preservingly. A conservative Petri net is structurally bounded.
+
✅
+
+
+
SCF
+
structurally conflict free
+
A Petri net is static conflict free if $\forall t,t^{\prime} \in T :t \neq t^{\prime} \implies •t \cap •t^{\prime} = \empty$, i.e. there are no two transitions sharing a preplace. Transitions involved in a static conflict compete for the tokens on shared preplaces. Thus, static conflicts indicate situations where dynamic conflicts, i.e. nondeterministic choices, may occur in the system behaviour. However, it depends on the token situation whether a conflict does actually occur dynamically. There is no nondeterminism in SCF nets.
+
❌
+
+
+
FT0
+
every transition has a pre-place
+
$\forall t: •t \neq \empty$
+
✅
+
+
+
TF0
+
every transition has a post-place
+
$\forall t: t• \neq \empty$
+
✅
+
+
+
FP0
+
every place has a pre-transition
+
$\forall p: •p \neq \empty$
+
✅
+
+
+
PF0
+
every place has a post-transition
+
$\forall p: p• \neq \empty$
+
✅
+
+
+
CON
+
connected
+
A Petri net is connected if it holds for every two nodes a and b that there is an undirected path between a and b. Disconnected parts of a Petri net cannot influence each other, so they can usually be analysed separately.
+
✅
+
+
+
SC
+
strongly connected
+
A Petri net is strongly connected if it holds for every two nodes a and b that there is a directed path from a to b. Strong connectedness involves connectedness and the absence of boundary nodes. It is a necessary condition for a Petri net to be live and bounded at the same time.
+
✅
+
+
+
NC
+
netclass
+
The net structure class: 1) A Petri net is called State Machine (SM) if $\forall t\in T :\vert •t \vert =\vert t•\vert \leq 1$, i.e. there are neither forward branching nor backward branching transitions. 2) A Petri net is called Synchronisation Graph (SG) if $\forall p\in P :\vert •p\vert =\vert p•\vert \leq 1$, i.e. there are neither forward branching nor backward branching places. 3) A Petri net is called Extended Free Choice (EFC) if $\forall p,q\in P:p• ∩q• =\empty \lor p• =q•$, i.e. transitions in conflict have identical sets of preplaces. 4) A Petri net is called Extended Simple (ES) if $\forall p,q\in P:p• \cap q• =\empty \lor p• \subseteq q• \lor q• \subseteq p•$, i.e. every transition is involved in one conflict at most.
+
nES (beyond ES)
+
+
+
RKTH
+
rank theorem
+
$rank(IM) \neq \vert SCCS\vert - 1 \implies !RKTH$, i.e. if the rank of the incidence matrix is not equal to the number of strongly connected components minus one, then the rank theorem does not hold.
+
❌
+
+
+
STP
+
siphon trap property
+
The siphon trap property holds if no siphons are bad. A siphon is called bad if it does not include a trap.
+
❌
+
+
+
CPI
+
covered by P-invariants
+
A net is covered by P-invariants, shortly CPI, if every place belongs to a P-invariant.
+
✅
+
+
+
CTI
+
covered by T-invariants
+
A net is covered by T-invariants, shortly CTI, if every transition belongs to a T-invariant.
+
✅
+
+
+
SCTI
+
strongly covered by T-invariants
+
The two transitions modelling the two directions of a reversible reaction always make a minimal T-invariant and they are called trivial T-invariants. A net which is covered by nontrivial T-invariants is said to be strongly covered by T-invariants.
+
✅
+
+
+
SB
+
structurally bounded
+
A net is structurally bounded if it is bounded for any initial marking
+
✅
+
+
+
k-B
+
k-bounded
+
A place p is k-bounded (bounded for short) if there exists a positive integer number k, which represents an upper bound for the number of tokens on this place in all reachable markings of the Petri net: $\exists k \in \mathbb{N}_0 :\forall m\in [m_0⟩:m(p)\leq k$. A Petri net is k-bounded (bounded for short) if all its places are k-bounded.
+
✅ (100)
+
+
+
DCF
+
dynamically conflict free
+
Dynamic conflict is a behavioural property which refers to a marking enabling two transitions, but the firing of one transition disables the other one. The occurrence of dynamic conflicts causes alternative (branching) system behaviour, whereby the decision between these alternatives is taken nondeterministically.
+
❌
+
+
+
DSt
+
no dead state(s)
+
True if the net does not have dead states (markings).
+
❌ (3)
+
+
+
DTr
+
no dead transition(s)
+
If the net does not have dead transitions.
+
✅
+
+
+
LIV
+
live
+
A Petri net is live (strongly live) if each transition is live.
+
❌
+
+
+
REV
+
reversible
+
A Petri net is reversible if the initial marking can be reached again from each reachable marking: $\forall m \in [m_0⟩ : m_0 \in [m⟩$
+
❌
+
+
+
+
Charlie checks these properties by applying a set of rules, as shown in the log file generated by the tool:
+
+
+
+
+
+
+
+
+
In [ ]:
+
+
+
!cat./results/charlie_log.txt
+
+
+
+
+
+
+
+
+
+
+
+
+
+starts analysis with following options:
+charlie.analyzer.structural.StructuralOptionSet
+
+number of places: 3
+number of transitions: 3
+number of arcs: 9
+
+input places:
+no input places
+output places:
+no output places
+input transitions:
+no input transitions
+output transitions:
+no output transitions
+
+Structural coupled conflict sets:
+
+1 |0.Pp :1,
+ |1.Pr :1,
+ |2.Ps :1
+
+Structural equal conflict sets:
+
+1 |0.Pp :1
+2 |1.Pr :1
+3 |2.Ps :1
+
+time: 0 m 0 s
+
+
+
+Applying rule:
+CSV => k-B
+
+
+Applying rule:
+CSV => SB
+
+
+Applying rule:
+SC => CON
+
+
+Applying rule:
+CSV => CPI
+
+
+Applying rule:
+CPI => k-B
+
+
+Applying rule:
+SB => k-B
+
+
+Applying rule:
+CPI => SB
+
+Analyzer: Rank of Matrix Analyzer
+start time: 19/08/24, 15:09
+starts analysis with following options:
+charlie.analyzer.invariant.RankIncidenceMatrixOptionSet
+Rank of the incidence matrix: 2
+time: 00:00:00:013
+
+
+
+Applying rule:
+rank(IM) != |SCCS| - 1 => !RKTH
+
+Analyzer: Structurally Bounded Analyzer
+start time: 19/08/24, 15:09
+starts analysis with following options:
+GUI.app_components.StructurallyBoundedOptionSet
+time: 00:00:00:013
+
+Analyzer: InvariantAnalyzer
+start time: 19/08/24, 15:10
+starts analysis with following options:
+Invariant Options:
+compute: P-Invariants
+delete Trivial Invariants: no
+check coverage: yes
+check extended coverage: no
+enable MCSC: no
+Invariant Analyzer: computing P-Invariants
+minimal semipositive place invariants:
+1
+time: 00:00:00:014
+
+Analyzer: InvariantAnalyzer
+start time: 19/08/24, 15:10
+starts analysis with following options:
+Invariant Options:
+compute: T-Invariants
+delete Trivial Invariants: no
+check coverage: yes
+check extended coverage: yes
+enable MCSC: no
+Invariant Analyzer: computing T-Invariants
+check coverage:
+net is covered by T-Invariants
+net does is support strong Coverage by T Invariants
+minimal semipositive transition invariants:
+1
+time: 00:00:00:015
+
+Analyzer: Trap Analyzer
+start time: 19/08/24, 15:10
+starts analysis with following options:
+TrapOptions:
+compute: true
+export: false
+exportFile: not set!
+properSets: false
+Trap Analyzer:
+computed minimal traps
+
+minimal traps:
+1 minimal traps computed in 00:00:00:000
+time: 00:00:00:008
+
+Analyzer: Siphon Analyzer
+start time: 19/08/24, 15:10
+starts analysis with following options:
+siphon options
+Siphon Analyzer:
+ computing siphons
+
+STP is not valid
+ counter examples:
+ siphon:
+ |0.P :1
+ is a bad siphon
+1 siphons computed 00:00:00:000
+time: 00:00:00:000
+
+Analyzer: RGraph Simple Construction
+start time: 19/08/24, 15:14
+starts analysis with following options:
+used construction options:
+firing rule: single
+boundedness check: yes
+maximal construction depth: none
+reduction: none
+initial marking:(P: 20 | R: 50 | S: 30)
+reachability graph analyzer:
+computing rechability graph using simple firing rule
+transition not live:
+ |0.Pp :1,
+ |1.Pr :1,
+ |2.Ps :1
+transition dead at m0:
+ empty set
+the net is not live
+is not persistent
+the net is not safe
+number of dead states: 3
+filter for dead states:
+dead state 1: P== 100
+dead state 2: R== 100
+dead state 3: S== 100
+-- reachability graph constructed in 00:00:52:162--
+used construction options:
+firing rule: single
+boundedness check: yes
+maximal construction depth: none
+reduction: none
+initial marking:(P: 20 | R: 50 | S: 30)
+states: 5151
+bound: 100
+edges: 14850
+#scc: 301
+#terminal scc: 3
+time: 00:00:52:162
+
+
+
+Applying rule:
+DSt => !LIV
+
+
+Applying rule:
+!LIV & SC & CTI & rank(IM) < |SEQS| => !k-B
+
+
+Results:
+PUR ORD HOM NBM CSV SCF FT0 TF0 FP0 PF0 CON SC NC
+ N N Y Y Y N Y Y Y Y Y Y nES
+ RKTH STP CPI CTI SCTI SB k-B 1-B DCF DSt DTr LIV REV
+ N N Y Y Y Y 100 N N 3 Y N N
+ SSI RNK SCCS SEQS
+ Y 2 1 3
+
+
+
+
+
+
+
+
+
+
+
+
Since a stochastic Petri net can be translated into a CTMC, Charlie provides the possibility to export the net in the PRISM input language. Let's check whether the PRISM model produced by Charlie corresponds to the one we manually created:
+
+
+
+
+
+
+
+
+
In [ ]:
+
+
+
!cat./long_range_models/rsp.sm
+
+
+
+
+
+
+
+
+
+
+
+
+
//created by Snoopy 2
+//date: Sun Aug 18 14:58:29 2024
+
+ctmc
+
+const int Max;
+const int N;
+module rsp
+
+S: [ 0..Max ] init 30*N;
+R: [ 0..Max ] init 50*N;
+P: [ 0..Max ] init 20*N;
+
+
+[Pp]
+(P > 0) & (R > 0)
+ -> (0.3) * P * R :
+(P' = P+1) & (R' = R-1);
+
+
+[Pr]
+(R > 0) & (S > 0)
+ -> (0.2) * R * S :
+(R' = R+1) & (S' = S-1);
+
+
+[Ps]
+(P > 0) & (S > 0)
+ -> (0.5) * S * P :
+(P' = P-1) & (S' = S+1);
+
+
+
+
+
+endmodule
+
+
+
+
+
+
+
+
+
+
+
+
+
Aside from the missing constraints on the variables' maximum values, the model is identical to the one we manually created.
[1] Frean, Marcus, and Edward R. Abraham. "Rock–scissors–paper and the survival of the weakest." Proceedings of the Royal Society of London. Series B: Biological Sciences 268.1474 (2001): 1323-1327.
+
[2] Heiner, Monika, David Gilbert, and Robin Donaldson. "Petri nets for systems and synthetic biology." International school on formal methods for the design of computer, communication and software systems. Berlin, Heidelberg: Springer Berlin Heidelberg, 2008. 215-264.
+
diff --git a/long_range_simulations.ipynb b/long_range_simulations.ipynb
index 115f986..75ae7f7 100644
--- a/long_range_simulations.ipynb
+++ b/long_range_simulations.ipynb
@@ -8,6 +8,17 @@
"\n",
"This notebook simulates the evolution of a three-species system with long-range dispersal.\n",
"\n",
+ "**Outline**\n",
+ "\n",
+ "- [1. Discrete-time model](#1.-Discrete-time-model)\n",
+ " - [1.1. Finite population size](#1.1.-Finite-population-size)\n",
+ " - [1.2. Large population size](#1.2.-Large-population-size)\n",
+ "- [2. Continuous-time model](#2.-Continuous-time-model)\n",
+ "- [3. Stochastic simulation of chemical reactions](#3.-Stochastic-simulation-of-chemical-reactions)\n",
+ "- [4. Stochastic model checking](#4.-Stochastic-model-checking)\n",
+ "- [5. Petri net analysis](#5.-Petri-net-analysis)\n",
+ "- [6. References](#6.-References)\n",
+ "\n",
"Importing the necessary libraries:"
]
},
@@ -25,6 +36,7 @@
"import plotly.graph_objects as go\n",
"from matplotlib import colormaps\n",
"from scipy.integrate import odeint\n",
+ "from sympy import symbols, Matrix, Eq, solve\n",
"np.random.seed(0)"
]
},
@@ -32,8 +44,8 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "## Discrete-time model\n",
- "### Finite population\n",
+ "## 1. Discrete-time model\n",
+ "### 1.1. Finite population size\n",
"\n",
"We consider a model world that has $N$ available sites. The sites are occupied by three species, namely species $r$ (rock), $s$ (scissors) and $p$ (paper), which occur in the proportions $n_r$ , $n_s$ and $n_p$ (with $n_r + n_s + n_p = 1$). Two sites are chosen at each time-step. The occupant of the first replicates into the second with a given probability - individual of species $r$ can invade a species $s$ with probability $P_r$, a species $s$ invades a species $p$ with probability $P_s$, a species $p$ invades a species $r$ with probability $P_p$ and all other invasion probabilities are zero.\n",
"\n",
@@ -540,7 +552,7 @@
"source": [
"The weakest competitor is most likely to survive.\n",
"\n",
- "### Large population size\n",
+ "### 1.2. Large population size\n",
"\n",
"In the limit of large $N$, the rate of change of species population density is given by the mean-field equations:\n",
"\n",
@@ -878,7 +890,7 @@
"source": [
"In the limit that the total number of sites is large the populations move along a periodic orbit around the fixed point.\n",
"\n",
- "## Continuous-time model\n",
+ "## 2. Continuous-time model\n",
"\n",
"To enhance accuracy, we simulate the system's evolution by solving the differential equations that define it.\n",
"\n",
@@ -1199,7 +1211,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "## Stochastic Simulation of Chemical Reactions\n",
+ "## 3. Stochastic simulation of chemical reactions\n",
"\n",
"While ODEs are deterministic and do not account for fluctuations in population densities, stochastic simulation methods offer greater accuracy, particularly when analyzing reaction systems with small quantities of molecules. \n",
"\n",
@@ -2097,74 +2109,14 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "Oscillations are more frequent and regular than in the stochastic simulation.\n",
- "\n",
- "## Voters model\n",
- "\n",
- "TODO: "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 20,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Info: Direct method is selected to perform stochastic simulations.\n",
- "Parsing file: /Users/irenetesta/Stochpy/pscmodels/ImmigrationDeath.psc\n",
- "Info: No reagents have been fixed\n",
- "Parsing file: ./long_range_models/voters_model.psc\n",
- "Info: No reagents have been fixed\n",
- "['R', 'S', 'P']\n"
- ]
- }
- ],
- "source": [
- "smod = stochpy.SSA(IsQuiet=False)\n",
- "smod.Model(model_file=\"voters_model.psc\",dir=\"./long_range_models/\")\n",
- "smod.ShowSpecies()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 32,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Info: 100 trajectories are generated\n",
- "Info: Time simulation output of the trajectories is stored at voters_model(trajectory).dat in directory: /Users/irenetesta/Stochpy/temp\n",
- "Info: Simulation time: 1.4872791767120361 *** WARNING ***: No regular grid is created yet. Use GetRegularGrid(n_samples) if averaged results are unsatisfactory (e.g. more or less 'samples')\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAHdCAYAAAD7I7hZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAACBbUlEQVR4nO3dd3xT1d8H8E/SNk3pbumE0kLLrOw9yyh7SkFxgiD6KEPkhwNFCzhQUEChLGUJKnsjW0BlbwQUAVlCSyvQCXTlPH+UREKb9Ka9mf28X68QenNy77knyc03ZyqEEAJEREREDkpp7QwQERERmRODHSIiInJoDHaIiIjIoTHYISIiIofGYIeIiIgcGoMdIiIicmgMdoiIiMihMdghIiIih8Zgh4iIiBwagx2yGXv27IFCocCePXssdsxFixZBoVDgypUrFjtmWda2bVs88cQT1s6GTtu2bdG2bVuLHU+hUGD8+PEWO96jBg0ahIiICFn36Uifn4iICAwaNEj3tzWuR/bqypUrUCgU+OKLL8x+rPHjx0OhUJj8PIcNdmbNmgWFQoGmTZtaOytUxixfvhzPP/88qlatCoVCYfTLNDs7G++88w5CQ0Ph5uaGpk2bYseOHUWm3b9/P1q1aoVy5cohODgYI0eORGZmpix53r9/P8aPH4/U1FRZ9mdLzp07h/HjxzvEF7K1fPrpp1i3bp21s1FmzJo1C4sWLbJ2Ngr56aefrBasl5pwUC1atBARERECgLhw4YK1s0MS5Ofni/v374v8/HyLHTMvL0/cv39faDQa2fYZExMjPDw8RLt27YSvr6+IiYkxmHbAgAHC2dlZjBkzRsydO1c0b95cODs7i19//VUv3YkTJ4RarRb169cXs2fPFu+//75wdXUVXbp0kSXPU6ZMEQDE5cuXZdmfITExMSI6Otqsx3jcypUrBQCxe/fuQo9lZ2eL7Oxsi+Xl/v37Ijc312LHe9TAgQNFeHh4iZ7r7u4uBg4cWGi7OT4/1hIeHq53jta4HmlFR0cbvW5Yy7Bhw0RRYcPly5cFADFlyhSz5yE+Pr7IPBTH2ZqBlrlcvnwZ+/fvx5o1a/Dqq6/i+++/R3x8vEXzoNFokJOTA7VabdHj2jOlUmnx8nJycoKTk5Os+1yyZAkqVKgApVJptMnm8OHDWLZsGaZMmYIxY8YAAF588UU88cQTePvtt7F//35d2vfeew++vr7Ys2cPvLy8ABRUuw8dOhTbt29Hp06dZD2HskKlUln0eI52PTDH58dWSL0e3bt3D+XKlbNAjqg0HLIZ6/vvv4evry+6d++Ofv364fvvv9c9lpubCz8/P7z00kuFnpeeng61Wq374gEKmhni4+MRFRUFV1dXhIWF4e2330Z2drbecxUKBYYPH47vv/8e0dHRcHV1xdatWwEAX3zxBVq0aAF/f3+4ubmhYcOGWLVqVaHj379/HyNHjkT58uXh6emJXr164caNG0W289+4cQODBw9GUFAQXF1dER0djQULFkgqnx07dqBVq1bw8fGBh4cHqlevjvfee0/3uLatevny5XjvvfcQHBwMd3d39OrVC9evXy+0v0OHDqFLly7w9vZGuXLlEBMTg3379hVKd+PGDQwZMgShoaFwdXVF5cqV8dprryEnJ0fvuI+3kUvZf0ZGBkaNGoWIiAi4uroiMDAQHTt2xPHjx42WRVF9DiIiItCjRw/89ttvaNKkCdRqNapUqYLvvvuuuKIFAISFhUGpLP6jtWrVKjg5OeGVV17RbVOr1RgyZAgOHDigK+v09HTs2LEDzz//vC7QAQoCIw8PD6xYsaLYY82YMQPR0dEoV64cfH190ahRI/zwww8ACtrA33rrLQBA5cqVoVAo9MokLy8PH330ESIjI+Hq6oqIiAi89957hT4DALBlyxbExMTA09MTXl5eaNy4se44jzp37hzatWuHcuXKoUKFCpg8ebLe4zk5Ofjwww/RsGFDeHt7w93dHa1bt8bu3bsL7WvZsmVo2LCh7pi1a9fGV199BaDg9e3fvz8AoF27drpz077Hiuqz8+DBA4wfPx7VqlWDWq1GSEgI+vbti0uXLhkt46NHj6Jz584oX7483NzcULlyZQwePFgvzeOfZW3/g7/++gvPP/88vL29ERAQgA8++ABCCFy/fh29e/eGl5cXgoOD8eWXX+rtz1CfGan9TaRcmxQKBbKysrB48WJd+Wn7thg6/qxZs3TXwdDQUAwbNqxQE6m2/1Zx7wXA+PvXVEIIfPzxx6hYsSLKlSuHdu3a4ezZs4XSFVWG2jwfO3YMbdq0Qbly5XTXTqnfFQCwdOlSNGnSRHc+bdq0wfbt2wEUXH/Onj2LvXv36srbWFP4o/1lEhISUKVKFZQrVw6dOnXC9evXIYTARx99hIoVK8LNzQ29e/fGnTt3Cu1ny5YtaN26Ndzd3eHp6Ynu3bvrlcugQYOQkJAAALp8FdV3Zt68ebprRePGjXHkyJFCaX7++WfdsXx8fNC7d2/88ccfhdL99ttvaNy4MdRqNSIjIzF37lyD5VAsuauYbEGNGjXEkCFDhBBC/PLLLwKAOHz4sO7xwYMHCx8fn0LV14sXLxYAxJEjR4QQBdWYnTp1EuXKlROjRo0Sc+fOFcOHDxfOzs6id+/ees8FIGrWrCkCAgLEhAkTREJCgjhx4oQQQoiKFSuK119/XcycOVNMnTpVNGnSRAAQmzZt0tvHU089JQCIF154QSQkJIinnnpK1K1bVwAQ8fHxunRJSUmiYsWKIiwsTEycOFHMnj1b9OrVSwAQ06ZNM1o2Z86cESqVSjRq1Eh89dVXYs6cOWLMmDGiTZs2ujS7d+8WAETt2rVFnTp1xNSpU8W7774r1Gq1qFatmrh3754u7a5du4RKpRLNmzcXX375pZg2bZqoU6eOUKlU4tChQ7p0N27cEKGhobqynDNnjvjggw9EzZo1xd27d/WO+2hzg9T9P/vss0KlUonRo0eLb7/9Vnz++eeiZ8+eYunSpUbLY+HChYWab8LDw0X16tVFUFCQeO+998TMmTNFgwYNhEKhEGfOnDG6v8cZq46OjY0VNWvWLLR9586dAoDYsGGDEEKI3377TQAQy5cvL5S2VatWokGDBkbzMG/ePAFA9OvXT8ydO1d89dVXYsiQIWLkyJFCCCFOnTolnnnmGd37Z8mSJWLJkiUiMzNTCFHQ/KF9fkJCgnjxxRcFANGnTx+94yxcuFAoFArxxBNPiE8++UQkJCSIl19+Wbzwwgu6NDExMSI0NFSEhYWJN954Q8yaNUu0b99eABA//fSTLl1KSooICQkRo0ePFrNnzxaTJ08W1atXFy4uLrrPlRBCbN++XQAQHTp0EAkJCSIhIUEMHz5c9O/fXwghxKVLl8TIkSMFAPHee+/pzi0pKUmXn0dfn7y8PNGhQwcBQAwYMEDMnDlTTJo0SbRv316sW7fOYBnfunVL+Pr6imrVqokpU6aIb775Rrz//vuFXt/HP8vaKvl69eqJZ555RsyaNUt0795dABBTp04V1atXF6+99pqYNWuWaNmypQAg9u7dq1fmj79/hSj6s1RUM5aUa9OSJUuEq6uraN26ta789u/fb/D42nOKjY0VM2bMEMOHDxdOTk6icePGIicnR5dO6nuhuPevqcaNGycAiG7duomZM2eKwYMHi9DQUFG+fHm9ZqyiyjAmJkYEBweLgIAAMWLECDF37lyxbt06k74rxo8fLwCIFi1aiClTpoivvvpKPPvss+Kdd94RQgixdu1aUbFiRVGjRg1deW/fvt3g+WibkOrVqydq1aolpk6dKsaNGydUKpVo1qyZeO+990SLFi3E119/LUaOHCkUCoV46aWX9Pbx3XffCYVCIbp06SJmzJghPv/8cxERESF8fHx0r+3+/ftFx44dBQBdvpYsWaKXh/r164uoqCjx+eefi8mTJ4vy5cuLihUr6r3uO3bsEM7OzqJatWpi8uTJYsKECaJ8+fLC19dX7310+vRp4ebmJipVqiQmTZokPvroIxEUFCTq1KlTomYshwt2jh49KgCIHTt2CCGE0Gg0omLFiuKNN97Qpdm2bZsAIDZu3Kj33G7duokqVaro/l6yZIlQKpWF+k/MmTNHABD79u3TbQMglEqlOHv2bKE8PRocCCFETk6OeOKJJ0T79u11244dOyYAiFGjRumlHTRoUKEL5JAhQ0RISIj4999/9dIOGDBAeHt7Fzreo6ZNmyYAiJSUFINptB/yChUqiPT0dN32FStWCADiq6++EkIUlG3VqlVF586d9drs7927JypXriw6duyo2/biiy8KpVKpCyQfpX3u4xcXU/bv7e0thg0bZvCcDDEU7AAQv/zyi25bcnKycHV1Ff/73/9M2r+xYCc6OlrvPaB19uxZAUDMmTNHCPFfn5NH86PVv39/ERwcbDQPvXv3LrafjKE+OydPnhQAxMsvv6y3fcyYMQKA+Pnnn4UQQqSmpgpPT0/RtGlTcf/+fb20j752MTExAoD47rvvdNuys7NFcHCwiIuL023Ly8sr9GPk7t27IigoSAwePFi37Y033hBeXl4iLy/P4LkZ67PzeLCzYMECXaDxOGP9UtauXav3Q8kQQ8HOK6+8otuWl5cnKlasKBQKhfjss8902+/evSvc3Nz0vpBLG+xIuTYJYbjPzuPHT05OFiqVSnTq1Emvr8vMmTMFALFgwQLdNqnvBSnvX6m0+evevbve6/nee+8JAJKCnUc/m1pSvysuXLgglEqlePLJJwv1BXo0P6b02dEGGgEBASI1NVW3fezYsQKA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8/DwgIeHB9atW4fs7OxCjx85cgQAsHDhQiQmJur+/vXXX/Hiiy/ijTfewLlz5zB37lwsWrQIn3zyid7zP/jgA8TFxeHUqVN47rnnMGDAAPzxxx8AgK+//hobNmzAihUrcP78eXz//fd6wRQROR4uBEpEVrF69WoMHToU9+/fR4MGDRATE4MBAwagTp06AApqaNauXYs+ffronhMbG4sOHTpg7Nixum1Lly7F22+/jZs3b+qe93//93+YPXu2Lk2zZs3QoEEDzJo1CyNHjsTZs2exc+dOKBQKy5wsEVkVa3aIyCri4uJw8+ZNbNiwAV26dMGePXvQoEEDLFq0yOBzTp06hYkTJ+pqhjw8PDB06FAkJibi3r17unTNmzfXe17z5s11NTuDBg3CyZMnUb16dYwcORLbt283y/kRke1gsENEVqNWq9GxY0d88MEH2L9/PwYNGoT4+HiD6TMzMzFhwgScPHlSd/v9999x4cIFqNVqScds0KABLl++jI8++gj379/HU089hX79+sl1SkRkgxjsEJHNqFWrFrKysgAALi4uyM/P13u8QYMGOH/+PKKiogrdlMr/LmcHDx7Ue97BgwdRs2ZN3d9eXl54+umn8c0332D58uVYvXo17ty5Y8YzIyJr4tBzIrK427dvo3///hg8eDDq1KkDT09PHD16FJMnT0bv3r0BABEREdi1axdatmwJV1dX+Pr64sMPP0SPHj1QqVIl9OvXD0qlEqdOncKZM2fw8ccf6/a/cuVKNGrUCK1atcL333+Pw4cPY/78+QCAqVOnIiQkBPXr14dSqcTKlSsRHBwMHx8faxQFEVmCICKysAcPHoh3331XNGjQQHh7e4ty5cqJ6tWri3Hjxol79+4JIYTYsGGDiIqKEs7OziI8PFz33K1bt4oWLVoINzc34eXlJZo0aSLmzZunexyASEhIEB07dhSurq4iIiJCLF++XPf4vHnzRL169YS7u7vw8vISHTp0EMePH7fYuROR5XE0FhE5lKJGcRFR2cY+O0REROTQGOwQERGRQ2MHZSJyKGyZJ6LHsWaHiIiIHBqDHSIiInJoDHaIiIjIoTHYISIiIofGYIeIiIgcGoMdIiIicmgMdoiIiMihMdghIiIih8Zgh4iIiBza/wMiWrLATzehsQAAAABJRU5ErkJggg==",
- "text/plain": [
- "