jinns 0.8.10__tar.gz → 0.9.0__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.9.0/Notebooks/ODE/1D_Generalized_Lotka_Volterra.ipynb +742 -0
- {jinns-0.8.10 → jinns-0.9.0}/Notebooks/ODE/1D_Generalized_Lotka_Volterra_seq2seq.ipynb +1 -1
- {jinns-0.8.10 → jinns-0.9.0}/Notebooks/ODE/systems_biology_informed_neural_network.ipynb +2 -2
- {jinns-0.8.10 → jinns-0.9.0}/Notebooks/PDE/1D_non_stationary_Burger.ipynb +37 -4
- jinns-0.9.0/Notebooks/PDE/1D_non_stationary_Fisher_KPP_Bounded_Domain.ipynb +860 -0
- {jinns-0.8.10 → jinns-0.9.0}/Notebooks/PDE/2D_Heat_inverse_problem.ipynb +1 -1
- {jinns-0.8.10 → jinns-0.9.0}/Notebooks/PDE/2D_Navier_Stokes_PipeFlow.ipynb +1 -1
- {jinns-0.8.10 → jinns-0.9.0}/Notebooks/PDE/2D_Navier_Stokes_PipeFlow_Metamodel_hyperpinn.ipynb +2 -2
- {jinns-0.8.10 → jinns-0.9.0}/Notebooks/PDE/2D_Navier_Stokes_PipeFlow_SoftConstraints.ipynb +18 -9
- {jinns-0.8.10 → jinns-0.9.0}/Notebooks/PDE/2D_Poisson_inverse_problem.ipynb +1 -1
- {jinns-0.8.10 → jinns-0.9.0}/Notebooks/PDE/2D_non_stationary_OU.ipynb +13 -4
- {jinns-0.8.10 → jinns-0.9.0}/Notebooks/PDE/Reaction_Diffusion_2D_heterogenous_model.ipynb +10 -7
- {jinns-0.8.10 → jinns-0.9.0}/Notebooks/PDE/Reaction_Diffusion_2D_homogeneous_metamodel_hyperpinn_diffrax.ipynb +2 -2
- {jinns-0.8.10 → jinns-0.9.0}/Notebooks/PDE/imperfect_modeling_sobolev_reg.ipynb +2 -2
- {jinns-0.8.10 → jinns-0.9.0}/Notebooks/SPDE/SpectralPINN_SPDE_Matern_finite_diff.ipynb +3 -3
- {jinns-0.8.10 → jinns-0.9.0}/Notebooks/Tutorials/implementing_your_own_PDE_problem.ipynb +1 -1
- jinns-0.9.0/Notebooks/Tutorials/introducing_validation_loss.ipynb +668 -0
- {jinns-0.8.10 → jinns-0.9.0}/PKG-INFO +2 -1
- {jinns-0.8.10 → jinns-0.9.0}/doc/source/index.rst +10 -0
- {jinns-0.8.10 → jinns-0.9.0}/jinns/data/_DataGenerators.py +100 -30
- {jinns-0.8.10 → jinns-0.9.0}/jinns/loss/_LossODE.py +2 -2
- {jinns-0.8.10 → jinns-0.9.0}/jinns/loss/_LossPDE.py +4 -31
- {jinns-0.8.10 → jinns-0.9.0}/jinns/loss/_Losses.py +9 -2
- {jinns-0.8.10 → jinns-0.9.0}/jinns/loss/_boundary_conditions.py +8 -55
- {jinns-0.8.10 → jinns-0.9.0}/jinns/solver/_rar.py +10 -6
- {jinns-0.8.10 → jinns-0.9.0}/jinns/solver/_solve.py +61 -33
- {jinns-0.8.10 → jinns-0.9.0}/jinns/utils/_containers.py +1 -0
- {jinns-0.8.10 → jinns-0.9.0}/jinns/utils/_hyperpinn.py +2 -8
- {jinns-0.8.10 → jinns-0.9.0}/jinns/utils/_spinn.py +6 -0
- {jinns-0.8.10 → jinns-0.9.0}/jinns/validation/_validation.py +5 -5
- {jinns-0.8.10 → jinns-0.9.0}/jinns.egg-info/PKG-INFO +2 -1
- {jinns-0.8.10 → jinns-0.9.0}/jinns.egg-info/requires.txt +1 -0
- {jinns-0.8.10 → jinns-0.9.0}/pyproject.toml +1 -1
- {jinns-0.8.10 → jinns-0.9.0}/tests/conftest.py +2 -1
- {jinns-0.8.10 → jinns-0.9.0}/tests/dataGenerator_tests/test_CubicMeshPDENonStatio.py +8 -10
- {jinns-0.8.10 → jinns-0.9.0}/tests/sharding_tests/test_Burger_x32_multiple_shardings.py +3 -3
- {jinns-0.8.10 → jinns-0.9.0}/tests/sharding_tests/test_imperfect_sobolev_x32_multiple_shardings.py +3 -3
- {jinns-0.8.10 → jinns-0.9.0}/tests/solver_tests/test_Burger_x32.py +1 -1
- {jinns-0.8.10 → jinns-0.9.0}/tests/solver_tests/test_Burger_x64.py +1 -1
- {jinns-0.8.10 → jinns-0.9.0}/tests/solver_tests/test_Fisher_x32.py +1 -1
- {jinns-0.8.10 → jinns-0.9.0}/tests/solver_tests/test_Fisher_x64.py +1 -1
- {jinns-0.8.10 → jinns-0.9.0}/tests/solver_tests/test_GLV_x32.py +1 -1
- {jinns-0.8.10 → jinns-0.9.0}/tests/solver_tests/test_GLV_x64.py +1 -1
- {jinns-0.8.10 → jinns-0.9.0}/tests/solver_tests/test_NSPipeFlow_x32.py +1 -1
- {jinns-0.8.10 → jinns-0.9.0}/tests/solver_tests/test_NSPipeFlow_x64.py +1 -1
- {jinns-0.8.10 → jinns-0.9.0}/tests/solver_tests/test_OU2D_x32.py +1 -1
- {jinns-0.8.10 → jinns-0.9.0}/tests/solver_tests/test_imperfect_sobolev_x32.py +1 -1
- {jinns-0.8.10 → jinns-0.9.0}/tests/solver_tests/test_rar_algorithm.py +1 -1
- {jinns-0.8.10 → jinns-0.9.0}/tests/solver_tests_spinn/test_Burger_x32.py +3 -2
- {jinns-0.8.10 → jinns-0.9.0}/tests/solver_tests_spinn/test_Fisher_x32.py +2 -1
- {jinns-0.8.10 → jinns-0.9.0}/tests/solver_tests_spinn/test_NSPipeFlow_x32_spinn.py +1 -1
- {jinns-0.8.10 → jinns-0.9.0}/tests/solver_tests_spinn/test_OU2D_x32.py +2 -1
- {jinns-0.8.10 → jinns-0.9.0}/tests/solver_tests_spinn/test_ReactionDiffusion_nonhomo_x64.py +2 -1
- jinns-0.8.10/Notebooks/ODE/1D_Generalized_Lotka_Volterra.ipynb +0 -769
- jinns-0.8.10/Notebooks/PDE/1D_non_stationary_Fisher_KPP_Bounded_Domain.ipynb +0 -795
- jinns-0.8.10/Notebooks/Tutorials/introducing_validation_loss.ipynb +0 -658
- {jinns-0.8.10 → jinns-0.9.0}/.gitignore +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/.gitlab-ci.yml +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/.pre-commit-config.yaml +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/LICENSE +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/Notebooks/ODE/sbinn_data/glucose.dat +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/Notebooks/ODE/sbinn_data/meal.dat +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/Notebooks/PDE/2d_nonstatio_ou_standardsampling.png +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/Notebooks/PDE/OU_1D_nonstatio_solution_grid.npy +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/Notebooks/PDE/burger_solution_grid.npy +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/Notebooks/Tutorials/load_save_model.ipynb +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/README.md +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/doc/Makefile +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/doc/source/boundary_conditions.rst +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/doc/source/conf.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/doc/source/data.rst +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/doc/source/dynamic_loss.rst +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/doc/source/experimental.rst +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/doc/source/fokker_planck.qmd +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/doc/source/loss.rst +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/doc/source/loss_ode.rst +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/doc/source/loss_pde.rst +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/doc/source/losses.rst +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/doc/source/math_pinn.qmd +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/doc/source/operators.rst +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/doc/source/param_estim_pinn.qmd +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/doc/source/rar.rst +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/doc/source/seq2seq.rst +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/doc/source/solve.rst +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/doc/source/solver.rst +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/doc/source/utils.rst +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/doc/source/validation.rst +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/jinns/__init__.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/jinns/data/__init__.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/jinns/data/_display.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/jinns/experimental/__init__.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/jinns/experimental/_diffrax_solver.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/jinns/experimental/_sinuspinn.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/jinns/experimental/_spectralpinn.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/jinns/loss/_DynamicLoss.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/jinns/loss/_DynamicLossAbstract.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/jinns/loss/__init__.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/jinns/loss/_operators.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/jinns/solver/__init__.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/jinns/solver/_seq2seq.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/jinns/utils/__init__.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/jinns/utils/_optim.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/jinns/utils/_pinn.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/jinns/utils/_save_load.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/jinns/utils/_utils.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/jinns/utils/_utils_uspinn.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/jinns/validation/__init__.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/jinns.egg-info/SOURCES.txt +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/jinns.egg-info/dependency_links.txt +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/jinns.egg-info/top_level.txt +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/setup.cfg +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/tests/dataGenerator_tests/test_CubicMeshPDEStatio.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/tests/dataGenerator_tests/test_DataGeneratorODE.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/tests/dataGenerator_tests/test_DataGeneratorParameter.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/tests/runtests.sh +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/tests/save_load_tests/test_saving_loading_hyperpinn.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/tests/save_load_tests/test_saving_loading_pinn.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/tests/save_load_tests/test_saving_loading_spinn.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/tests/utils_tests/test_hyperpinns.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/tests/utils_tests/test_pinn.py +0 -0
- {jinns-0.8.10 → jinns-0.9.0}/tests/utils_tests/test_spinn.py +0 -0
|
@@ -0,0 +1,742 @@
|
|
|
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 0x7f3128134b60>"
|
|
221
|
+
]
|
|
222
|
+
},
|
|
223
|
+
"execution_count": 9,
|
|
224
|
+
"metadata": {},
|
|
225
|
+
"output_type": "execute_result"
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
"data": {
|
|
229
|
+
"image/png": "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4sQJHTp0SPHx8crPz+/17yQnJ2vKlCkqLS0Nud3lcikxMTFoAQAAw1dYgcXpdGru3Lnatm2bWebz+bRt2zbNnz+/z31jYmI0duxYtbe36ze/+Y1uv/32XuvW19fr6NGjysrKCqd5AABgmAr7ktCqVav0k5/8RC+//LIOHjyoe+65Rw0NDVqxYoUkaenSpVqzZo1Zf/fu3Xr11Vd17Ngx/eUvf9Ett9win8+nBx980KzzwAMPaMeOHTp+/LjeeecdLVy4UA6HQ3fcccdlOEUAADDURYW7w6JFi3T27Fk98sgjqqys1Jw5c7R161ZzIG55eXnQ+JTm5matXbtWx44dU3x8vG677Tb97Gc/U3Jyslnn1KlTuuOOO3T+/Hmlp6fr+uuv17vvvqv09PRLP0MAADDk2QzDMCLdiEvl8XiUlJQkt9vNeBYAAIaIcH6/eZYQAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwPAILAACwvAEFls2bN2vChAmKiYlRYWGh9uzZ02vdtrY2rV+/XhMnTlRMTIxmz56trVu3XtIxAQDAyBJ2YNmyZYtWrVqldevWad++fZo9e7aKi4tVXV0dsv7atWv14x//WM8++6wOHDiglStXauHChXr//fcHfEwAADCy2AzDMMLZobCwUNdee62ee+45SZLP51Nubq6+9rWvafXq1T3qZ2dn6zvf+Y7uvfdes+zzn/+8YmNj9V//9V8DOmZ3Ho9HSUlJcrvdSkxMDOd0AABAhITz+x1WD0tra6v27t2roqKizgPY7SoqKtKuXbtC7tPS0qKYmJigstjYWO3cufOSjunxeIIWAAAwfIUVWM6dOyev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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
|
+
"[train] Iteration 0: loss value = 4579.2685546875\n",
|
|
449
|
+
"[train] Iteration 1000: loss value = 304.64453125\n",
|
|
450
|
+
"[train] Iteration 2000: loss value = 232.64657592773438\n",
|
|
451
|
+
"[train] Iteration 3000: loss value = 140.8551025390625\n",
|
|
452
|
+
"[train] Iteration 4000: loss value = 96.11795806884766\n",
|
|
453
|
+
"[train] Iteration 5000: loss value = 57.21251678466797\n",
|
|
454
|
+
"[train] Iteration 6000: loss value = 35.71420669555664\n",
|
|
455
|
+
"[train] Iteration 7000: loss value = 23.839128494262695\n",
|
|
456
|
+
"[train] Iteration 8000: loss value = 16.650484085083008\n",
|
|
457
|
+
"[train] Iteration 9000: loss value = 10.906100273132324\n",
|
|
458
|
+
"[train] Iteration 10000: loss value = 6.855745792388916\n",
|
|
459
|
+
"[train] Iteration 11000: loss value = 5.925943374633789\n",
|
|
460
|
+
"[train] Iteration 12000: loss value = 3.5301716327667236\n",
|
|
461
|
+
"[train] Iteration 13000: loss value = 2.270451784133911\n",
|
|
462
|
+
"[train] Iteration 14000: loss value = 2.1983611583709717\n",
|
|
463
|
+
"[train] Iteration 15000: loss value = 1.4064264297485352\n",
|
|
464
|
+
"[train] Iteration 16000: loss value = 1.0398728847503662\n",
|
|
465
|
+
"[train] Iteration 17000: loss value = 1.0191876888275146\n",
|
|
466
|
+
"[train] Iteration 18000: loss value = 0.963868260383606\n",
|
|
467
|
+
"[train] Iteration 19000: loss value = 0.4404352605342865\n",
|
|
468
|
+
"[train] Iteration 20000: loss value = 0.2715303897857666\n",
|
|
469
|
+
"[train] Iteration 21000: loss value = 0.3339870572090149\n",
|
|
470
|
+
"[train] Iteration 22000: loss value = 0.17725801467895508\n",
|
|
471
|
+
"[train] Iteration 23000: loss value = 0.3611670434474945\n",
|
|
472
|
+
"[train] Iteration 24000: loss value = 0.24417775869369507\n",
|
|
473
|
+
"[train] Iteration 25000: loss value = 0.09074050188064575\n",
|
|
474
|
+
"[train] Iteration 26000: loss value = 0.09266147762537003\n",
|
|
475
|
+
"[train] Iteration 27000: loss value = 0.07710747420787811\n",
|
|
476
|
+
"[train] Iteration 28000: loss value = 0.10867039114236832\n",
|
|
477
|
+
"[train] Iteration 29000: loss value = 0.04160089045763016\n",
|
|
478
|
+
"[train] Iteration 30000: loss value = 0.17043082416057587\n",
|
|
479
|
+
"[train] Iteration 31000: loss value = 0.033933691680431366\n",
|
|
480
|
+
"[train] Iteration 32000: loss value = 0.04893612116575241\n",
|
|
481
|
+
"[train] Iteration 33000: loss value = 0.021169258281588554\n",
|
|
482
|
+
"[train] Iteration 34000: loss value = 0.13654358685016632\n",
|
|
483
|
+
"[train] Iteration 35000: loss value = 0.07444152235984802\n",
|
|
484
|
+
"[train] Iteration 36000: loss value = 0.10009226202964783\n",
|
|
485
|
+
"[train] Iteration 37000: loss value = 0.35801053047180176\n",
|
|
486
|
+
"[train] Iteration 38000: loss value = 0.055134765803813934\n",
|
|
487
|
+
"[train] Iteration 39000: loss value = 0.042534828186035156\n",
|
|
488
|
+
"[train] Iteration 40000: loss value = 0.030965741723775864\n",
|
|
489
|
+
"[train] Iteration 41000: loss value = 0.021195391193032265\n",
|
|
490
|
+
"[train] Iteration 42000: loss value = 0.06625193357467651\n",
|
|
491
|
+
"[train] Iteration 43000: loss value = 0.021496154367923737\n",
|
|
492
|
+
"[train] Iteration 44000: loss value = 0.029389843344688416\n",
|
|
493
|
+
"[train] Iteration 45000: loss value = 0.07728744298219681\n",
|
|
494
|
+
"[train] Iteration 46000: loss value = 0.01891605742275715\n",
|
|
495
|
+
"[train] Iteration 47000: loss value = 0.024891216307878494\n",
|
|
496
|
+
"[train] Iteration 48000: loss value = 0.04032273590564728\n",
|
|
497
|
+
"[train] Iteration 49000: loss value = 0.024339692667126656\n",
|
|
498
|
+
"Stopping main optimization loop, cause: max iteration is reached\n",
|
|
499
|
+
"Final iteration 50000: train loss value = 0.05933340638875961\n"
|
|
500
|
+
]
|
|
501
|
+
}
|
|
502
|
+
],
|
|
503
|
+
"source": [
|
|
504
|
+
"params, total_loss_list, loss_by_term_dict, data, loss, _, _ , _, _ = jinns.solve(\n",
|
|
505
|
+
" init_params=params,\n",
|
|
506
|
+
" data=train_data,\n",
|
|
507
|
+
" optimizer=tx,\n",
|
|
508
|
+
" loss=loss,\n",
|
|
509
|
+
" n_iter=n_iter\n",
|
|
510
|
+
")"
|
|
511
|
+
]
|
|
512
|
+
},
|
|
513
|
+
{
|
|
514
|
+
"cell_type": "code",
|
|
515
|
+
"execution_count": 20,
|
|
516
|
+
"id": "b65dfc33",
|
|
517
|
+
"metadata": {},
|
|
518
|
+
"outputs": [
|
|
519
|
+
{
|
|
520
|
+
"data": {
|
|
521
|
+
"text/plain": [
|
|
522
|
+
"Array(0.05933341, dtype=float32)"
|
|
523
|
+
]
|
|
524
|
+
},
|
|
525
|
+
"execution_count": 20,
|
|
526
|
+
"metadata": {},
|
|
527
|
+
"output_type": "execute_result"
|
|
528
|
+
}
|
|
529
|
+
],
|
|
530
|
+
"source": [
|
|
531
|
+
"total_loss_list[-1]"
|
|
532
|
+
]
|
|
533
|
+
},
|
|
534
|
+
{
|
|
535
|
+
"cell_type": "markdown",
|
|
536
|
+
"id": "1d0a1757",
|
|
537
|
+
"metadata": {},
|
|
538
|
+
"source": [
|
|
539
|
+
"## Results"
|
|
540
|
+
]
|
|
541
|
+
},
|
|
542
|
+
{
|
|
543
|
+
"cell_type": "markdown",
|
|
544
|
+
"id": "64c794ff",
|
|
545
|
+
"metadata": {},
|
|
546
|
+
"source": [
|
|
547
|
+
"Plot the loss values"
|
|
548
|
+
]
|
|
549
|
+
},
|
|
550
|
+
{
|
|
551
|
+
"cell_type": "code",
|
|
552
|
+
"execution_count": 21,
|
|
553
|
+
"id": "2cd778b4-d9d9-4f69-ad02-2a3f7eacf59d",
|
|
554
|
+
"metadata": {
|
|
555
|
+
"scrolled": true
|
|
556
|
+
},
|
|
557
|
+
"outputs": [
|
|
558
|
+
{
|
|
559
|
+
"data": {
|
|
560
|
+
"image/png": "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",
|
|
561
|
+
"text/plain": [
|
|
562
|
+
"<Figure size 640x480 with 1 Axes>"
|
|
563
|
+
]
|
|
564
|
+
},
|
|
565
|
+
"metadata": {},
|
|
566
|
+
"output_type": "display_data"
|
|
567
|
+
}
|
|
568
|
+
],
|
|
569
|
+
"source": [
|
|
570
|
+
"for loss_name, loss_values in loss_by_term_dict.items():\n",
|
|
571
|
+
" plt.plot(jnp.log10(loss_values), label=loss_name)\n",
|
|
572
|
+
"plt.plot(jnp.log10(total_loss_list), label=\"total loss\")\n",
|
|
573
|
+
"plt.legend()\n",
|
|
574
|
+
"plt.show();"
|
|
575
|
+
]
|
|
576
|
+
},
|
|
577
|
+
{
|
|
578
|
+
"cell_type": "markdown",
|
|
579
|
+
"id": "a6247171",
|
|
580
|
+
"metadata": {},
|
|
581
|
+
"source": [
|
|
582
|
+
"Plot the ODE solutions learned by the PINN"
|
|
583
|
+
]
|
|
584
|
+
},
|
|
585
|
+
{
|
|
586
|
+
"cell_type": "code",
|
|
587
|
+
"execution_count": 22,
|
|
588
|
+
"id": "6d473743-c9a8-4406-b18c-256496cfde59",
|
|
589
|
+
"metadata": {},
|
|
590
|
+
"outputs": [
|
|
591
|
+
{
|
|
592
|
+
"data": {
|
|
593
|
+
"text/plain": [
|
|
594
|
+
"<matplotlib.legend.Legend at 0x7f30e06a36b0>"
|
|
595
|
+
]
|
|
596
|
+
},
|
|
597
|
+
"execution_count": 22,
|
|
598
|
+
"metadata": {},
|
|
599
|
+
"output_type": "execute_result"
|
|
600
|
+
},
|
|
601
|
+
{
|
|
602
|
+
"data": {
|
|
603
|
+
"image/png": "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",
|
|
604
|
+
"text/plain": [
|
|
605
|
+
"<Figure size 640x480 with 1 Axes>"
|
|
606
|
+
]
|
|
607
|
+
},
|
|
608
|
+
"metadata": {},
|
|
609
|
+
"output_type": "display_data"
|
|
610
|
+
}
|
|
611
|
+
],
|
|
612
|
+
"source": [
|
|
613
|
+
"u_est_fp = vmap(lambda t:u(t, params[\"nn_params\"][\"0\"]), (0), 0)\n",
|
|
614
|
+
"v_est_fp = vmap(lambda t:u(t, params[\"nn_params\"][\"1\"]), (0), 0)\n",
|
|
615
|
+
"w_est_fp = vmap(lambda t:u(t, params[\"nn_params\"][\"2\"]), (0), 0)\n",
|
|
616
|
+
"\n",
|
|
617
|
+
"\n",
|
|
618
|
+
"key, subkey = random.split(key, 2)\n",
|
|
619
|
+
"val_data = jinns.data.DataGeneratorODE(subkey, n, tmin, tmax, batch_size, method)\n",
|
|
620
|
+
"\n",
|
|
621
|
+
"plt.plot(val_data.times.sort(axis=0) * Tmax, u_est_fp(val_data.times.sort(axis=0)), label=\"N1\")\n",
|
|
622
|
+
"plt.plot(val_data.times.sort(axis=0) * Tmax, v_est_fp(val_data.times.sort(axis=0)), label=\"N2\")\n",
|
|
623
|
+
"plt.plot(val_data.times.sort(axis=0) * Tmax, w_est_fp(val_data.times.sort(axis=0)), label=\"N3\")\n",
|
|
624
|
+
"\n",
|
|
625
|
+
"plt.legend()"
|
|
626
|
+
]
|
|
627
|
+
},
|
|
628
|
+
{
|
|
629
|
+
"cell_type": "markdown",
|
|
630
|
+
"id": "aed49c41",
|
|
631
|
+
"metadata": {},
|
|
632
|
+
"source": [
|
|
633
|
+
"## Compare with the scipy solver\n",
|
|
634
|
+
"Code from Lorenzo Sala"
|
|
635
|
+
]
|
|
636
|
+
},
|
|
637
|
+
{
|
|
638
|
+
"cell_type": "code",
|
|
639
|
+
"execution_count": 23,
|
|
640
|
+
"id": "484380a5",
|
|
641
|
+
"metadata": {},
|
|
642
|
+
"outputs": [
|
|
643
|
+
{
|
|
644
|
+
"data": {
|
|
645
|
+
"image/png": "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EJTvreN5PB7Ky8v94z3lk2GtFnv//fcNp9NpvP3228a6deuMO++804iLizNycnKsjuZ3HnjgAWP+/PnGtm3bjEWLFhmDBw82mjZtauTl5VkdzXJFRUXGypUrjZUrVxqA8eyzzxorV640duzYYRiGYUyZMsWIi4szZs+ebfz888/GiBEjjPT0dKO0tNTi5L53qteqqKjIePDBB43MzExj27ZtxjfffGP06tXLaN++vVFWVmZ1dJ8bO3as4XK5jPnz5xt79+71XkpKSrz73HXXXUZaWpoxb948Y9myZUZGRoaRkZFhYWprnO612rx5s/HEE08Yy5YtM7Zt22bMnj3baNOmjXHJJZdYnNz3Hn74YWPBggXGtm3bjJ9//tl4+OGHDZvNZnz99deGYVj/ngqK8mEYhvHiiy8aaWlphsPhMPr27WssWbLE6kh+6dprrzWaN29uOBwOo0WLFsa1115rbN682epYfuHbb781gBMut9xyi2EY5tdtH330USMpKclwOp3GoEGDjKysLGtDW+RUr1VJSYkxdOhQo1mzZkZYWJjRqlUr44477gjaXwZqe50A46233vLuU1paatx9991GkyZNjMjISOOqq64y9u7da11oi5zutdq5c6dxySWXGPHx8YbT6TTatWtn/M///I9RUFBgbXAL3H777UarVq0Mh8NhNGvWzBg0aJC3eBiG9e8pm2EYhm+OsYiIiIgEwZgPERER8S8qHyIiIuJTKh8iIiLiUyofIiIi4lMqHyIiIuJTKh8iIiLiUyofIiIi4lMqHyIiIuJTKh8iIiLiUyofIiIi4lMqHyIiIuJTKh8iIiLiU/8fy6z8wq7PDJwAAAAASUVORK5CYII=",
|
|
646
|
+
"text/plain": [
|
|
647
|
+
"<Figure size 640x480 with 1 Axes>"
|
|
648
|
+
]
|
|
649
|
+
},
|
|
650
|
+
"metadata": {},
|
|
651
|
+
"output_type": "display_data"
|
|
652
|
+
}
|
|
653
|
+
],
|
|
654
|
+
"source": [
|
|
655
|
+
"import numpy as np\n",
|
|
656
|
+
"from scipy.integrate import odeint\n",
|
|
657
|
+
"\n",
|
|
658
|
+
"def lotka_volterra_log(y_log, t, params):\n",
|
|
659
|
+
" \"\"\"\n",
|
|
660
|
+
" Generalized Lotka-Volterra model for N bacterial species, with logarithmic transformation for stability.\n",
|
|
661
|
+
"\n",
|
|
662
|
+
" Parameters:\n",
|
|
663
|
+
" y_log (array): Array of log-transformed bacterial populations.\n",
|
|
664
|
+
" t (float): Time.\n",
|
|
665
|
+
" params (tuple): Tuple of model parameters.\n",
|
|
666
|
+
"\n",
|
|
667
|
+
" Returns:\n",
|
|
668
|
+
" dydt (array): Array of derivative of log-transformed bacterial populations with respect to time.\n",
|
|
669
|
+
" \"\"\"\n",
|
|
670
|
+
" alpha, beta, gamma, _ = params\n",
|
|
671
|
+
" N = len(y_log)\n",
|
|
672
|
+
" y = np.exp(y_log)\n",
|
|
673
|
+
" dydt = np.zeros(N)\n",
|
|
674
|
+
"\n",
|
|
675
|
+
" for i in range(N):\n",
|
|
676
|
+
" dydt[i] = y[i] * (alpha[i] - beta[i] * np.sum(y) - np.sum([gamma[j][i] * y[j] for j in range(N)]))\n",
|
|
677
|
+
"\n",
|
|
678
|
+
" dydt_log = dydt / y\n",
|
|
679
|
+
"\n",
|
|
680
|
+
" return dydt_log\n",
|
|
681
|
+
"\n",
|
|
682
|
+
"# Define name bacteria\n",
|
|
683
|
+
"names = ['N1', 'N2', 'N3']\n",
|
|
684
|
+
"N = len(names)\n",
|
|
685
|
+
"\n",
|
|
686
|
+
"# Define model parameters\n",
|
|
687
|
+
"death_rates = None\n",
|
|
688
|
+
"params = (growth_rates, carrying_capacities, interactions, death_rates)\n",
|
|
689
|
+
"\n",
|
|
690
|
+
"# Define initial bacterial populations\n",
|
|
691
|
+
"y0 = [10, 7, 4] #[0.26, 0.37, 0.57] #\n",
|
|
692
|
+
"\n",
|
|
693
|
+
"# Define time points\n",
|
|
694
|
+
"Tmax = 30\n",
|
|
695
|
+
"t = np.linspace(0, Tmax, 1000)\n",
|
|
696
|
+
"\n",
|
|
697
|
+
"############################\n",
|
|
698
|
+
"\n",
|
|
699
|
+
"y0_log = np.log(y0)\n",
|
|
700
|
+
"y_log = odeint(lotka_volterra_log, y0_log, t, args=(params,))\n",
|
|
701
|
+
"y = np.exp(y_log)\n",
|
|
702
|
+
"\n",
|
|
703
|
+
"for i in range(N):\n",
|
|
704
|
+
" plt.plot(t, y[:,i], label=names[i])"
|
|
705
|
+
]
|
|
706
|
+
},
|
|
707
|
+
{
|
|
708
|
+
"cell_type": "code",
|
|
709
|
+
"execution_count": null,
|
|
710
|
+
"id": "e962c046",
|
|
711
|
+
"metadata": {},
|
|
712
|
+
"outputs": [],
|
|
713
|
+
"source": []
|
|
714
|
+
}
|
|
715
|
+
],
|
|
716
|
+
"metadata": {
|
|
717
|
+
"kernelspec": {
|
|
718
|
+
"display_name": "Python 3 (ipykernel)",
|
|
719
|
+
"language": "python",
|
|
720
|
+
"name": "python3"
|
|
721
|
+
},
|
|
722
|
+
"language_info": {
|
|
723
|
+
"codemirror_mode": {
|
|
724
|
+
"name": "ipython",
|
|
725
|
+
"version": 3
|
|
726
|
+
},
|
|
727
|
+
"file_extension": ".py",
|
|
728
|
+
"mimetype": "text/x-python",
|
|
729
|
+
"name": "python",
|
|
730
|
+
"nbconvert_exporter": "python",
|
|
731
|
+
"pygments_lexer": "ipython3",
|
|
732
|
+
"version": "3.12.1"
|
|
733
|
+
},
|
|
734
|
+
"vscode": {
|
|
735
|
+
"interpreter": {
|
|
736
|
+
"hash": "991718e94fb5d91fa62c7598521d2199c208ff1ff700f1ac060f334be0bee194"
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
},
|
|
740
|
+
"nbformat": 4,
|
|
741
|
+
"nbformat_minor": 5
|
|
742
|
+
}
|