jinns 0.5.2__tar.gz → 0.6.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- jinns-0.6.1/Notebooks/ODE/1D_Generalized_Lotka_Volterra.ipynb +761 -0
- jinns-0.6.1/Notebooks/ODE/1D_Generalized_Lotka_Volterra_seq2seq.ipynb +804 -0
- jinns-0.6.1/Notebooks/ODE/systems_biology_informed_neural_network.ipynb +1247 -0
- {jinns-0.5.2 → jinns-0.6.1}/Notebooks/PDE/1D_non_stationary_Burger.ipynb +2 -2
- {jinns-0.5.2 → jinns-0.6.1}/Notebooks/PDE/1D_non_stationary_Fisher_KPP_Bounded_Domain.ipynb +21 -21
- jinns-0.6.1/Notebooks/PDE/2D_Heat_inverse_problem.ipynb +765 -0
- {jinns-0.5.2 → jinns-0.6.1}/Notebooks/PDE/2D_Navier_Stokes_PipeFlow.ipynb +7 -7
- jinns-0.6.1/Notebooks/PDE/2D_Navier_Stokes_PipeFlow_Metamodel.ipynb +1037 -0
- {jinns-0.5.2 → jinns-0.6.1}/Notebooks/PDE/2D_Navier_Stokes_PipeFlow_SoftConstraints.ipynb +9 -9
- jinns-0.6.1/Notebooks/PDE/2D_Poisson_inverse_problem.ipynb +728 -0
- {jinns-0.5.2 → jinns-0.6.1}/Notebooks/PDE/2D_non_stationary_OU.ipynb +3 -3
- jinns-0.6.1/Notebooks/PDE/Reaction_Diffusion_2D_heterogenous_model.ipynb +1833 -0
- {jinns-0.5.2 → jinns-0.6.1}/Notebooks/PDE/imperfect_modeling_sobolev_reg.ipynb +117 -118
- jinns-0.6.1/Notebooks/Tutorials/implementing_your_own_PDE_problem.ipynb +718 -0
- {jinns-0.5.2 → jinns-0.6.1}/PKG-INFO +4 -2
- {jinns-0.5.2 → jinns-0.6.1}/README.md +3 -1
- {jinns-0.5.2 → jinns-0.6.1}/doc/source/conf.py +6 -1
- {jinns-0.5.2 → jinns-0.6.1}/doc/source/index.rst +22 -0
- {jinns-0.5.2 → jinns-0.6.1}/doc/source/loss.rst +2 -2
- jinns-0.6.1/doc/source/solve.rst +6 -0
- {jinns-0.5.2 → jinns-0.6.1}/doc/source/solver.rst +2 -2
- {jinns-0.5.2 → jinns-0.6.1}/jinns/loss/_DynamicLoss.py +109 -323
- {jinns-0.5.2 → jinns-0.6.1}/jinns/loss/_DynamicLossAbstract.py +97 -81
- {jinns-0.5.2 → jinns-0.6.1}/jinns/loss/_LossODE.py +80 -17
- {jinns-0.5.2 → jinns-0.6.1}/jinns/loss/_LossPDE.py +234 -93
- {jinns-0.5.2 → jinns-0.6.1}/jinns/loss/__init__.py +0 -2
- {jinns-0.5.2 → jinns-0.6.1}/jinns/loss/_boundary_conditions.py +54 -66
- {jinns-0.5.2 → jinns-0.6.1}/jinns/loss/_operators.py +34 -50
- {jinns-0.5.2 → jinns-0.6.1}/jinns/solver/_rar.py +1 -1
- {jinns-0.5.2 → jinns-0.6.1}/jinns/solver/_seq2seq.py +4 -8
- {jinns-0.5.2 → jinns-0.6.1}/jinns/utils/__init__.py +1 -0
- jinns-0.6.1/jinns/utils/_optim.py +147 -0
- {jinns-0.5.2 → jinns-0.6.1}/jinns/utils/_pinn.py +77 -108
- {jinns-0.5.2 → jinns-0.6.1}/jinns/utils/_spinn.py +25 -30
- {jinns-0.5.2 → jinns-0.6.1}/jinns/utils/_utils.py +45 -1
- {jinns-0.5.2 → jinns-0.6.1}/jinns.egg-info/PKG-INFO +4 -2
- {jinns-0.5.2 → jinns-0.6.1}/jinns.egg-info/SOURCES.txt +4 -3
- {jinns-0.5.2 → jinns-0.6.1}/tests/solver_tests/test_imperfect_sobolev_x32.py +3 -6
- {jinns-0.5.2 → jinns-0.6.1}/tests/solver_tests_spinn/test_ReactionDiffusion_nonhomo_x64.py +3 -1
- jinns-0.5.2/Notebooks/ODE/1D_Generalized_Lotka_Volterra.ipynb +0 -761
- jinns-0.5.2/Notebooks/ODE/1D_Generalized_Lotka_Volterra_seq2seq.ipynb +0 -734
- jinns-0.5.2/Notebooks/ODE/systems_biology_informed_neural_network.ipynb +0 -1258
- jinns-0.5.2/Notebooks/PDE/1D_non_stationary_Burger_JointEstimation_Vanilla.ipynb +0 -740
- jinns-0.5.2/Notebooks/PDE/1D_non_stationary_OU.ipynb +0 -701
- jinns-0.5.2/Notebooks/PDE/2D_Navier_Stokes_PipeFlow_Metamodel.ipynb +0 -845
- jinns-0.5.2/Notebooks/PDE/Reaction_Diffusion_2D_heterogenous_model.ipynb +0 -1836
- jinns-0.5.2/Notebooks/Tutorials/implementing_your_own_PDE_problem.ipynb +0 -714
- jinns-0.5.2/doc/source/PinnSolver.rst +0 -11
- {jinns-0.5.2 → jinns-0.6.1}/.gitignore +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/.gitlab-ci.yml +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/.pre-commit-config.yaml +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/LICENSE +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/Notebooks/PDE/2d_nonstatio_ou_standardsampling.png +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/Notebooks/PDE/OU_1D_nonstatio_solution_grid.npy +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/Notebooks/PDE/burger_solution_grid.npy +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/doc/Makefile +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/doc/source/boundary_conditions.rst +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/doc/source/data.rst +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/doc/source/dynamic_loss.rst +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/doc/source/fokker_planck.qmd +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/doc/source/loss_ode.rst +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/doc/source/loss_pde.rst +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/doc/source/math_pinn.qmd +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/doc/source/operators.rst +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/doc/source/param_estim_pinn.qmd +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/doc/source/rar.rst +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/doc/source/seq2seq.rst +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/doc/source/utils.rst +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/jinns/__init__.py +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/jinns/data/_DataGenerators.py +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/jinns/data/__init__.py +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/jinns/data/_display.py +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/jinns/solver/__init__.py +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/jinns/solver/_solve.py +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/jinns.egg-info/dependency_links.txt +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/jinns.egg-info/requires.txt +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/jinns.egg-info/top_level.txt +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/pyproject.toml +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/setup.cfg +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/tests/conftest.py +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/tests/dataGenerator_tests/test_CubicMeshPDENonStatio.py +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/tests/dataGenerator_tests/test_CubicMeshPDEStatio.py +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/tests/dataGenerator_tests/test_DataGeneratorODE.py +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/tests/runtests.sh +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/tests/solver_tests/test_Burger_x32.py +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/tests/solver_tests/test_Burger_x64.py +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/tests/solver_tests/test_Fisher_x32.py +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/tests/solver_tests/test_Fisher_x64.py +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/tests/solver_tests/test_GLV_x32.py +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/tests/solver_tests/test_GLV_x64.py +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/tests/solver_tests/test_NSPipeFlow_x32.py +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/tests/solver_tests/test_NSPipeFlow_x64.py +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/tests/solver_tests/test_OU2D_x32.py +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/tests/solver_tests_spinn/test_Burger_x32.py +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/tests/solver_tests_spinn/test_Fisher_x32.py +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/tests/solver_tests_spinn/test_NSPipeFlow_x32_spinn.py +0 -0
- {jinns-0.5.2 → jinns-0.6.1}/tests/solver_tests_spinn/test_OU2D_x32.py +0 -0
|
@@ -0,0 +1,761 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cells": [
|
|
3
|
+
{
|
|
4
|
+
"cell_type": "markdown",
|
|
5
|
+
"id": "40925fec",
|
|
6
|
+
"metadata": {},
|
|
7
|
+
"source": [
|
|
8
|
+
"# Generalized Lotka Volterra"
|
|
9
|
+
]
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"cell_type": "markdown",
|
|
13
|
+
"id": "b825efcb",
|
|
14
|
+
"metadata": {},
|
|
15
|
+
"source": [
|
|
16
|
+
"We consider a Generalized Lotka Volterra system with $3$ populations\n",
|
|
17
|
+
"$$\n",
|
|
18
|
+
"\\frac{\\partial}{\\partial t}u_i(t) = r_iu_i(t) - \\sum_{j\\neq i}\\alpha_{ij}u_j(t)\n",
|
|
19
|
+
"-\\alpha_{i,i}u_i(t) + c_iu_i(t) + \\sum_{j \\neq i} c_ju_j(t), i\\in\\{1, 2, 3\\}\n",
|
|
20
|
+
"$$"
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"cell_type": "markdown",
|
|
25
|
+
"id": "f337b94d",
|
|
26
|
+
"metadata": {},
|
|
27
|
+
"source": [
|
|
28
|
+
"More information on this ODE system can be found at [https://stefanoallesina.github.io/Sao_Paulo_School/intro.html#basic-formulation](https://stefanoallesina.github.io/Sao_Paulo_School/intro.html#basic-formulation)"
|
|
29
|
+
]
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"cell_type": "code",
|
|
33
|
+
"execution_count": 1,
|
|
34
|
+
"id": "8bf8bebc-b311-4eb4-ad63-11447f62b280",
|
|
35
|
+
"metadata": {},
|
|
36
|
+
"outputs": [],
|
|
37
|
+
"source": [
|
|
38
|
+
"%load_ext autoreload\n",
|
|
39
|
+
"%autoreload 2\n",
|
|
40
|
+
"%matplotlib inline"
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"cell_type": "markdown",
|
|
45
|
+
"id": "ddee93b7",
|
|
46
|
+
"metadata": {},
|
|
47
|
+
"source": [
|
|
48
|
+
"Float64 and GPU settings"
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"cell_type": "code",
|
|
53
|
+
"execution_count": 2,
|
|
54
|
+
"id": "5cdc87e2",
|
|
55
|
+
"metadata": {},
|
|
56
|
+
"outputs": [],
|
|
57
|
+
"source": [
|
|
58
|
+
"#import os; os.environ[\"JAX_ENABLE_X64\"] = \"TRUE\" # comment/uncomment to disable/enable float64 for JAX\n",
|
|
59
|
+
"#import os; os.environ[\"CUDA_VISIBLE_DEVICES\"]=\"\" # If uncommented then GPU is disable"
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"cell_type": "markdown",
|
|
64
|
+
"id": "e42b1b48",
|
|
65
|
+
"metadata": {},
|
|
66
|
+
"source": [
|
|
67
|
+
"Import our package"
|
|
68
|
+
]
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"cell_type": "code",
|
|
72
|
+
"execution_count": 3,
|
|
73
|
+
"id": "fbdd16f7",
|
|
74
|
+
"metadata": {
|
|
75
|
+
"scrolled": true
|
|
76
|
+
},
|
|
77
|
+
"outputs": [],
|
|
78
|
+
"source": [
|
|
79
|
+
"import jinns"
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"cell_type": "markdown",
|
|
84
|
+
"id": "09955058",
|
|
85
|
+
"metadata": {},
|
|
86
|
+
"source": [
|
|
87
|
+
"Import other dependencies"
|
|
88
|
+
]
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"cell_type": "code",
|
|
92
|
+
"execution_count": 4,
|
|
93
|
+
"id": "3abe5254-7556-424e-a57e-d364d67244a1",
|
|
94
|
+
"metadata": {},
|
|
95
|
+
"outputs": [],
|
|
96
|
+
"source": [
|
|
97
|
+
"import jax\n",
|
|
98
|
+
"from jax import random, vmap\n",
|
|
99
|
+
"import jax.numpy as jnp\n",
|
|
100
|
+
"import equinox as eqx\n",
|
|
101
|
+
"\n",
|
|
102
|
+
"import matplotlib.pyplot as plt\n",
|
|
103
|
+
"\n",
|
|
104
|
+
"key = random.PRNGKey(2)\n",
|
|
105
|
+
"key, subkey = random.split(key)"
|
|
106
|
+
]
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"cell_type": "markdown",
|
|
110
|
+
"id": "2bfbd766",
|
|
111
|
+
"metadata": {},
|
|
112
|
+
"source": [
|
|
113
|
+
"Create the neural network architecture for the PINN with `equinox`. Note that we will use the same architecture for the 3 populations."
|
|
114
|
+
]
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"cell_type": "code",
|
|
118
|
+
"execution_count": 5,
|
|
119
|
+
"id": "9396d007-04f1-4893-a3c8-c58c36845ee0",
|
|
120
|
+
"metadata": {},
|
|
121
|
+
"outputs": [],
|
|
122
|
+
"source": [
|
|
123
|
+
"eqx_list = [\n",
|
|
124
|
+
" [eqx.nn.Linear, 1, 20],\n",
|
|
125
|
+
" [jax.nn.tanh],\n",
|
|
126
|
+
" [eqx.nn.Linear, 20, 20],\n",
|
|
127
|
+
" [jax.nn.tanh],\n",
|
|
128
|
+
" [eqx.nn.Linear, 20, 20],\n",
|
|
129
|
+
" [jax.nn.tanh],\n",
|
|
130
|
+
" [eqx.nn.Linear, 20, 1],\n",
|
|
131
|
+
" [jnp.exp]\n",
|
|
132
|
+
"]\n",
|
|
133
|
+
"key, subkey = random.split(key)\n",
|
|
134
|
+
"u = jinns.utils.create_PINN(subkey, eqx_list, \"ODE\")"
|
|
135
|
+
]
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"cell_type": "code",
|
|
139
|
+
"execution_count": 6,
|
|
140
|
+
"id": "1e47cbca-3af2-4ab2-a379-4b763c383843",
|
|
141
|
+
"metadata": {},
|
|
142
|
+
"outputs": [],
|
|
143
|
+
"source": [
|
|
144
|
+
"init_nn_params = u.init_params()"
|
|
145
|
+
]
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"cell_type": "markdown",
|
|
149
|
+
"id": "0a5d567b",
|
|
150
|
+
"metadata": {},
|
|
151
|
+
"source": [
|
|
152
|
+
"Create a DataGenerator object"
|
|
153
|
+
]
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"cell_type": "code",
|
|
157
|
+
"execution_count": 7,
|
|
158
|
+
"id": "15088440",
|
|
159
|
+
"metadata": {},
|
|
160
|
+
"outputs": [],
|
|
161
|
+
"source": [
|
|
162
|
+
"n = 320\n",
|
|
163
|
+
"batch_size = 32\n",
|
|
164
|
+
"method = 'uniform'\n",
|
|
165
|
+
"tmin = 0\n",
|
|
166
|
+
"tmax = 1\n",
|
|
167
|
+
"\n",
|
|
168
|
+
"Tmax = 30\n",
|
|
169
|
+
"key, subkey = random.split(key)\n",
|
|
170
|
+
"train_data = jinns.data.DataGeneratorODE(\n",
|
|
171
|
+
" subkey,\n",
|
|
172
|
+
" n,\n",
|
|
173
|
+
" tmin,\n",
|
|
174
|
+
" tmax,\n",
|
|
175
|
+
" batch_size, \n",
|
|
176
|
+
" method=method\n",
|
|
177
|
+
")"
|
|
178
|
+
]
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"cell_type": "markdown",
|
|
182
|
+
"id": "4f1ac783",
|
|
183
|
+
"metadata": {},
|
|
184
|
+
"source": [
|
|
185
|
+
"Initialize 3 set of neural network parameters for the 3 populations"
|
|
186
|
+
]
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"cell_type": "code",
|
|
190
|
+
"execution_count": 8,
|
|
191
|
+
"id": "4fec8c54",
|
|
192
|
+
"metadata": {},
|
|
193
|
+
"outputs": [],
|
|
194
|
+
"source": [
|
|
195
|
+
"init_nn_params_list = []\n",
|
|
196
|
+
"for _ in range(3):\n",
|
|
197
|
+
" key, subkey = random.split(key)\n",
|
|
198
|
+
" u = jinns.utils.create_PINN(subkey, eqx_list, \"ODE\", 0)\n",
|
|
199
|
+
" init_nn_params = u.init_params()\n",
|
|
200
|
+
" init_nn_params_list.append(init_nn_params)"
|
|
201
|
+
]
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
"cell_type": "markdown",
|
|
205
|
+
"id": "e595cbcd",
|
|
206
|
+
"metadata": {},
|
|
207
|
+
"source": [
|
|
208
|
+
"Visualize the output of the neural networks before the parameter learning step"
|
|
209
|
+
]
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"cell_type": "code",
|
|
213
|
+
"execution_count": 9,
|
|
214
|
+
"id": "d18c73d2-ff23-4019-a7a1-40cc023dbf53",
|
|
215
|
+
"metadata": {},
|
|
216
|
+
"outputs": [
|
|
217
|
+
{
|
|
218
|
+
"data": {
|
|
219
|
+
"text/plain": [
|
|
220
|
+
"<matplotlib.legend.Legend at 0x7fe46415cd10>"
|
|
221
|
+
]
|
|
222
|
+
},
|
|
223
|
+
"execution_count": 9,
|
|
224
|
+
"metadata": {},
|
|
225
|
+
"output_type": "execute_result"
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
"data": {
|
|
229
|
+
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAiwAAAGdCAYAAAAxCSikAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABAuklEQVR4nO3deXhU9aH/8c/MJDNJyE5CFhIgYQlLWRQlD1btreZn1JafpX36UOFXllYtXq2t1FqwKEp/NaK3FBda+7R69fZ2wd6q/d1q6bVUaKkIFaRWWSQQCEs2lmSyLzPn98dkTjLJJGRCwpwk79fznOfMfOd7Tr7nODofv+d7vsdmGIYhAAAAC7OHuwEAAAAXQ2ABAACWR2ABAACWR2ABAACWR2ABAACWR2ABAACWR2ABAACWR2ABAACWFxHuBgwEr9erM2fOKC4uTjabLdzNAQAAfWAYhmpra5WZmSm7vfc+lGERWM6cOaPs7OxwNwMAAPTDyZMnlZWV1WudYRFY4uLiJPkOOD4+PsytAQAAfeF2u5WdnW3+jvcm5MDyl7/8RU899ZT27t2rsrIyvfbaa/rc5z7X6zbbt2/XqlWr9NFHHyk7O1tr167V8uXLzc8fffRRPfbYYwHb5OXl6dChQ31qk/8yUHx8PIEFAIAhpi/DOUIedFtfX6/Zs2dr8+bNfapfUlKiz3zmM/r0pz+t/fv365vf/KbuuOMO/fGPfwyoN2PGDJWVlZnLzp07Q20aAAAYpkLuYbnlllt0yy239Ln+888/r5ycHP3gBz+QJE2bNk07d+7UD3/4QxUWFnY0JCJC6enpoTYHAACMAIN+W/OuXbtUUFAQUFZYWKhdu3YFlB05ckSZmZnKzc3VkiVLVFpa2uM+m5ub5Xa7AxYAADB8Dfqg2/LycqWlpQWUpaWlye12q7GxUdHR0crPz9dLL72kvLw8lZWV6bHHHtN1112nDz/8MOhAnKKiom5jXgAAsArDMNTW1iaPxxPupoSdw+FQRETEJU87Yom7hDpfYpo1a5by8/M1fvx4vfLKK/rqV7/arf6aNWu0atUq871/lDEAAOHW0tKisrIyNTQ0hLsplhETE6OMjAw5nc5+72PQA0t6eroqKioCyioqKhQfH6/o6Oig2yQmJmrKlCkqLi4O+rnL5ZLL5RrwtgIAcCm8Xq9KSkrkcDiUmZkpp9M5oic0NQxDLS0tqqqqUklJiSZPnnzRCeJ6MuiBZf78+XrzzTcDyt566y3Nnz+/x23q6up09OhRffnLXx7s5gEAMGBaWlrk9XqVnZ2tmJiYcDfHEqKjoxUZGakTJ06opaVFUVFR/dpPyDGnrq5O+/fv1/79+yX5blvev3+/OUh2zZo1Wrp0qVl/5cqVOnbsmB588EEdOnRIP/rRj/TKK6/o/vvvN+s88MAD2rFjh44fP6533nlHCxculMPh0O23396vgwIAIJz624swXA3E+Qi5h+W9997Tpz/9afO9fyzJsmXL9NJLL6msrCzgDp+cnBy98cYbuv/++/X0008rKytLP/vZzwJuaT516pRuv/12nTt3Tqmpqbr22mv17rvvKjU19VKODQAADBM2wzCMcDfiUrndbiUkJKimpoaZbgEAYdPU1KSSkhLl5OT0+9LHcNTTeQnl95s+KwAAYHkEFgAAoOXLl8tms+mJJ54IKH/99dfNO52ampq0fPlyzZw5UxERERd9luBAIrBcxPpd6/Xjf/xYO07uUGVDpYbBFTQAAIKKiorShg0bdOHChaCfezweRUdH67777us2i/1gs8TEcVZV21Kr33z8m4Cy0VGjNW30NE1Lnqbpo6dr2uhpyhyVOaLvswcA9MwwDDW2hmfG2+hIR0i/TwUFBSouLlZRUZGefPLJbp+PGjVKP/7xjyVJf/vb31RdXT1QTb0oAstFPHj1gzp47qAOnj+oYzXHdK7pnHae3qmdpzueJh3vjNe00dM0PXm6GWbGxY+T3UYHFgCMdI2tHk1/5I9h+dsH1hcqxtn3n3qHw6HHH39cixcv1n333aesrKxBbF1oCCy9iHPG6cvTOyava2xr1McXPjYDzMFzB3Wk+ojcLW7tLtut3WW7zboxETGamjzV7IWZljxNOQk5irBzygEA1rVw4ULNmTNH69at0wsvvBDu5pj49QxBdES0ZqfO1uzU2WZZi6dFxdXFASHm8IXDamhr0L7KfdpXuc+sG+WI0pTkKR2Xk5KnaVLiJEU6IsNxOACAyyA60qED6wsvXnGQ/nZ/bNiwQTfccIMeeOCBAW5R/xFYLpHT4dT00dM1ffR0s6zN26aSmhIzwBw4d0CHzh9SQ1uDPqj6QB9UfWDWjbBHaHLiZDPATBs9TVOSpigqgvv3AWA4sNlsIV2WsYLrr79ehYWFWrNmjZYvXx7u5kgisAyKCHuEJidN1uSkyfrfE/+3JMlreFXqLu0IMecP6OC5g3K3uH1l5w+a2ztsDuUk5ASEmKnJUzUqclS4DgkAMMI88cQTmjNnjvLy8sLdFEkElsvGbrNrQsIETUiYoFtybpHkGzl+uu50txBzvum8iquLVVxdrP939P9JkmyyaXz8eDPA+MfFJLgSwnlYAIBhaubMmVqyZImeeeaZgPIDBw6opaVF58+fV21trflswTlz5gxqewgsYWSz2ZQVl6WsuCz9r/H/S5IvxFQ2VHYLMRUNFTruPq7j7uP6w/E/mPsYGzu2I8S0r1OiU8J1SACAYWT9+vXasmVLQNmtt96qEydOmO+vuOIKSRr0ecp4ltAQca7xnA6dP6SD531jYg6eO6hTdaeC1h0TPSagF2b66OlKi0ljrhgAGGQ8Syi4gXiWED0sQ8To6NH65NhP6pNjP2mW1TTX6PD5wx0h5vxBHa85rsrGSlWeqtSOUzvMukmupIBemOnJ05UVl0WIAQAMCQSWISzBlaB5GfM0L2OeWdbQ2qDDFw6bvTAHzx/U0eqjutB8Qe+ceUfvnHnHrBsXGRcQYqaNnqbxcePlsPfvNjgAAAYLgWWYiYmM0RVjrtAVY64wy5ramlRcXWz2whw8d1AfX/hYta212lO+R3vK95h1oyOiNTV5asC4mNzEXEXamSsGABA+BJYRICoiSp9I+YQ+kfIJs6zV06pjNccCQszhC4fV2Nao9yvf1/uV75t1nXanpiRNMXthpidP16SkSXI5XOE4HADACERgGaEiHZHKS85TXnKeFmqhJMnj9ei4+3hAiDl0/pDqWuv04bkP9eG5D83tI2wRmpg4MWBg75SkKYqJjAnXIQEAhjECC0wOu0MTEydqYuJELZi4QJJvwrtTtafM26v942Kqm6t1+MJhHb5wWK/rdUkdc8VMTZ6qvOQ8TU2eqqnJU7nNGgBwyQgs6JXdZte4+HEaFz9ON0+4WZLvXvvy+vKOENPeG1PVWGXOFbP1+FZzHynRKWZ4yUvO07TkacqOy+Zp1gCAPiOwIGQ2m00ZsRnKiM3QjeNuNMvPNp7V4fOHdej8IfN26xPuEzrbeFY7T+/UztM7zbrREdHKS+rohZk6eqomJTIuBgAQHIEFAyYlOkUpY1MC5oppaG3Qxxc+9gWZC4d06NwhHak+osa2Ru2v2q/9VfvNuv5nKE1Lnmb2xOQl5/H4AQAAgQWDKyYyRnPGzNGcMXPMsjZvm47XHNehCx09MYfOH1JNc435DKX/PvbfZv2MURkdPTHtS8aoDCa9A4ABtHz5cr388ssqKirS6tWrzfLXX39dCxculGEY2r59u374wx9qz549crvdmjx5sr797W9ryZIlg94+Agsuuwh7hCYlTdKkpEn6bO5nJfnGxVQ0VJiPH/BfWjpdd1pl9WUqqy/T2yffNvcR74wPGBOTl5ynnIQc5osBgEsQFRWlDRs26Gtf+5qSkpK6ff7OO+9o1qxZ+s53vqO0tDT9/ve/19KlS5WQkKDPfvazg9o2niUES3O3uM3w4h8bc7T6qNqMtm51nXanJiVNCuiJmZI0RaMiR4Wh5QBGoqH8LKHly5fr3LlzKi4u1oIFC/Tkk09KCuxhCeYzn/mM0tLS9OKLL/a4b54lhGEv3hmvq9Ov1tXpV5tlLZ4WHa0+aoaYQ+cP6fCFw6pvrdeBcwd04NwBs65NNmXHZSsvOU9TkqYoL8k39wyXlABcNoYhtTaE529Hxkgh/LfO4XDo8ccf1+LFi3XfffcpKyvrotvU1NRo2rRpl9LKPiGwYMhxOpzmrLt+XsOr07WnzfEwhy8c1qFzh1TZWKnS2lKV1pbqrRNvmfXjIuM0OWmyb/K89hAzMXGioiOiw3FIAIaz1gbp8czw/O2HzkjO0HqZFy5cqDlz5mjdunV64YUXeq37yiuv6O9//7t+8pOfXEor+4TAgmHBbrMrOz5b2fHZumnCTWb5ucZzOnzhsD4+/7FvfeFjHas+ptrWWu2r3Kd9lfsC9jEubpwZYqYkTVFecp7SYtLojQEwomzYsEE33HCDHnjggR7rvP3221qxYoV++tOfasaMGYPeJgILhrXR0aN1TfQ1uibzGrPM/xylrkHmfNN5c+K7Px7/o1k/3hkfcElpSvIU5owB0HeRMb6ejnD97X64/vrrVVhYqDVr1mj58uXdPt+xY4cWLFigH/7wh1q6dOklNrJvCCwYcTo/R0kTfWWGYehs41nfnDEXDuvweV+IKakpkbvFrb+X/11/L/+7uQ+HzaHx8ePNAOPvkRkTM4beGACBbLaQL8tYwRNPPKE5c+YoLy8voHz79u367Gc/qw0bNuiuu+66bO0hsADyzd6bGpOq1JjUgInv/AN8/b0w/h6Z6uZqHas5pmM1x/SH438w6ye6Es0Q4++RmZg4UU6HMxyHBQD9NnPmTC1ZskTPPPOMWfb222/rs5/9rL7xjW/oC1/4gsrLyyVJTqdTycnJg9oeAgvQi2ADfA3DUGVDpdkb4w8xx93HVd1crd3lu7W7fLdZP8IWoQkJEzQlyRdiJidN1pSkKYyNAWB569ev15YtW8z3L7/8shoaGlRUVKSioiKz/FOf+pS2b98+qG1hHhZggDS1NelozdGAcTGHzx+Wu8UdtH6cM06TEydrctJkcz0paZLinXyHgaFqKM/DMpiYhwWwkKiIKM0YPUMzRneMlvfP4OsfE3PkwhEdqT6i4zXHVdvS/U4lSUqLSfOFmPYgMyVpinIScrisBGBEI7AAg8hmsyl9VLrSR6XrU9mfMstbPC0qqSnRkeojvhDTHmTK68tV0VChioaKgKdbR9giND5+fECQmZw0WZmxmbLb7OE4NAC4rAgsQBg4Hc6OO5U6cbe4VXyh2Aww/jBT21qrozVHdbTmqLYe32rWj4mI0aSkSWaAmZI0RZMTJysxKvEyHxEADC4CC2Ah8c54XZl2pa5Mu9Is819W6hpijtUcU0Nbgz6o+kAfVH0QsJ/U6FRNSpzU0SOTNFkTEyYqKoJr6gCGJgILYHGdLytdl3WdWd7qbVWpu1RHLhzxjY9pDzOn606rqrFKVY1V2lW2y6xvt9mVFZuliYkTNSlxkrmekDCBSfAAWB6BBRiiIu2Rmpg4URMTJ+rmnJvN8obWBhVXd7+sdKH5gvlcpbdPvm3W9z+SwL8vf5jJic9RpCMyHIcGAN0QWIBhJiYyRrNSZ2lW6iyzzDAMnWs6p6PVR1VcXayj1UfN1+4Wt/lIgm2l28xtHDaHxsWPMwPMxMSJmpQwSeMTxivSTpABcHkRWIARwGazKSU6RSnRKcrPyDfL/Y8k8IeYzmGmtrVWJTUlKqkpCXjSdYQ9QhPiJ3TrkRkXN04Rdv6TAmBw8F8XYATr/EiC+ZnzzXL/QN+uIeZozVHVt9aruLpYxdXFAfuKtEdqQsIETUqYFBBksuOy5bA7LvehARhmCCwAuuk80Lfzs5UMw1B5fXn3Hpmao2psazTHy3QWaY/U+Pjxyk3IVW5irm+dkMtgXwAhIbAA6DObzaaM2AxlxGYE3LHkNbwqqy8LCDHF1cU6Vn1MTZ6mjh6ZEx37stvsGhs71gwwOQk5ZqCJc8aF4eiAkW358uV6+eWXVVRUpNWrV5vlr7/+uhYuXCjDMHT48GGtXLlSBw4cUE1NjTIzM7V48WKtW7dOkZGDO7aNwALgkvnDx9jYsbo+63qz3Gt4dabujI7VHFNJTYnvCdfVvqdcu1vcOll7UidrT2rHqR0B+0uNTu0WYnITcpUSncIDI4FBFBUVpQ0bNuhrX/uakpKSun0eGRmppUuX6sorr1RiYqL+8Y9/6M4775TX69Xjjz8+qG0jsAAYNHabXVlxWcqKywoIMv67lkpqSswA4w8zlY2V5jwynZ96LUlxkXHKScwxA4x/yYzNZJwMMAAKCgpUXFysoqIiPfnkk90+z83NVW5urvl+/Pjx2r59u/76178OetsILAAuu853LV2dfnXAZ7UttR29MTXHVFLte32q7pRqW2uDzuzrcrg6xskk5ConMUc58TkaHz+e2X0RdoZhqLGtMSx/OzoiOqReSYfDoccff1yLFy/Wfffdp6ysrF7rFxcXa+vWrfr85z9/qU29KAILAEuJc8Z1m0dGkpo9zTrhPhEQYo7VHNPxmuNq9jTr4wsf6+MLHwdsY5NNGaMyNCFhgibETzDXOQk5SotJ4/ISLovGtkbl/zL/4hUHwe7FuxUTGRPSNgsXLtScOXO0bt06vfDCC0HrXHPNNdq3b5+am5t11113af369QPR3F4RWAAMCS6HS1OSpmhK0pSAco/XY46TOVZzTEerj/rmj3GXqLalVmfqz+hM/Rm9c+adgO2iI6I1Pn58QJDxr0dFjrqchwZYzoYNG3TDDTfogQceCPr5li1bVFtbq3/84x/69re/rX/7t3/Tgw8+OKhtIrAAGNIcdoey47OVHZ+tT2V/yiw3DEPnm877ZvGtOR6wPlV7So1tjTp0/pAOnT/UbZ9josd0CzETEiYocxRjZRC66Iho7V68++IVB+lv98f111+vwsJCrVmzRsuXL+/2eXZ2tiRp+vTp8ng8uuuuu/Stb31LDsfg/ftBYAEwLNlsNo2OHq3R0aM1N21uwGet3ladqj3VEWQ6hZnzTedV2VipysZK7SnfE7Cd0+7UuPhxQXtlElwJl/PwMITYbLaQL8tYwRNPPKE5c+YoLy+v13per1etra3yer3WCix/+ctf9NRTT2nv3r0qKyvTa6+9ps997nO9brN9+3atWrVKH330kbKzs7V27dpuiW3z5s166qmnVF5ertmzZ+vZZ5/VvHnzQm0eAFxUpD1SOQk5yknI6fZZTXNN0F6ZE+4TavG2BJ3lV5KSXEkaFz9O4+PHa1xc+7r9PZeYMBTNnDlTS5Ys0TPPPGOW/eIXv1BkZKRmzpwpl8ul9957T2vWrNGiRYusNw9LfX29Zs+era985St9GhVcUlKiz3zmM1q5cqV+8YtfaNu2bbrjjjuUkZGhwsJCSb5rYatWrdLzzz+v/Px8bdq0SYWFhTp8+LDGjBkT+lEBQD8luBI0O3W2ZqfODij3eD06U3+mW5A5XnNclY2VutB8QReqLugfVf/ots/RUaMDAow/0GTHZQ/J//PGyLF+/Xpt2bLFfB8REaENGzbo448/lmEYGj9+vO69917df//9g94Wm2EYRr83ttku2sPyne98R2+88YY+/PBDs+xLX/qSqqurtXXrVklSfn6+rr76aj333HOSfN1L2dnZ+vrXvx4w215P3G63EhISVFNTo/j4+P4eDgD0S31rvUrdpTpRe8K3dvvWpbWlOt90vtdtx0SPMYNMdly2GWzGxY3jluwhqKmpSSUlJcrJyVFUFP/8/Ho6L6H8fg/6GJZdu3apoKAgoKywsFDf/OY3JUktLS3au3ev1qxZY35ut9tVUFCgXbt2Bd1nc3Ozmpubzfdut3vgGw4AfTQqcpSmjZ6maaOndfvM3eLWSfdJnXCfMAONP9zUNNeY42Xeq3iv27ZpMWkdPTNxHT00WXFZPIcJI86gB5by8nKlpaUFlKWlpcntdquxsVEXLlyQx+MJWufQoe6j9yWpqKhIjz322KC1GQAGSrwzXjNSZmhGyoxun9U01/iCjPuESms79cy4S1XbWquKhgpVNFR0G/zrn18mOy7bnEk4Oy7bXHgWE4ajIXmX0Jo1a7Rq1SrzvdvtNm+xAoChIsGVEHSSPMMwdKH5gnl5yR9o/O8b2hrM+WW6Pr5AkhJdiWaY8YeYrFjf69SYVNlt9st1iMCAGfTAkp6eroqKioCyiooKxcfHKzo6Wg6HQw6HI2id9PT0oPt0uVxyuegOBTA82Ww2JUclKzkqWXPGzAn4zP8cplJ3qfnwyFN1p3zr2lM633Re1c3Vqm6u1j/P/rPbvl0OlxleAgJNXJbGxo6V0+G8TEcJhGbQA8v8+fP15ptvBpS99dZbmj9/viTJ6XRq7ty52rZtmzl41+v1atu2bbr33nsHu3kAMKR0fg7TlWlXdvu8rqXODDD+EON/XVZfpmZPs47WHNXRmqPd9y2b0kelB4QYLjXBKkIOLHV1dSou7piDoKSkRPv371dycrLGjRunNWvW6PTp0/qP//gPSdLKlSv13HPP6cEHH9RXvvIV/fnPf9Yrr7yiN954w9zHqlWrtGzZMl111VWaN2+eNm3apPr6eq1YsWIADhEARo5YZ6ymJk/V1OSp3T5r9baqrK6se5ipO2nO/ltWX6ay+rJu42Yk3yWsrFhfT4y5xPnWmbGZDATu5BJuwB2WBuJ8hBxY3nvvPX3605823/vHkixbtkwvvfSSysrKVFpaan6ek5OjN954Q/fff7+efvppZWVl6Wc/+5k5B4skLVq0SFVVVXrkkUdUXl6uOXPmaOvWrd0G4l52nlZp00zJZm9fbJ1eB1lk617H7pDsEe2vIzotji7vIyT7xeo4JFt7mSOyfXFKDlfH6whXD+XO9rKuy5AcxgSgHyLtkb5bpuPHdfvMf6nJH2a69s6cbzqvmuYa1TTX6KNzHwXdf2p0akCIyYrNUmZspsbGjlX6qHRF2If/f2/8k6c1NDQoOrp/0+IPRw0NDZJ0SZPLXdI8LFYxaPOwtDVL/3eYT1xnswcJMZHtwaf9fWS0FBHlWyKjpIjo9nWXsghXR93I9vdm3WCfR/kCHgDLq2+t16naUzpVd0pn6s7odN1pna49rVN1p3S67rQa2xp73d5hcyh9VLoZYLouw2kwcFlZmaqrqzVmzBjFxMSM6KeCG4ahhoYGVVZWKjExURkZGQGfh/L7TWDpjdcrVfxTMgzJ8HZa97YYkjrV87ZJXk/H2vC/7lze1qWstzr+962+HiBPi29pa+l43Xkxy1slT7PvtWXYJOcoKTJGcsZIkaPa1zG+cvOzIHWcozrV77JdZIwvEI3g/0gAl5NhGKpurtbpuvYAU3tap+tOdwSbutNq9bb2ug+n3WmGGTPUxPl6aTJGZSg5KnnI/PAbhqHy8nJVV1eHuymWkZiYqPT09G7/DAks6Jlh+AJPW3OXINMefto6vfY0+wJPW6PU2uRbtzVLrY1SW1P7ujnw89Ym32dtTT1vY3guw4HaAgOPK1ZyxkmuON9rV5zkjJVc8V3exwV/HcGdE0B/eQ2vqhqqzPDSeTlTd0bl9eXyXOS/Cy6HSxmjMnxLrG+dGZtplqWNSlOkfXCfZRMqj8ej1tbeg9pIEBkZ2eNDEQkssDZPm9Ta4AsvrfVSS4PUUt/xutX/vn1tvm7oUqeue/22psFps8PVEXa6Bp+oBF/wiUrovnQup9cHCKrV26qK+orugaa9p+Zs41kZ6v2nyiabUmNSlTkq0ww1maMyA8IND6G0HgILRi6vJ0jQqZea66SWWqm51ve6uTbI+/Z159cDGYDsEcGDTFS8FJXYQ3mn+q5438BsYIRp8bSoor5CZfVlOlN/RmV1Zebr8vpyldWVqcV78cvdcc64wBDTJdAkRyUPm3E0QwWBBRgontYuYaZz2KmTmt1Sk7t9XdN98Zcb3gFojM0XWqITpOikjiUqMfB9tyXR17sDDFNew6vzTedVVtc90Phfu1su/sw5p92p9FHpHb0z7T016aPSlR6TrrRRaYqO4N+lgURgAazEMHyBp8kdGGJ6CjdNNR11/eWX2tMTERU8yFws7LjiuIyFYaG+tV5n6s745pkJEmgqGyovetlJ8s1FkxaTpvRR6UHXhJrQEFiA4aatuT3EVEuN1e3rC70snT6/lEHONocUkyzFjG5fOr9uX6KTAz8j5GAI8o+j8U+c5x8MfKbujMobylVeX37RW7f9ElwJZo+Mue4UbMbEjCHUtCOwAPAxDN8lrK6Bplvg6fr+Qv97deyRXQJOkJDjL/OHHecoQg4szTAM3xO06ytUXl+uiobg676GmkRXYvcemk4BJy0mTVERUYN8VOFHYAFw6VobpYbzUuN537rhXPvS+XWnssbzvkHO/eFwdQ8zo1Lbl5T2pdN7VzwBB5bjDzXl9eW+YNNQHjTghBJq/D0yY2LGaEz0mI7X7UuiK3HIzE8TDIEFQHi0NLQHnGDhJtjrs/2bzNDhlGI6B5ku65iUwLDj5HZWWINhGHK3uLv30HQKOKGEmkh7pMbEjFFqdGpAkEmNSVVaTJpZHhMZM8hH1j8EFgBDg2H4bjv3B5nG81J9++v6qvblrC/Y+F+31IX+dyJjeggzQXpwYlKYKBBh5Q81/kBT0VChqoYqVTZUmktVY5XON53v8z5jI2MDgow/5KTFpCk1xhdqRkePvuyT7xFYAAxfrY2+4NItzFT5wk7noFNf5ZuxOVTRSdKoMVJs+9L5dWyaL9jEpvmCjsNas6ti5GjxtOhs49mAIFPZ2B5o2gNOKL01Ntk0Onp0QJBJjUlVanT7EpOqvKQ8OezBZ63tDwILAEgdt5R3CzNVXXpx2l83nPU9uiIU0cm+8BLrDzE9BJ2YFJ6OjrCoa6kLCDIBPTbt5WcbzqrN6P27b7fZtff/7B3Qp26H8vvNvz0Ahi+breOZUMm5F6/v9fruoKqrkOoqfUt9ZZfXFVJde9AxPL7LWI3npaqDF2uMbzCxP9z01GsTO8ZXbwD/LxYjW6wzVrHOWOUm9PzvgNfw6kLTBfNyU0VDhRlw/L04XsM7oGElVPSwAEB/eL2+oFLXHmLqq4IEnfayhrOhzXZss/t6ZDoHmtg0KS69+5oBxRjC6GEBgMFmt3cM2E2b3ntdr8d3CSog3HQNOv5wc84XburbQ0/FRdrhjJPi0qTY9C7rLiEnOolbwTGkEVgAYLDZHR29JfpE73U9be3hpsIXWGor2gNNhVRbHrhubfA91+pcrXSuuPf9OlztAaZzkOkUcmLH+MpGpXI5CpZEYAEAK3FE+EJEXFrv9fyzGAcLMl3Lmqp9d0vVlPqW3tjsHeNpgl2C6tyDE+EasMMGLobAAgBDkc0mRcX7lpTJvddtbeqhl6Y8sAenvsp3Ocr/vvyD3vcbldgpzGT4XndbpxNsMCAILAAw3EVGSUnjfUtvPG2+AcJde2yC9eB4Wnw9N03VUtWh3vcbMzowwAQLN6PGcNs3esW3AwDg44joCBW9MQzfAzIDwkyZr7em9oyvrLbMt/a0dMxkXPFhz/u02X2hpadA41/HjPYNeMaIQ2ABAITGZut4EveYaT3X8web2rKOAGOuyyX3mY7AY3h8l6jqyqWy/T3v0x7Zqaeml3ATlchdUcMMgQUAMDg6B5u0GT3X83p8j1LoFmq6rOurJG+rVHPSt/QmIvrivTVx6ZIrdmCPGYOGwAIACC+7o293RnlaOy5D9RZuGi9IbY3ShRLf0htnnBR/kVATm+4bB4SwIrAAAIYGR6SUkOVbetPa6As27mCXojpdkmqp9S1na6WzH/e+z+hkX4CJz2gPMl1ex2W0z2HD+JrBQmABAAwvkdFS0gTf0pvm2vaBwp3DTJCQ09bU8cyoyo963p89IvAW7/jM9p6azMBw44pjfE0/EFgAACOT/8GYKZN6rmMOHC7vuAPKXRYYbtxlvlmJvW2S+7Rv6U3kqC69M0HCTWy6FOEc2OMd4ggsAAD0JGDgcC/PjPK0+UJLsDDT+X1TjdRa73uUwsUepxCT0unSU3uY6RpuRtBt3gQWAAAulSPCFyTiM3uv11Lfcbmpt3DjafFN4tdwVqr4Z8/7M2/zDtJT0/m9K25gjzcMCCwAAFwuzlHS6Im+pSf+y1D+eWpqz/RwGSqE27ydce0BJiN4T41/XhtH5MAe7wAisAAAYCWdL0Ol9/J07863eXcON+b79kHDze5OT/U+0tsflkaldLkLqku4GTM9bE/zJrAAADAU9fU27+a6IGEmyCBib6uv16a+qocHX9qkh88OyqH0BYEFAIDhzBUruSb1fjeU1+u7bTtoT037e683rA+oJLAAADDS2e2+y0GjUqSMWeFuTVAj414oAAAwpBFYAACA5RFYAACA5RFYAACA5RFYAACA5RFYAACA5RFYAACA5RFYAACA5RFYAACA5RFYAACA5RFYAACA5RFYAACA5RFYAACA5RFYAACA5RFYAACA5RFYAACA5fUrsGzevFkTJkxQVFSU8vPztWfPnh7rtra2av369Zo4caKioqI0e/Zsbd26NaDOo48+KpvNFrBMnTq1P00DAADDUMiBZcuWLVq1apXWrVunffv2afbs2SosLFRlZWXQ+mvXrtVPfvITPfvsszpw4IBWrlyphQsX6v333w+oN2PGDJWVlZnLzp07+3dEAABg2Ak5sGzcuFF33nmnVqxYoenTp+v5559XTEyMXnzxxaD1f/7zn+uhhx7SrbfeqtzcXN1999269dZb9YMf/CCgXkREhNLT080lJSWlf0cEAACGnZACS0tLi/bu3auCgoKOHdjtKigo0K5du4Ju09zcrKioqICy6Ojobj0oR44cUWZmpnJzc7VkyRKVlpb22I7m5ma53e6ABQAADF8hBZazZ8/K4/EoLS0toDwtLU3l5eVBtyksLNTGjRt15MgReb1evfXWW3r11VdVVlZm1snPz9dLL72krVu36sc//rFKSkp03XXXqba2Nug+i4qKlJCQYC7Z2dmhHAYAABhiBv0uoaefflqTJ0/W1KlT5XQ6de+992rFihWy2zv+9C233KIvfvGLmjVrlgoLC/Xmm2+qurpar7zyStB9rlmzRjU1NeZy8uTJwT4MAAAQRiEFlpSUFDkcDlVUVASUV1RUKD09Peg2qampev3111VfX68TJ07o0KFDio2NVW5ubo9/JzExUVOmTFFxcXHQz10ul+Lj4wMWAAAwfIUUWJxOp+bOnatt27aZZV6vV9u2bdP8+fN73TYqKkpjx45VW1ubfvvb3+q2227rsW5dXZ2OHj2qjIyMUJoHAACGqZAvCa1atUo//elP9fLLL+vgwYO6++67VV9frxUrVkiSli5dqjVr1pj1d+/erVdffVXHjh3TX//6V918883yer168MEHzToPPPCAduzYoePHj+udd97RwoUL5XA4dPvttw/AIQIAgKEuItQNFi1apKqqKj3yyCMqLy/XnDlztHXrVnMgbmlpacD4lKamJq1du1bHjh1TbGysbr31Vv385z9XYmKiWefUqVO6/fbbde7cOaWmpuraa6/Vu+++q9TU1Es/QgAAMOTZDMMwwt2IS+V2u5WQkKCamhrGswAAMESE8vvNs4QAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDlEVgAAIDl9SuwbN68WRMmTFBUVJTy8/O1Z8+eHuu2trZq/fr1mjhxoqKiojR79mxt3br1kvYJAABGlpADy5YtW7Rq1SqtW7dO+/bt0+zZs1VYWKjKysqg9deuXauf/OQnevbZZ3XgwAGtXLlSCxcu1Pvvv9/vfQIAgJHFZhiGEcoG+fn5uvrqq/Xcc89Jkrxer7Kzs/X1r39dq1ev7lY/MzNT3/3ud3XPPfeYZV/4whcUHR2t//zP/+zXPrtyu91KSEhQTU2N4uPjQzkcAAAQJqH8fofUw9LS0qK9e/eqoKCgYwd2uwoKCrRr166g2zQ3NysqKiqgLDo6Wjt37rykfbrd7oAFAAAMXyEFlrNnz8rj8SgtLS2gPC0tTeXl5UG3KSws1MaNG3XkyBF5vV699dZbevXVV1VWVtbvfRYVFSkhIcFcsrOzQzkMAAAwxAz6XUJPP/20Jk+erKlTp8rpdOree+/VihUrZLf3/0+vWbNGNTU15nLy5MkBbDEAALCakFJDSkqKHA6HKioqAsorKiqUnp4edJvU1FS9/vrrqq+v14kTJ3To0CHFxsYqNze33/t0uVyKj48PWAAAwPAVUmBxOp2aO3eutm3bZpZ5vV5t27ZN8+fP73XbqKgojR07Vm1tbfrtb3+r22677ZL3CQAARoaIUDdYtWqVli1bpquuukrz5s3Tpk2bVF9frxUrVkiSli5dqrFjx6qoqEiStHv3bp0+fVpz5szR6dOn9eijj8rr9erBBx/s8z4BAMDIFnJgWbRokaqqqvTII4+ovLxcc+bM0datW81Bs6WlpQHjU5qamrR27VodO3ZMsbGxuvXWW/Xzn/9ciYmJfd4nAAAY2UKeh8WKmIcFAIChZ9DmYQEAAAgHAgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALA8AgsAALC8fgWWzZs3a8KECYqKilJ+fr727NnTa/1NmzYpLy9P0dHRys7O1v3336+mpibz80cffVQ2my1gmTp1an+aBgAAhqGIUDfYsmWLVq1apeeff175+fnatGmTCgsLdfjwYY0ZM6Zb/V/+8pdavXq1XnzxRV1zzTX6+OOPtXz5ctlsNm3cuNGsN2PGDP3pT3/qaFhEyE0DAADDVMg9LBs3btSdd96pFStWaPr06Xr++ecVExOjF198MWj9d955R5/85Ce1ePFiTZgwQTfddJNuv/32br0yERERSk9PN5eUlJT+HREAABh2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",
|
|
230
|
+
"text/plain": [
|
|
231
|
+
"<Figure size 640x480 with 1 Axes>"
|
|
232
|
+
]
|
|
233
|
+
},
|
|
234
|
+
"metadata": {},
|
|
235
|
+
"output_type": "display_data"
|
|
236
|
+
}
|
|
237
|
+
],
|
|
238
|
+
"source": [
|
|
239
|
+
"vectorized_u_init = vmap(lambda t: u(t, init_nn_params_list[0]), (0), 0)\n",
|
|
240
|
+
"vectorized_v_init = vmap(lambda t: u(t, init_nn_params_list[1]), (0), 0)\n",
|
|
241
|
+
"vectorized_w_init = vmap(lambda t: u(t, init_nn_params_list[2]), (0), 0)\n",
|
|
242
|
+
"\n",
|
|
243
|
+
"\n",
|
|
244
|
+
"plt.plot(train_data.times.sort(axis=0) * Tmax, vectorized_u_init(train_data.times.sort(axis=0)), label=\"N1\")\n",
|
|
245
|
+
"plt.plot(train_data.times.sort(axis=0) * Tmax, vectorized_v_init(train_data.times.sort(axis=0)), label=\"N2\")\n",
|
|
246
|
+
"plt.plot(train_data.times.sort(axis=0) * Tmax, vectorized_w_init(train_data.times.sort(axis=0)), label=\"N3\")\n",
|
|
247
|
+
"\n",
|
|
248
|
+
"plt.legend()"
|
|
249
|
+
]
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
"cell_type": "markdown",
|
|
253
|
+
"id": "f0701671",
|
|
254
|
+
"metadata": {},
|
|
255
|
+
"source": [
|
|
256
|
+
"## Model parameters"
|
|
257
|
+
]
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"cell_type": "code",
|
|
261
|
+
"execution_count": 10,
|
|
262
|
+
"id": "8c609f60",
|
|
263
|
+
"metadata": {},
|
|
264
|
+
"outputs": [],
|
|
265
|
+
"source": [
|
|
266
|
+
"# initial conditions for each species\n",
|
|
267
|
+
"N_0 = jnp.array([10., 7., 4.])\n",
|
|
268
|
+
"# growth rates for each species\n",
|
|
269
|
+
"growth_rates = jnp.array([0.1, 0.5, 0.8])\n",
|
|
270
|
+
"# carrying capacity for each species\n",
|
|
271
|
+
"carrying_capacities = jnp.array([0.04, 0.02, 0.02])\n",
|
|
272
|
+
"# interactions\n",
|
|
273
|
+
"# NOTE that for the interaction between the species **with itself** is always at position 0\n",
|
|
274
|
+
"# NOTE minus sign \n",
|
|
275
|
+
"interactions = -jnp.array([[0, 0.001, 0.001], [0, 0.001, 0.001], [0, 0.001, 0.001]])"
|
|
276
|
+
]
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
"cell_type": "markdown",
|
|
280
|
+
"id": "bbe7f24b",
|
|
281
|
+
"metadata": {},
|
|
282
|
+
"source": [
|
|
283
|
+
"## Loss construction"
|
|
284
|
+
]
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"cell_type": "markdown",
|
|
288
|
+
"id": "33e3c866",
|
|
289
|
+
"metadata": {},
|
|
290
|
+
"source": [
|
|
291
|
+
"A set of parameters as required by the losses' `evaluate` functions is a dictionary with the neural network parameters `nn_params` and the equation parameters `eq_params`. Here we construct this dictionary.\n",
|
|
292
|
+
"\n",
|
|
293
|
+
"__Note__ that `nn_params` and `eq_params` must always be top level keys but can be nested dictionaries.\n",
|
|
294
|
+
"\n",
|
|
295
|
+
"__Note__ that the keys of the sub dictionaries `nn_params` and `eq_params` (here `str(i)`) can differ !"
|
|
296
|
+
]
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
"cell_type": "code",
|
|
300
|
+
"execution_count": 11,
|
|
301
|
+
"id": "11d93e85",
|
|
302
|
+
"metadata": {},
|
|
303
|
+
"outputs": [],
|
|
304
|
+
"source": [
|
|
305
|
+
"# initiate parameters dictionary\n",
|
|
306
|
+
"init_params = {}\n",
|
|
307
|
+
"\n",
|
|
308
|
+
"init_params[\"nn_params\"] = {\n",
|
|
309
|
+
" str(i): init_nn_params_list[i]\n",
|
|
310
|
+
" for i in range(3)\n",
|
|
311
|
+
"}\n",
|
|
312
|
+
"\n",
|
|
313
|
+
"init_params[\"eq_params\"] = {\n",
|
|
314
|
+
" str(i):{\n",
|
|
315
|
+
" \"carrying_capacity\": carrying_capacities[i],\n",
|
|
316
|
+
" \"growth_rate\": growth_rates[i],\n",
|
|
317
|
+
" \"interactions\": interactions[i, :]\n",
|
|
318
|
+
" }\n",
|
|
319
|
+
" for i in range(3)\n",
|
|
320
|
+
"}"
|
|
321
|
+
]
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
"cell_type": "markdown",
|
|
325
|
+
"id": "aa14a602-1b0e-4582-876e-99d0322c57a0",
|
|
326
|
+
"metadata": {},
|
|
327
|
+
"source": [
|
|
328
|
+
"We construct a SystemLossODE with GeneralizedLotkaVolterra losses for each population. Here `key_main` refer to the key in `params[\"nn_params\"]` which are the parameters for the main PINN of the equation (the PINN which represents the solution differentiated with respect to the `t`). `key_others` refer to the keys in `params[\"nn_params\"]` which are the parameters for the PINNs which interact with `key_main`."
|
|
329
|
+
]
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
"cell_type": "code",
|
|
333
|
+
"execution_count": 12,
|
|
334
|
+
"id": "b6a65062",
|
|
335
|
+
"metadata": {},
|
|
336
|
+
"outputs": [],
|
|
337
|
+
"source": [
|
|
338
|
+
"N1_dynamic_loss = jinns.loss.GeneralizedLotkaVolterra(key_main=\"0\", keys_other=[\"1\", \"2\"], Tmax=Tmax)\n",
|
|
339
|
+
"N2_dynamic_loss = jinns.loss.GeneralizedLotkaVolterra(key_main=\"1\", keys_other=[\"0\", \"2\"], Tmax=Tmax)\n",
|
|
340
|
+
"N3_dynamic_loss = jinns.loss.GeneralizedLotkaVolterra(key_main=\"2\", keys_other=[\"0\", \"1\"], Tmax=Tmax)"
|
|
341
|
+
]
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
"cell_type": "code",
|
|
345
|
+
"execution_count": 13,
|
|
346
|
+
"id": "22b2647f",
|
|
347
|
+
"metadata": {},
|
|
348
|
+
"outputs": [],
|
|
349
|
+
"source": [
|
|
350
|
+
"loss_weights = {\"dyn_loss\":1, \"initial_condition\":1 * Tmax}\n",
|
|
351
|
+
"\n",
|
|
352
|
+
"loss = jinns.loss.SystemLossODE(\n",
|
|
353
|
+
" u_dict={\"0\":u, \"1\":u, \"2\":u},\n",
|
|
354
|
+
" loss_weights=loss_weights,\n",
|
|
355
|
+
" dynamic_loss_dict={\"0\": N1_dynamic_loss, \"1\":N2_dynamic_loss, \"2\":N3_dynamic_loss},\n",
|
|
356
|
+
" initial_condition_dict={\"0\":(float(tmin), N_0[0]), \"1\":(float(tmin), N_0[1]), \"2\":(float(tmin), N_0[2])}\n",
|
|
357
|
+
")"
|
|
358
|
+
]
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
"cell_type": "code",
|
|
362
|
+
"execution_count": 14,
|
|
363
|
+
"id": "5f5418d5-629f-4745-ad0f-3778020cc635",
|
|
364
|
+
"metadata": {},
|
|
365
|
+
"outputs": [
|
|
366
|
+
{
|
|
367
|
+
"name": "stdout",
|
|
368
|
+
"output_type": "stream",
|
|
369
|
+
"text": [
|
|
370
|
+
"total loss: 4579.1962890625\n",
|
|
371
|
+
"Individual losses: {'dyn_loss': '676.71', 'initial_condition': '3902.49', 'observations': '0.00'}\n"
|
|
372
|
+
]
|
|
373
|
+
}
|
|
374
|
+
],
|
|
375
|
+
"source": [
|
|
376
|
+
"# Testing the loss function\n",
|
|
377
|
+
"losses_and_grad = jax.value_and_grad(loss.evaluate, 0, has_aux=True)\n",
|
|
378
|
+
"losses, grads = losses_and_grad(\n",
|
|
379
|
+
" init_params,\n",
|
|
380
|
+
" train_data.get_batch()\n",
|
|
381
|
+
")\n",
|
|
382
|
+
"l_tot, d = losses\n",
|
|
383
|
+
"print(f\"total loss: {l_tot}\")\n",
|
|
384
|
+
"print(f\"Individual losses: { {key: f'{val:.2f}' for key, val in d.items()} }\")"
|
|
385
|
+
]
|
|
386
|
+
},
|
|
387
|
+
{
|
|
388
|
+
"cell_type": "markdown",
|
|
389
|
+
"id": "64835b79-0bce-4f06-bd57-5ee051796663",
|
|
390
|
+
"metadata": {},
|
|
391
|
+
"source": [
|
|
392
|
+
"## Learning the neural network parameters\n",
|
|
393
|
+
"The learning process here consider known equation parameters `eq_params`. We thus only update `nn_params`"
|
|
394
|
+
]
|
|
395
|
+
},
|
|
396
|
+
{
|
|
397
|
+
"cell_type": "code",
|
|
398
|
+
"execution_count": 15,
|
|
399
|
+
"id": "4e2c75a4-e3de-4d10-9424-4ee4ae206da3",
|
|
400
|
+
"metadata": {},
|
|
401
|
+
"outputs": [],
|
|
402
|
+
"source": [
|
|
403
|
+
"params = init_params"
|
|
404
|
+
]
|
|
405
|
+
},
|
|
406
|
+
{
|
|
407
|
+
"cell_type": "code",
|
|
408
|
+
"execution_count": 16,
|
|
409
|
+
"id": "8d0106ad-d1e4-4fa8-958d-c8ebd4572d76",
|
|
410
|
+
"metadata": {},
|
|
411
|
+
"outputs": [],
|
|
412
|
+
"source": [
|
|
413
|
+
"# Optimizer\n",
|
|
414
|
+
"import optax\n",
|
|
415
|
+
"tx = optax.adam(learning_rate=1e-3)"
|
|
416
|
+
]
|
|
417
|
+
},
|
|
418
|
+
{
|
|
419
|
+
"cell_type": "code",
|
|
420
|
+
"execution_count": 17,
|
|
421
|
+
"id": "055a7e63-4d0e-4246-b792-2007a0deeaab",
|
|
422
|
+
"metadata": {},
|
|
423
|
+
"outputs": [],
|
|
424
|
+
"source": [
|
|
425
|
+
"n_iter = int(50000)"
|
|
426
|
+
]
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
"cell_type": "code",
|
|
430
|
+
"execution_count": 18,
|
|
431
|
+
"id": "9284d4ed",
|
|
432
|
+
"metadata": {},
|
|
433
|
+
"outputs": [],
|
|
434
|
+
"source": [
|
|
435
|
+
"key, subkey = random.split(key)"
|
|
436
|
+
]
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
"cell_type": "code",
|
|
440
|
+
"execution_count": 19,
|
|
441
|
+
"id": "df0ab21d-bfc1-4e81-8708-df8b30d0173b",
|
|
442
|
+
"metadata": {},
|
|
443
|
+
"outputs": [
|
|
444
|
+
{
|
|
445
|
+
"name": "stdout",
|
|
446
|
+
"output_type": "stream",
|
|
447
|
+
"text": [
|
|
448
|
+
"Iteration 0: loss value = 4555.5380859375\n"
|
|
449
|
+
]
|
|
450
|
+
},
|
|
451
|
+
{
|
|
452
|
+
"data": {
|
|
453
|
+
"application/vnd.jupyter.widget-view+json": {
|
|
454
|
+
"model_id": "3025366fc3bf462ebd45c4dc8f9cd80b",
|
|
455
|
+
"version_major": 2,
|
|
456
|
+
"version_minor": 0
|
|
457
|
+
},
|
|
458
|
+
"text/plain": [
|
|
459
|
+
" 0%| | 0/50000 [00:00<?, ?it/s]"
|
|
460
|
+
]
|
|
461
|
+
},
|
|
462
|
+
"metadata": {},
|
|
463
|
+
"output_type": "display_data"
|
|
464
|
+
},
|
|
465
|
+
{
|
|
466
|
+
"name": "stdout",
|
|
467
|
+
"output_type": "stream",
|
|
468
|
+
"text": [
|
|
469
|
+
"Iteration 1000: loss value = 318.8740539550781\n",
|
|
470
|
+
"Iteration 2000: loss value = 224.96551513671875\n",
|
|
471
|
+
"Iteration 3000: loss value = 150.7670135498047\n",
|
|
472
|
+
"Iteration 4000: loss value = 91.44508361816406\n",
|
|
473
|
+
"Iteration 5000: loss value = 56.90708923339844\n",
|
|
474
|
+
"Iteration 6000: loss value = 35.3653564453125\n",
|
|
475
|
+
"Iteration 7000: loss value = 23.36855125427246\n",
|
|
476
|
+
"Iteration 8000: loss value = 15.523404121398926\n",
|
|
477
|
+
"Iteration 9000: loss value = 10.52695083618164\n",
|
|
478
|
+
"Iteration 10000: loss value = 7.42746639251709\n",
|
|
479
|
+
"Iteration 11000: loss value = 5.209976673126221\n",
|
|
480
|
+
"Iteration 12000: loss value = 3.7927730083465576\n",
|
|
481
|
+
"Iteration 13000: loss value = 2.458726644515991\n",
|
|
482
|
+
"Iteration 14000: loss value = 1.9751157760620117\n",
|
|
483
|
+
"Iteration 15000: loss value = 1.4817097187042236\n",
|
|
484
|
+
"Iteration 16000: loss value = 0.9682494401931763\n",
|
|
485
|
+
"Iteration 17000: loss value = 1.0723628997802734\n",
|
|
486
|
+
"Iteration 18000: loss value = 0.4099021255970001\n",
|
|
487
|
+
"Iteration 19000: loss value = 0.3220522403717041\n",
|
|
488
|
+
"Iteration 20000: loss value = 0.5929091572761536\n",
|
|
489
|
+
"Iteration 21000: loss value = 0.3452896475791931\n",
|
|
490
|
+
"Iteration 22000: loss value = 0.16183003783226013\n",
|
|
491
|
+
"Iteration 23000: loss value = 0.10929514467716217\n",
|
|
492
|
+
"Iteration 24000: loss value = 0.23975375294685364\n",
|
|
493
|
+
"Iteration 25000: loss value = 0.10688906908035278\n",
|
|
494
|
+
"Iteration 26000: loss value = 0.11529865860939026\n",
|
|
495
|
+
"Iteration 27000: loss value = 0.070513516664505\n",
|
|
496
|
+
"Iteration 28000: loss value = 0.10560489445924759\n",
|
|
497
|
+
"Iteration 29000: loss value = 0.043709784746170044\n",
|
|
498
|
+
"Iteration 30000: loss value = 0.04839896038174629\n",
|
|
499
|
+
"Iteration 31000: loss value = 0.0188021007925272\n",
|
|
500
|
+
"Iteration 32000: loss value = 0.04521737992763519\n",
|
|
501
|
+
"Iteration 33000: loss value = 0.04481007158756256\n",
|
|
502
|
+
"Iteration 34000: loss value = 0.17706777155399323\n",
|
|
503
|
+
"Iteration 35000: loss value = 0.10500328987836838\n",
|
|
504
|
+
"Iteration 36000: loss value = 0.09261675924062729\n",
|
|
505
|
+
"Iteration 37000: loss value = 0.031441763043403625\n",
|
|
506
|
+
"Iteration 38000: loss value = 0.029942015185952187\n",
|
|
507
|
+
"Iteration 39000: loss value = 0.01711222529411316\n",
|
|
508
|
+
"Iteration 40000: loss value = 0.05257847532629967\n",
|
|
509
|
+
"Iteration 41000: loss value = 0.022580251097679138\n",
|
|
510
|
+
"Iteration 42000: loss value = 0.04128030687570572\n",
|
|
511
|
+
"Iteration 43000: loss value = 0.0064175548031926155\n",
|
|
512
|
+
"Iteration 44000: loss value = 0.07780715078115463\n",
|
|
513
|
+
"Iteration 45000: loss value = 0.08454320579767227\n",
|
|
514
|
+
"Iteration 46000: loss value = 0.018485121428966522\n",
|
|
515
|
+
"Iteration 47000: loss value = 0.009679016657173634\n",
|
|
516
|
+
"Iteration 48000: loss value = 0.019457252696156502\n",
|
|
517
|
+
"Iteration 49000: loss value = 0.20167014002799988\n",
|
|
518
|
+
"Iteration 50000: loss value = 0.014091400429606438\n"
|
|
519
|
+
]
|
|
520
|
+
}
|
|
521
|
+
],
|
|
522
|
+
"source": [
|
|
523
|
+
"params, total_loss_list, loss_by_term_dict, data, loss, _, _ = jinns.solve(\n",
|
|
524
|
+
" init_params=params,\n",
|
|
525
|
+
" data=train_data,\n",
|
|
526
|
+
" optimizer=tx,\n",
|
|
527
|
+
" loss=loss,\n",
|
|
528
|
+
" n_iter=n_iter\n",
|
|
529
|
+
")"
|
|
530
|
+
]
|
|
531
|
+
},
|
|
532
|
+
{
|
|
533
|
+
"cell_type": "code",
|
|
534
|
+
"execution_count": 20,
|
|
535
|
+
"id": "b65dfc33",
|
|
536
|
+
"metadata": {},
|
|
537
|
+
"outputs": [
|
|
538
|
+
{
|
|
539
|
+
"data": {
|
|
540
|
+
"text/plain": [
|
|
541
|
+
"Array(0.0140914, dtype=float32)"
|
|
542
|
+
]
|
|
543
|
+
},
|
|
544
|
+
"execution_count": 20,
|
|
545
|
+
"metadata": {},
|
|
546
|
+
"output_type": "execute_result"
|
|
547
|
+
}
|
|
548
|
+
],
|
|
549
|
+
"source": [
|
|
550
|
+
"total_loss_list[-1]"
|
|
551
|
+
]
|
|
552
|
+
},
|
|
553
|
+
{
|
|
554
|
+
"cell_type": "markdown",
|
|
555
|
+
"id": "1d0a1757",
|
|
556
|
+
"metadata": {},
|
|
557
|
+
"source": [
|
|
558
|
+
"## Results"
|
|
559
|
+
]
|
|
560
|
+
},
|
|
561
|
+
{
|
|
562
|
+
"cell_type": "markdown",
|
|
563
|
+
"id": "64c794ff",
|
|
564
|
+
"metadata": {},
|
|
565
|
+
"source": [
|
|
566
|
+
"Plot the loss values"
|
|
567
|
+
]
|
|
568
|
+
},
|
|
569
|
+
{
|
|
570
|
+
"cell_type": "code",
|
|
571
|
+
"execution_count": 21,
|
|
572
|
+
"id": "2cd778b4-d9d9-4f69-ad02-2a3f7eacf59d",
|
|
573
|
+
"metadata": {
|
|
574
|
+
"scrolled": true
|
|
575
|
+
},
|
|
576
|
+
"outputs": [
|
|
577
|
+
{
|
|
578
|
+
"data": {
|
|
579
|
+
"image/png": "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",
|
|
580
|
+
"text/plain": [
|
|
581
|
+
"<Figure size 640x480 with 1 Axes>"
|
|
582
|
+
]
|
|
583
|
+
},
|
|
584
|
+
"metadata": {},
|
|
585
|
+
"output_type": "display_data"
|
|
586
|
+
}
|
|
587
|
+
],
|
|
588
|
+
"source": [
|
|
589
|
+
"for loss_name, loss_values in loss_by_term_dict.items():\n",
|
|
590
|
+
" plt.plot(jnp.log10(loss_values), label=loss_name)\n",
|
|
591
|
+
"plt.plot(jnp.log10(total_loss_list), label=\"total loss\")\n",
|
|
592
|
+
"plt.legend()\n",
|
|
593
|
+
"plt.show();"
|
|
594
|
+
]
|
|
595
|
+
},
|
|
596
|
+
{
|
|
597
|
+
"cell_type": "markdown",
|
|
598
|
+
"id": "a6247171",
|
|
599
|
+
"metadata": {},
|
|
600
|
+
"source": [
|
|
601
|
+
"Plot the ODE solutions learned by the PINN"
|
|
602
|
+
]
|
|
603
|
+
},
|
|
604
|
+
{
|
|
605
|
+
"cell_type": "code",
|
|
606
|
+
"execution_count": 22,
|
|
607
|
+
"id": "6d473743-c9a8-4406-b18c-256496cfde59",
|
|
608
|
+
"metadata": {},
|
|
609
|
+
"outputs": [
|
|
610
|
+
{
|
|
611
|
+
"data": {
|
|
612
|
+
"text/plain": [
|
|
613
|
+
"<matplotlib.legend.Legend at 0x7fe3b8674f50>"
|
|
614
|
+
]
|
|
615
|
+
},
|
|
616
|
+
"execution_count": 22,
|
|
617
|
+
"metadata": {},
|
|
618
|
+
"output_type": "execute_result"
|
|
619
|
+
},
|
|
620
|
+
{
|
|
621
|
+
"data": {
|
|
622
|
+
"image/png": "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",
|
|
623
|
+
"text/plain": [
|
|
624
|
+
"<Figure size 640x480 with 1 Axes>"
|
|
625
|
+
]
|
|
626
|
+
},
|
|
627
|
+
"metadata": {},
|
|
628
|
+
"output_type": "display_data"
|
|
629
|
+
}
|
|
630
|
+
],
|
|
631
|
+
"source": [
|
|
632
|
+
"u_est_fp = vmap(lambda t:u(t, params[\"nn_params\"][\"0\"]), (0), 0)\n",
|
|
633
|
+
"v_est_fp = vmap(lambda t:u(t, params[\"nn_params\"][\"1\"]), (0), 0)\n",
|
|
634
|
+
"w_est_fp = vmap(lambda t:u(t, params[\"nn_params\"][\"2\"]), (0), 0)\n",
|
|
635
|
+
"\n",
|
|
636
|
+
"\n",
|
|
637
|
+
"key, subkey = random.split(key, 2)\n",
|
|
638
|
+
"val_data = jinns.data.DataGeneratorODE(subkey, n, tmin, tmax, batch_size, method)\n",
|
|
639
|
+
"\n",
|
|
640
|
+
"plt.plot(val_data.times.sort(axis=0) * Tmax, u_est_fp(val_data.times.sort(axis=0)), label=\"N1\")\n",
|
|
641
|
+
"plt.plot(val_data.times.sort(axis=0) * Tmax, v_est_fp(val_data.times.sort(axis=0)), label=\"N2\")\n",
|
|
642
|
+
"plt.plot(val_data.times.sort(axis=0) * Tmax, w_est_fp(val_data.times.sort(axis=0)), label=\"N3\")\n",
|
|
643
|
+
"\n",
|
|
644
|
+
"plt.legend()"
|
|
645
|
+
]
|
|
646
|
+
},
|
|
647
|
+
{
|
|
648
|
+
"cell_type": "markdown",
|
|
649
|
+
"id": "aed49c41",
|
|
650
|
+
"metadata": {},
|
|
651
|
+
"source": [
|
|
652
|
+
"## Compare with the scipy solver\n",
|
|
653
|
+
"Code from Lorenzo Sala"
|
|
654
|
+
]
|
|
655
|
+
},
|
|
656
|
+
{
|
|
657
|
+
"cell_type": "code",
|
|
658
|
+
"execution_count": 23,
|
|
659
|
+
"id": "484380a5",
|
|
660
|
+
"metadata": {},
|
|
661
|
+
"outputs": [
|
|
662
|
+
{
|
|
663
|
+
"data": {
|
|
664
|
+
"image/png": "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EJTvreN5PB7Ky8v94z3lk2GtFnv//fcNp9NpvP3228a6deuMO++804iLizNycnKsjuZ3HnjgAWP+/PnGtm3bjEWLFhmDBw82mjZtauTl5VkdzXJFRUXGypUrjZUrVxqA8eyzzxorV640duzYYRiGYUyZMsWIi4szZs+ebfz888/GiBEjjPT0dKO0tNTi5L53qteqqKjIePDBB43MzExj27ZtxjfffGP06tXLaN++vVFWVmZ1dJ8bO3as4XK5jPnz5xt79+71XkpKSrz73HXXXUZaWpoxb948Y9myZUZGRoaRkZFhYWprnO612rx5s/HEE08Yy5YtM7Zt22bMnj3baNOmjXHJJZdYnNz3Hn74YWPBggXGtm3bjJ9//tl4+OGHDZvNZnz99deGYVj/ngqK8mEYhvHiiy8aaWlphsPhMPr27WssWbLE6kh+6dprrzWaN29uOBwOo0WLFsa1115rbN682epYfuHbb781gBMut9xyi2EY5tdtH330USMpKclwOp3GoEGDjKysLGtDW+RUr1VJSYkxdOhQo1mzZkZYWJjRqlUr44477gjaXwZqe50A46233vLuU1paatx9991GkyZNjMjISOOqq64y9u7da11oi5zutdq5c6dxySWXGPHx8YbT6TTatWtn/M///I9RUFBgbXAL3H777UarVq0Mh8NhNGvWzBg0aJC3eBiG9e8pm2EYhm+OsYiIiIgEwZgPERER8S8qHyIiIuJTKh8iIiLiUyofIiIi4lMqHyIiIuJTKh8iIiLiUyofIiIi4lMqHyIiIuJTKh8iIiLiUyofIiIi4lMqHyIiIuJTKh8iIiLiU/8fy6z8wq7PDJwAAAAASUVORK5CYII=",
|
|
665
|
+
"text/plain": [
|
|
666
|
+
"<Figure size 640x480 with 1 Axes>"
|
|
667
|
+
]
|
|
668
|
+
},
|
|
669
|
+
"metadata": {},
|
|
670
|
+
"output_type": "display_data"
|
|
671
|
+
}
|
|
672
|
+
],
|
|
673
|
+
"source": [
|
|
674
|
+
"import numpy as np\n",
|
|
675
|
+
"from scipy.integrate import odeint\n",
|
|
676
|
+
"\n",
|
|
677
|
+
"def lotka_volterra_log(y_log, t, params):\n",
|
|
678
|
+
" \"\"\"\n",
|
|
679
|
+
" Generalized Lotka-Volterra model for N bacterial species, with logarithmic transformation for stability.\n",
|
|
680
|
+
" \n",
|
|
681
|
+
" Parameters:\n",
|
|
682
|
+
" y_log (array): Array of log-transformed bacterial populations.\n",
|
|
683
|
+
" t (float): Time.\n",
|
|
684
|
+
" params (tuple): Tuple of model parameters.\n",
|
|
685
|
+
" \n",
|
|
686
|
+
" Returns:\n",
|
|
687
|
+
" dydt (array): Array of derivative of log-transformed bacterial populations with respect to time.\n",
|
|
688
|
+
" \"\"\"\n",
|
|
689
|
+
" alpha, beta, gamma, _ = params\n",
|
|
690
|
+
" N = len(y_log)\n",
|
|
691
|
+
" y = np.exp(y_log)\n",
|
|
692
|
+
" dydt = np.zeros(N)\n",
|
|
693
|
+
" \n",
|
|
694
|
+
" for i in range(N):\n",
|
|
695
|
+
" dydt[i] = y[i] * (alpha[i] - beta[i] * np.sum(y) - np.sum([gamma[j][i] * y[j] for j in range(N)]))\n",
|
|
696
|
+
" \n",
|
|
697
|
+
" dydt_log = dydt / y\n",
|
|
698
|
+
" \n",
|
|
699
|
+
" return dydt_log\n",
|
|
700
|
+
"\n",
|
|
701
|
+
"# Define name bacteria\n",
|
|
702
|
+
"names = ['N1', 'N2', 'N3']\n",
|
|
703
|
+
"N = len(names)\n",
|
|
704
|
+
"\n",
|
|
705
|
+
"# Define model parameters\n",
|
|
706
|
+
"death_rates = None\n",
|
|
707
|
+
"params = (growth_rates, carrying_capacities, interactions, death_rates)\n",
|
|
708
|
+
"\n",
|
|
709
|
+
"# Define initial bacterial populations\n",
|
|
710
|
+
"y0 = [10, 7, 4] #[0.26, 0.37, 0.57] #\n",
|
|
711
|
+
"\n",
|
|
712
|
+
"# Define time points\n",
|
|
713
|
+
"Tmax = 30\n",
|
|
714
|
+
"t = np.linspace(0, Tmax, 1000)\n",
|
|
715
|
+
"\n",
|
|
716
|
+
"############################\n",
|
|
717
|
+
"\n",
|
|
718
|
+
"y0_log = np.log(y0)\n",
|
|
719
|
+
"y_log = odeint(lotka_volterra_log, y0_log, t, args=(params,))\n",
|
|
720
|
+
"y = np.exp(y_log)\n",
|
|
721
|
+
"\n",
|
|
722
|
+
"for i in range(N): \n",
|
|
723
|
+
" plt.plot(t, y[:,i], label=names[i])"
|
|
724
|
+
]
|
|
725
|
+
},
|
|
726
|
+
{
|
|
727
|
+
"cell_type": "code",
|
|
728
|
+
"execution_count": null,
|
|
729
|
+
"id": "e962c046",
|
|
730
|
+
"metadata": {},
|
|
731
|
+
"outputs": [],
|
|
732
|
+
"source": []
|
|
733
|
+
}
|
|
734
|
+
],
|
|
735
|
+
"metadata": {
|
|
736
|
+
"kernelspec": {
|
|
737
|
+
"display_name": "Python 3 (ipykernel)",
|
|
738
|
+
"language": "python",
|
|
739
|
+
"name": "python3"
|
|
740
|
+
},
|
|
741
|
+
"language_info": {
|
|
742
|
+
"codemirror_mode": {
|
|
743
|
+
"name": "ipython",
|
|
744
|
+
"version": 3
|
|
745
|
+
},
|
|
746
|
+
"file_extension": ".py",
|
|
747
|
+
"mimetype": "text/x-python",
|
|
748
|
+
"name": "python",
|
|
749
|
+
"nbconvert_exporter": "python",
|
|
750
|
+
"pygments_lexer": "ipython3",
|
|
751
|
+
"version": "3.11.2"
|
|
752
|
+
},
|
|
753
|
+
"vscode": {
|
|
754
|
+
"interpreter": {
|
|
755
|
+
"hash": "991718e94fb5d91fa62c7598521d2199c208ff1ff700f1ac060f334be0bee194"
|
|
756
|
+
}
|
|
757
|
+
}
|
|
758
|
+
},
|
|
759
|
+
"nbformat": 4,
|
|
760
|
+
"nbformat_minor": 5
|
|
761
|
+
}
|