From 374590876c664224f7ad0c7cf2ebcd1b3f14b563 Mon Sep 17 00:00:00 2001 From: Markus Date: Wed, 26 Dec 2018 22:03:46 -0200 Subject: [PATCH] predator/prey model --- demos/predator_prey.ipynb | 77 ++++++++++++++++++++++++++++++++++++++ demos/predator_prey_1.py | 79 +++++++++++++++++++++++++++++++++++++++ demos/predator_prey_2.py | 79 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 235 insertions(+) create mode 100644 demos/predator_prey.ipynb create mode 100644 demos/predator_prey_1.py create mode 100644 demos/predator_prey_2.py diff --git a/demos/predator_prey.ipynb b/demos/predator_prey.ipynb new file mode 100644 index 0000000..f4a588a --- /dev/null +++ b/demos/predator_prey.ipynb @@ -0,0 +1,77 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "multi_proc: [, ]\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "import pandas as pd\n", + "from tabulate import tabulate\n", + "\n", + "from SimCAD.engine import ExecutionMode, ExecutionContext, Executor\n", + "from demos import predator_prey_1, predator_prey_2\n", + "from SimCAD import configs\n", + "\n", + "exec_mode = ExecutionMode()\n", + "\n", + "\n", + "multi_proc_ctx = ExecutionContext(context=exec_mode.multi_proc)\n", + "run = Executor(exec_context=multi_proc_ctx, configs=configs)\n", + "for raw_result, tensor_field in run.main():\n", + " result = pd.DataFrame(raw_result)\n", + " result.plot('timestamp', ['Prey','Predator'])" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/demos/predator_prey_1.py b/demos/predator_prey_1.py new file mode 100644 index 0000000..04777fa --- /dev/null +++ b/demos/predator_prey_1.py @@ -0,0 +1,79 @@ +from decimal import Decimal +import numpy as np +from datetime import timedelta + +from SimCAD import configs +from SimCAD.configuration import Configuration +from SimCAD.configuration.utils import exo_update_per_ts, proc_trigger, bound_norm_random, \ + ep_time_step + +seed = { +} + +# Behaviors +# There are no behaviors in this example + +# Mechanisms +# There are no mechanisms in this example + +# Parameters +alfa = 1.1e-3 +beta = 0.4e-3 +gama = 0.4e-3 +delta = 0.1e-3 + +# Exogenous States +def prey_model(step, sL, s, _input): + y = 'Prey' + x = s['Prey'] + alfa*s['Prey'] - beta*s['Prey']*s['Predator'] + return (y, x) + +def predator_model(step, sL, s, _input): + y = 'Predator' + x = s['Predator'] + delta*s['Prey']*s['Predator'] - gama*s['Predator'] + return (y, x) + +ts_format = '%Y-%m-%d %H:%M:%S' +t_delta = timedelta(days=0, minutes=0, seconds=1) +def time_model(step, sL, s, _input): + y = 'timestamp' + x = ep_time_step(s, dt_str=s['timestamp'], fromat_str=ts_format, _timedelta=t_delta) + return (y, x) + +# Genesis States +genesis_states = { + 'Prey': 10, + 'Predator': 10, + 'timestamp': '2018-01-01 00:00:00' +} + +# remove `exo_update_per_ts` to update every ts +exogenous_states = exo_update_per_ts( + { + 'Prey': prey_model, + 'Predator': predator_model, + 'timestamp': time_model + } +) + +env_processes = { +} + +mechanisms = { +} + +sim_config = { + 'N': 1, + 'T': range(50000) +} + +configs.append( + Configuration( + sim_config=sim_config, + state_dict=genesis_states, + seed=seed, + exogenous_states=exogenous_states, + env_processes=env_processes, + mechanisms=mechanisms + ) +) diff --git a/demos/predator_prey_2.py b/demos/predator_prey_2.py new file mode 100644 index 0000000..0a64768 --- /dev/null +++ b/demos/predator_prey_2.py @@ -0,0 +1,79 @@ +from decimal import Decimal +import numpy as np +from datetime import timedelta + +from SimCAD import configs +from SimCAD.configuration import Configuration +from SimCAD.configuration.utils import exo_update_per_ts, proc_trigger, bound_norm_random, \ + ep_time_step + +seed = { +} + +# Behaviors +# There are no behaviors in this example + +# Mechanisms +# There are no mechanisms in this example + +# Parameters +alfa = 0.8e-3 +beta = 0.4e-3 +gama = 0.4e-3 +delta = 0.1e-3 + +# Exogenous States +def prey_model(step, sL, s, _input): + y = 'Prey' + x = s['Prey'] + alfa*s['Prey'] - beta*s['Prey']*s['Predator'] + return (y, x) + +def predator_model(step, sL, s, _input): + y = 'Predator' + x = s['Predator'] + delta*s['Prey']*s['Predator'] - gama*s['Predator'] + return (y, x) + +ts_format = '%Y-%m-%d %H:%M:%S' +t_delta = timedelta(days=0, minutes=0, seconds=1) +def time_model(step, sL, s, _input): + y = 'timestamp' + x = ep_time_step(s, dt_str=s['timestamp'], fromat_str=ts_format, _timedelta=t_delta) + return (y, x) + +# Genesis States +genesis_states = { + 'Prey': 10, + 'Predator': 10, + 'timestamp': '2018-01-01 00:00:00' +} + +# remove `exo_update_per_ts` to update every ts +exogenous_states = exo_update_per_ts( + { + 'Prey': prey_model, + 'Predator': predator_model, + 'timestamp': time_model + } +) + +env_processes = { +} + +mechanisms = { +} + +sim_config = { + 'N': 1, + 'T': range(50000) +} + +configs.append( + Configuration( + sim_config=sim_config, + state_dict=genesis_states, + seed=seed, + exogenous_states=exogenous_states, + env_processes=env_processes, + mechanisms=mechanisms + ) +)