diff --git a/Documentation/CHANGELOG.md b/Documentation/CHANGELOG.md index 9ec54333c..d91d204f1 100644 --- a/Documentation/CHANGELOG.md +++ b/Documentation/CHANGELOG.md @@ -16,6 +16,7 @@ Release Date: TBD - Adds `HARK.core.AgentPopulation` class to represent a population of agents with ex-ante heterogeneous parametrizations as distributions. [#1237](https://github.com/econ-ark/HARK/pull/1237) - Adds `HARK.core.Parameters` class to represent a collection of time varying and time invariant parameters in a model. [#1240](https://github.com/econ-ark/HARK/pull/1240) +- Adds `HARK.simulation.monte_carlo` module for generic Monte Carlo simulation functions using Python model configurations. [1296](https://github.com/econ-ark/HARK/pull/1296) ### Minor Changes @@ -26,6 +27,8 @@ Release Date: TBD - Fixes bug that prevented risky-asset consumer types from working with time-varying interest rates `Rfree`. [1343](https://github.com/econ-ark/HARK/pull/1343) - Overhauls and expands condition checking for the ConsIndShock model [#1294](https://github.com/econ-ark/HARK/pull/1294). Condition values and a description of their interpretation is stored in the bilt dictionary of IndShockConsumerType. - Creates a `models/` directory with Python model configurations for perfect foresight and Fisher 2-period models. [1347](https://github.com/econ-ark/HARK/pull/1347) +- Fixes bug in AgentType simulations where 'who_dies' for period t was being recorded in period t-1in the history Carlo simulation functions using Python model configurations.[1296](https://github.com/econ-ark/HARK/pull/1296) +- Removes unused `simulation.py` .[1296](https://github.com/econ-ark/HARK/pull/1296) ### 0.13.0 diff --git a/Documentation/reference/index.rst b/Documentation/reference/index.rst index 1d9cced2f..de65cad62 100644 --- a/Documentation/reference/index.rst +++ b/Documentation/reference/index.rst @@ -13,6 +13,7 @@ API Reference tools/frame tools/helpers tools/interpolation + tools/model tools/numba_tools tools/parallel tools/rewards diff --git a/Documentation/reference/tools/model.rst b/Documentation/reference/tools/model.rst new file mode 100644 index 000000000..141b2ac93 --- /dev/null +++ b/Documentation/reference/tools/model.rst @@ -0,0 +1,7 @@ +Model +------------- + +.. automodule:: HARK.model + :members: + :undoc-members: + :show-inheritance: diff --git a/Documentation/reference/tools/simulation.rst b/Documentation/reference/tools/simulation.rst index 55e17756f..a56040159 100644 --- a/Documentation/reference/tools/simulation.rst +++ b/Documentation/reference/tools/simulation.rst @@ -1,7 +1,7 @@ Simulation ------------ -.. automodule:: HARK.simulation +.. automodule:: HARK.simulation.monte_carlo :members: :undoc-members: :show-inheritance: diff --git a/HARK/core.py b/HARK/core.py index c2ec0ebd1..71a79e2a9 100644 --- a/HARK/core.py +++ b/HARK/core.py @@ -7,6 +7,7 @@ problem by finding a general equilibrium dynamic rule. """ # Set logging and define basic functions +# Set logging and define basic functions import logging import sys from collections import defaultdict, namedtuple @@ -1061,7 +1062,14 @@ def simulate(self, sim_periods=None): elif var_name in self.controls: self.history[var_name][self.t_sim, :] = self.controls[var_name] else: - self.history[var_name][self.t_sim, :] = getattr(self, var_name) + if var_name == "who_dies" and self.t_sim > 1: + self.history[var_name][self.t_sim - 1, :] = getattr( + self, var_name + ) + else: + self.history[var_name][self.t_sim, :] = getattr( + self, var_name + ) self.t_sim += 1 return self.history diff --git a/HARK/model.py b/HARK/model.py index b03734338..44e47261b 100644 --- a/HARK/model.py +++ b/HARK/model.py @@ -2,10 +2,28 @@ Tools for crafting models. """ +from HARK.distribution import Distribution + + +class Aggregate: + """ + Used to designate a shock as an aggregate shock. + If so designated, draws from the shock will be scalar rather + than array valued. + """ + + def __init__(self, dist: Distribution): + self.dist = dist + class Control: """ - Should go in different model support module. + Used to designate a variabel that is a control variable. + + Parameters + ---------- + args : list of str + The labels of the variables that are in the information set of this control. """ def __init__(self, args): diff --git a/HARK/models/__init__.py b/HARK/models/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/HARK/models/perfect_foresight.py b/HARK/models/perfect_foresight.py index 4c3ceb3e3..38bedd97d 100644 --- a/HARK/models/perfect_foresight.py +++ b/HARK/models/perfect_foresight.py @@ -20,9 +20,9 @@ "BoroCnstArt": None, }, "dynamics": { + "y": lambda p: p, "m": lambda Rfree, a, y: Rfree * a + y, "c": Control(["m"]), - "y": lambda p: p, "p": lambda PermGroFac, p: PermGroFac * p, "a": lambda m, c: m - c, }, diff --git a/HARK/models/perfect_foresight_normalized.py b/HARK/models/perfect_foresight_normalized.py new file mode 100644 index 000000000..79fab78dc --- /dev/null +++ b/HARK/models/perfect_foresight_normalized.py @@ -0,0 +1,31 @@ +from HARK.distribution import Bernoulli +from HARK.model import Control + +# This way of distributing parameters across the scope is clunky +# Can be handled better if parsed from a YAML file, probably +# But it would be better to have a more graceful Python version as well. +CRRA = (2.0,) +LivPrb = 0.98 + +model = { + "shocks": { + "live": Bernoulli(p=LivPrb), + }, + "parameters": { + "DiscFac": 0.96, + "CRRA": CRRA, + "Rfree": 1.03, + "LivPrb": LivPrb, + "PermGroFac": 1.01, + "BoroCnstArt": None, + }, + "dynamics": { + "p": lambda PermGroFac, p: PermGroFac * p, + "r_eff": lambda Rfree, PermGroFac: Rfree / PermGroFac, + "b_nrm": lambda r_eff, a_nrm: r_eff * a_nrm, + "m_nrm": lambda b_nrm: b_nrm + 1, + "c_nrm": Control(["m_nrm"]), + "a_nrm": lambda m_nrm, c_nrm: m_nrm - c_nrm, + }, + "reward": {"u": lambda c: c ** (1 - CRRA) / (1 - CRRA)}, +} diff --git a/HARK/simulation.py b/HARK/simulation.py deleted file mode 100644 index 918e4e377..000000000 --- a/HARK/simulation.py +++ /dev/null @@ -1,7 +0,0 @@ -""" -Currently empty. Will be used for future simulation handling code. -""" - -import warnings # A library for runtime warnings - -import numpy as np # Numerical Python diff --git a/HARK/simulation/__init__.py b/HARK/simulation/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/HARK/simulation/monte_carlo.py b/HARK/simulation/monte_carlo.py new file mode 100644 index 000000000..13a3e34af --- /dev/null +++ b/HARK/simulation/monte_carlo.py @@ -0,0 +1,450 @@ +""" +Functions to support Monte Carlo simulation of models. +""" + +from copy import copy +from inspect import signature +from typing import Any, Callable, Mapping, Sequence, Union + +import numpy as np + +from HARK.distribution import ( + Distribution, + IndexDistribution, + TimeVaryingDiscreteDistribution, +) +from HARK.model import Aggregate, Control + + +def draw_shocks(shocks: Mapping[str, Distribution], conditions: Sequence[int]): + """ + Draw from each shock distribution values, subject to given conditions. + + Parameters + ------------ + shocks Mapping[str, Distribution] + A dictionary-like mapping from shock names to distributions from which to draw + + conditions: Sequence[int] + An array of conditions, one for each agent. + Typically these will be agent ages. + + Parameters + ------------ + draws : Mapping[str, Sequence] + A mapping from shock names to drawn shock values. + """ + draws = {} + + for shock_var in shocks: + shock = shocks[shock_var] + + if isinstance(shock, (int, float)): + draws[shock_var] = np.ones(len(conditions)) * shock + elif isinstance(shock, Aggregate): + draws[shock_var] = shock.dist.draw(1)[0] + elif isinstance(shock, IndexDistribution) or isinstance( + shock, TimeVaryingDiscreteDistribution + ): + ## TODO his type test is awkward. They should share a superclass. + draws[shock_var] = shock.draw(conditions) + else: + draws[shock_var] = shock.draw(len(conditions)) + + return draws + + +def simulate_dynamics( + dynamics: Mapping[str, Union[Callable, Control]], + pre: Mapping[str, Any], + dr: Mapping[str, Callable], +): + """ + From the beginning-of-period state (pre), follow the dynamics, + including any decision rules, to compute the end-of-period state. + + Parameters + ------------ + + dynamics: Mapping[str, Callable] + Maps variable names to functions from variables to values. + Can include Controls + ## TODO: Make collection of equations into a named type + + + pre : Mapping[str, Any] + Bound values for all variables that must be known before beginning the period's dynamics. + + + dr : Mapping[str, Callable] + Decision rules for all the Control variables in the dynamics. + """ + vals = pre.copy() + + for varn in dynamics: + # Using the fact that Python dictionaries are ordered + + feq = dynamics[varn] + + if isinstance(feq, Control): + # This tests if the decision rule is age varying. + # If it is, this will be a vector with the decision rule for each agent. + if isinstance(dr[varn], np.ndarray): + ## Now we have to loop through each agent, and apply the decision rule. + ## This is quite slow. + for i in range(dr[varn].size): + vals_i = { + var: vals[var][i] + if isinstance(vals[var], np.ndarray) + else vals[var] + for var in vals + } + vals[varn][i] = dr[varn][i]( + *[vals_i[var] for var in signature(dr[varn][i]).parameters] + ) + else: + vals[varn] = dr[varn]( + *[vals[var] for var in signature(dr[varn]).parameters] + ) # TODO: test for signature match with Control + else: + vals[varn] = feq(*[vals[var] for var in signature(feq).parameters]) + + return vals + + +def parameters_by_age(ages, parameters): + """ + Returns parameters for this model, but with vectorized + values which map age-varying values to agent ages. + + Parameters + ---------- + ages: np.array + An array of agent ages. + + parameters: dict + A parameters dictionary + + Returns + -------- + aged_parameters: dict + A dictionary of parameter values. + If a parameter is age-varying, the value is a vector + corresponding to the values for each input age. + """ + + def aged_param(ages, p_value): + if isinstance(p_value, (float, int)) or callable(p_value): + return p_value + elif isinstance(p_value, list) and len(p_value) > 1: + pv_array = np.array(p_value) + + return np.apply_along_axis(lambda a: pv_array[a], 0, ages) + else: + return np.empty(ages.size) + + return {p: aged_param(ages, parameters[p]) for p in parameters} + + +class Simulator: + pass + + +class AgentTypeMonteCarloSimulator(Simulator): + """ + A Monte Carlo simulation engine based on the HARK.core.AgentType framework. + + Unlike HARK.core.AgentType, this class does not do any model solving, + and depends on dynamic equations, shocks, and decision rules paased into it. + + The purpose of this class is to provide a way to simulate models without + relying on inheritance from the AgentType class. + + This simulator makes assumptions about population birth and mortality which + are not generic. All agents are replaced with newborns when they expire. + + Parameters + ------------ + parameters: Mapping[str, Any] + + shocks: Mapping[str, Distribution] + + dynamics: Mapping[str, Union[Callable, Control]] + + dr: Mapping[str, Callable] + + initial: dict + + seed : int + A seed for this instance's random number generator. + + Attributes + ---------- + agent_count : int + The number of agents of this type to use in simulation. + + T_sim : int + The number of periods to simulate. + """ + + state_vars = [] + + def __init__( + self, parameters, shocks, dynamics, dr, initial, seed=0, agent_count=1, T_sim=10 + ): + super().__init__() + + self.parameters = parameters + self.shocks = shocks + self.dynamics = dynamics + self.dr = dr + self.initial = initial + + self.seed = seed # NOQA + self.agent_count = agent_count + self.T_sim = T_sim + + # changes here from HARK.core.AgentType + self.vars = list(shocks.keys()) + list(dynamics.keys()) + + self.vars_now = {v: None for v in self.vars} + self.vars_prev = self.vars_now.copy() + + self.read_shocks = False # NOQA + self.shock_history = {} + self.newborn_init_history = {} + self.history = {} + + self.reset_rng() # NOQA + + def reset_rng(self): + """ + Reset the random number generator for this type. + """ + self.RNG = np.random.default_rng(self.seed) + + def initialize_sim(self): + """ + Prepares for a new simulation. Resets the internal random number generator, + makes initial states for all agents (using sim_birth), clears histories of tracked variables. + """ + if self.T_sim <= 0: + raise Exception( + "T_sim represents the largest number of observations " + + "that can be simulated for an agent, and must be a positive number." + ) + + self.reset_rng() + self.t_sim = 0 + all_agents = np.ones(self.agent_count, dtype=bool) + blank_array = np.empty(self.agent_count) + blank_array[:] = np.nan + for var in self.vars: + if self.vars_now[var] is None: + self.vars_now[var] = copy(blank_array) + + self.t_age = np.zeros( + self.agent_count, dtype=int + ) # Number of periods since agent entry + self.t_cycle = np.zeros( + self.agent_count, dtype=int + ) # Which cycle period each agent is on + + # Get recorded newborn conditions or initialize blank history. + if self.read_shocks and bool(self.newborn_init_history): + for init_var_name in self.initial: + self.vars_now[init_var_name] = self.newborn_init_history[init_var_name][ + self.t_sim, : + ] + else: + for var_name in self.initial: + self.newborn_init_history[var_name] = ( + np.zeros((self.T_sim, self.agent_count)) + np.nan + ) + + self.sim_birth(all_agents) + + self.clear_history() + return None + + def sim_one_period(self): + """ + Simulates one period for this type. Calls the methods get_mortality(), get_shocks() or + read_shocks, get_states(), get_controls(), and get_poststates(). These should be defined for + AgentType subclasses, except get_mortality (define its components sim_death and sim_birth + instead) and read_shocks. + """ + # Mortality adjusts the agent population + self.get_mortality() # Replace some agents with "newborns" + + # state_{t-1} + for var in self.vars: + self.vars_prev[var] = self.vars_now[var] + + if isinstance(self.vars_now[var], np.ndarray): + self.vars_now[var] = np.empty(self.agent_count) + self.vars_now[var][:] = np.nan + else: + # Probably an aggregate variable. It may be getting set by the Market. + pass + + shocks_now = {} + + if self.read_shocks: # If shock histories have been pre-specified, use those + for var_name in self.shocks: + shocks_now[var_name] = self.shock_history[var_name][self.t_sim, :] + else: + ### BIG CHANGES HERE from HARK.core.AgentType + shocks_now = draw_shocks(self.shocks, self.t_age) + + pre = parameters_by_age(self.t_age, self.parameters) + + pre.update(self.vars_prev) + pre.update(shocks_now) + # Won't work for 3.8: self.parameters | self.vars_prev | shocks_now + + # Age-varying decision rules captured here + dr = parameters_by_age(self.t_age, self.dr) + + post = simulate_dynamics(self.dynamics, pre, dr) + + self.vars_now = post + ### BIG CHANGES HERE + + # Advance time for all agents + self.t_age = self.t_age + 1 # Age all consumers by one period + + # What will we do with cycles? + # self.t_cycle = self.t_cycle + 1 # Age all consumers within their cycle + # self.t_cycle[ + # self.t_cycle == self.T_cycle + # ] = 0 # Resetting to zero for those who have reached the end + + def make_shock_history(self): + """ + Makes a pre-specified history of shocks for the simulation. Shock variables should be named + in self.shock, a mapping from shock names to distributions. This method runs a subset + of the standard simulation loop by simulating only mortality and shocks; each variable named + in shocks is stored in a T_sim x agent_count array in history dictionary self.history[X]. + Automatically sets self.read_shocks to True so that these pre-specified shocks are used for + all subsequent calls to simulate(). + + Returns + ------- + shock_history: dict + The subset of simulation history that are the shocks for each agent and time. + """ + # Re-initialize the simulation + self.initialize_sim() + self.simulate() + + for shock_name in self.shocks: + self.shock_history[shock_name] = self.history[shock_name] + + # Flag that shocks can be read rather than simulated + self.read_shocks = True + self.clear_history() + + return self.shock_history + + def get_mortality(self): + """ + Simulates mortality or agent turnover. + Agents die when their states `live` is less than or equal to zero. + """ + who_dies = self.vars_now["live"] <= 0 + + self.sim_birth(who_dies) + + self.who_dies = who_dies + return None + + def sim_birth(self, which_agents): + """ + Makes new agents for the simulation. Takes a boolean array as an input, indicating which + agent indices are to be "born". Does nothing by default, must be overwritten by a subclass. + + Parameters + ---------- + which_agents : np.array(Bool) + Boolean array of size self.agent_count indicating which agents should be "born". + + Returns + ------- + None + """ + if self.read_shocks: + t = self.t_sim + initial_vals = { + init_var: self.newborn_init_history[init_var][t, which_agents] + for init_var in self.initial + } + + else: + initial_vals = draw_shocks(self.initial, np.zeros(which_agents.sum())) + + if np.sum(which_agents) > 0: + for varn in initial_vals: + self.vars_now[varn][which_agents] = initial_vals[varn] + self.newborn_init_history[varn][ + self.t_sim, which_agents + ] = initial_vals[varn] + + self.t_age[which_agents] = 0 + self.t_cycle[which_agents] = 0 + + def simulate(self, sim_periods=None): + """ + Simulates this agent type for a given number of periods. Defaults to + self.T_sim if no input. + Records histories of attributes named in self.track_vars in + self.history[varname]. + + Parameters + ---------- + None + + Returns + ------- + history : dict + The history tracked during the simulation. + """ + if not hasattr(self, "t_sim"): + raise Exception( + "It seems that the simulation variables were not initialize before calling " + + "simulate(). Call initialize_sim() to initialize the variables before calling simulate() again." + ) + if sim_periods is not None and self.T_sim < sim_periods: + raise Exception( + "To simulate, sim_periods has to be larger than the maximum data set size " + + "T_sim. Either increase the attribute T_sim of this agent type instance " + + "and call the initialize_sim() method again, or set sim_periods <= T_sim." + ) + + # Ignore floating point "errors". Numpy calls it "errors", but really it's excep- + # tions with well-defined answers such as 1.0/0.0 that is np.inf, -1.0/0.0 that is + # -np.inf, np.inf/np.inf is np.nan and so on. + with np.errstate( + divide="ignore", over="ignore", under="ignore", invalid="ignore" + ): + if sim_periods is None: + sim_periods = self.T_sim + + for t in range(sim_periods): + self.sim_one_period() + + # track all the vars -- shocks and dynamics + for var_name in self.vars: + self.history[var_name][self.t_sim, :] = self.vars_now[var_name] + + self.t_sim += 1 + + return self.history + + def clear_history(self): + """ + Clears the histories. + """ + for var_name in self.vars: + self.history[var_name] = np.empty((self.T_sim, self.agent_count)) + self.history[var_name].fill(np.nan) diff --git a/HARK/simulation/test_monte_carlo.py b/HARK/simulation/test_monte_carlo.py new file mode 100644 index 000000000..bb1620c3c --- /dev/null +++ b/HARK/simulation/test_monte_carlo.py @@ -0,0 +1,160 @@ +""" +This file implements unit tests for the Monte Carlo simulation module +""" +import unittest + +from HARK.distribution import Bernoulli, IndexDistribution, MeanOneLogNormal +from HARK.model import Aggregate, Control +from HARK.simulation.monte_carlo import * + +cons_shocks = { + "agg_gro": Aggregate(MeanOneLogNormal(1)), + "psi": IndexDistribution(MeanOneLogNormal, {"sigma": [1.0, 1.1]}), + "theta": MeanOneLogNormal(1), + "live": Bernoulli(p=0.98), +} + +cons_pre = { + "R": 1.05, + "aNrm": 1, + "gamma": 1.1, + "psi": 1.1, # TODO: draw this from a shock, + "theta": 1.1, # TODO: draw this from a shock +} + +cons_dynamics = { + "G": lambda gamma, psi: gamma * psi, + "Rnrm": lambda R, G: R / G, + "bNrm": lambda Rnrm, aNrm: Rnrm * aNrm, + "mNrm": lambda bNrm, theta: bNrm + theta, + "cNrm": Control(["mNrm"]), + "aNrm": lambda mNrm, cNrm: mNrm - cNrm, +} + +cons_dr = {"cNrm": lambda mNrm: mNrm / 2} + + +class test_draw_shocks(unittest.TestCase): + def test_draw_shocks(self): + drawn = draw_shocks(cons_shocks, np.array([0, 1])) + + self.assertEqual(len(drawn["theta"]), 2) + self.assertEqual(len(drawn["psi"]), 2) + self.assertTrue(isinstance(drawn["agg_gro"], float)) + + +class test_simulate_dynamics(unittest.TestCase): + def test_simulate_dynamics(self): + post = simulate_dynamics(cons_dynamics, cons_pre, cons_dr) + + self.assertAlmostEqual(post["cNrm"], 0.98388429) + + +class test_AgentTypeMonteCarloSimulator(unittest.TestCase): + def setUp(self): + self.shocks = { + "theta": MeanOneLogNormal(1), + "agg_R": Aggregate(MeanOneLogNormal(1)), + "live": Bernoulli(p=0.98), + } + + self.initial = {"a": MeanOneLogNormal(1), "live": 1} + + self.parameters = { # TODO + "G": 1.05, + } + + self.dynamics = { + "b": lambda agg_R, G, a: agg_R * G * a, + "m": lambda b, theta: b + theta, + "c": Control(["m"]), + "a": lambda m, c: m - c, + } + + self.dr = {"c": lambda m: m / 2} + + def test_simulate(self): + self.simulator = AgentTypeMonteCarloSimulator( + self.parameters, + self.shocks, + self.dynamics, + self.dr, + self.initial, + agent_count=3, + ) + + self.simulator.initialize_sim() + history = self.simulator.simulate() + + a1 = history["a"][5] + b1 = ( + history["a"][4] * history["agg_R"][5] * self.parameters["G"] + + history["theta"][5] + - history["c"][5] + ) + + self.assertTrue((a1 == b1).all()) + + def test_make_shock_history(self): + self.simulator = AgentTypeMonteCarloSimulator( + self.parameters, + self.shocks, + self.dynamics, + self.dr, + self.initial, + agent_count=3, + ) + + self.simulator.make_shock_history() + + newborn_init_1 = self.simulator.newborn_init_history.copy() + shocks_1 = self.simulator.shock_history.copy() + + self.simulator.initialize_sim() + self.simulator.simulate() + + self.assertEqual(newborn_init_1, self.simulator.newborn_init_history) + self.assertTrue(np.all(self.simulator.history["theta"] == shocks_1["theta"])) + + +class test_AgentTypeMonteCarloSimulatorAgeVariance(unittest.TestCase): + def setUp(self): + self.shocks = { + "theta": MeanOneLogNormal(1), + "agg_R": Aggregate(MeanOneLogNormal(1)), + "live": Bernoulli(p=0.98), + "psi": IndexDistribution(MeanOneLogNormal, {"sigma": [1.0, 1.1]}), + } + + self.initial = {"a": MeanOneLogNormal(1), "live": 1} + + self.parameters = { # TODO + "G": 1.05, + } + + self.dynamics = { + "b": lambda agg_R, G, a: agg_R * G * a, + "m": lambda b, theta: b + theta, + "c": Control(["m"]), + "a": lambda m, c: m - c, + } + + self.dr = {"c": [lambda m: m * 0.5, lambda m: m * 0.9]} + + def test_simulate(self): + self.simulator = AgentTypeMonteCarloSimulator( + self.parameters, + self.shocks, + self.dynamics, + self.dr, + self.initial, + agent_count=3, + ) + + self.simulator.initialize_sim() + history = self.simulator.simulate(sim_periods=2) + + a1 = history["a"][1] + b1 = history["m"][1] - self.dr["c"][1](history["m"][1]) + + self.assertTrue((a1 == b1).all()) diff --git a/examples/MonteCarlo/Generic Monte Carlo Perfect Foresight.ipynb b/examples/MonteCarlo/Generic Monte Carlo Perfect Foresight.ipynb new file mode 100644 index 000000000..2699e7125 --- /dev/null +++ b/examples/MonteCarlo/Generic Monte Carlo Perfect Foresight.ipynb @@ -0,0 +1,1933 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "be704ca8", + "metadata": {}, + "outputs": [], + "source": [ + "from HARK.ConsumptionSaving.ConsIndShockModel import PerfForesightConsumerType\n", + "from HARK.distribution import Bernoulli\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "id": "d0698156", + "metadata": {}, + "source": [ + "## Original Perfect Foresight Example" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "83e6f76e", + "metadata": {}, + "outputs": [], + "source": [ + "PFexample = PerfForesightConsumerType()\n", + "PFexample.cycles = 0\n", + "\n", + "SimulationParams = {\n", + " \"AgentCount\": 3, # Number of agents of this type\n", + " \"T_sim\": 120, # Number of periods to simulate\n", + " \"aNrmInitMean\": -6.0, # Mean of log initial assets\n", + " \"aNrmInitStd\": 0, # 1.0, # Standard deviation of log initial assets\n", + " \"pLvlInitMean\": 0.0, # Mean of log initial permanent income\n", + " \"pLvlInitStd\": 0.0, # Standard deviation of log initial permanent income\n", + " \"PermGroFacAgg\": 1.0, # Aggregate permanent income growth factor\n", + " \"T_age\": None, # Age after which simulated agents are automatically killed,\n", + " \"LivPrb\": [0.98],\n", + "}\n", + "\n", + "PFexample.assign_parameters(**SimulationParams)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "e0f219ec", + "metadata": {}, + "outputs": [], + "source": [ + "PFexample.solve()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "c3981c6d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "PFexample" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "66cc08fb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'who_dies': array([[ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 1.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 1., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 1.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 1., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 1., 0., 0.],\n", + " [ 0., 1., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 1., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 1., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 0.],\n", + " [ 0., 0., 1.],\n", + " [ 0., 0., 0.],\n", + " [nan, nan, nan]]),\n", + " 'mNrm': array([[ 1.00252784, 1.00252784, 1.00252784],\n", + " [ -0.30338194, -0.30338194, -0.30338194],\n", + " [ -1.57617872, -1.57617872, -1.57617872],\n", + " [ -2.81670212, -2.81670212, -2.81670212],\n", + " [ -4.02577047, -4.02577047, -4.02577047],\n", + " [ -5.20418135, -5.20418135, -5.20418135],\n", + " [ -6.35271213, -6.35271213, -6.35271213],\n", + " [ -7.47212045, -7.47212045, -7.47212045],\n", + " [ -8.56314476, -8.56314476, -8.56314476],\n", + " [ -9.62650475, -9.62650475, 1.00252784],\n", + " [-10.6629019 , -10.6629019 , -0.30338194],\n", + " [-11.67301988, -11.67301988, -1.57617872],\n", + " [-12.65752504, -12.65752504, -2.81670212],\n", + " [-13.61706682, -13.61706682, -4.02577047],\n", + " [-14.5522782 , -14.5522782 , -5.20418135],\n", + " [-15.46377611, -15.46377611, -6.35271213],\n", + " [-16.35216182, -16.35216182, -7.47212045],\n", + " [-17.21802139, -17.21802139, -8.56314476],\n", + " [-18.06192599, -18.06192599, -9.62650475],\n", + " [-18.88443232, -18.88443232, -10.6629019 ],\n", + " [-19.68608295, -19.68608295, -11.67301988],\n", + " [-20.46740671, -20.46740671, -12.65752504],\n", + " [-21.22891902, -21.22891902, -13.61706682],\n", + " [-21.97112221, -21.97112221, -14.5522782 ],\n", + " [-22.6945059 , -22.6945059 , -15.46377611],\n", + " [-23.39954727, -23.39954727, -16.35216182],\n", + " [-24.08671143, -24.08671143, -17.21802139],\n", + " [-24.75645166, -24.75645166, -18.06192599],\n", + " [-25.40920978, -25.40920978, -18.88443232],\n", + " [-26.04541639, -26.04541639, -19.68608295],\n", + " [-26.66549117, -26.66549117, -20.46740671],\n", + " [-27.26984317, -27.26984317, -21.22891902],\n", + " [-27.85887106, -27.85887106, -21.97112221],\n", + " [-28.43296339, -28.43296339, -22.6945059 ],\n", + " [-28.99249888, -28.99249888, -23.39954727],\n", + " [-29.53784664, -29.53784664, -24.08671143],\n", + " [-30.06936642, -30.06936642, -24.75645166],\n", + " [-30.58740883, -30.58740883, -25.40920978],\n", + " [-31.09231562, -31.09231562, -26.04541639],\n", + " [-31.58441986, -31.58441986, -26.66549117],\n", + " [-32.06404617, -32.06404617, -27.26984317],\n", + " [-32.53151095, -32.53151095, -27.85887106],\n", + " [-32.98712256, -32.98712256, -28.43296339],\n", + " [-33.43118156, -33.43118156, -28.99249888],\n", + " [-33.86398088, -33.86398088, -29.53784664],\n", + " [-34.28580602, -34.28580602, -30.06936642],\n", + " [-34.69693526, -34.69693526, -30.58740883],\n", + " [-35.09763978, -35.09763978, -31.09231562],\n", + " [-35.48818394, -35.48818394, -31.58441986],\n", + " [-35.86882535, -35.86882535, -32.06404617],\n", + " [-36.23981511, -36.23981511, -32.53151095],\n", + " [-36.60139796, 1.00252784, -32.98712256],\n", + " [-36.95381242, -0.30338194, -33.43118156],\n", + " [-37.29729095, -1.57617872, -33.86398088],\n", + " [-37.63206016, -2.81670212, -34.28580602],\n", + " [-37.95834086, -4.02577047, -34.69693526],\n", + " [-38.27634831, -5.20418135, -35.09763978],\n", + " [-38.58629227, -6.35271213, -35.48818394],\n", + " [-38.8883772 , -7.47212045, -35.86882535],\n", + " [-39.18280239, -8.56314476, -36.23981511],\n", + " [-39.46976206, -9.62650475, -36.60139796],\n", + " [-39.7494455 , -10.6629019 , -36.95381242],\n", + " [-40.02203721, -11.67301988, -37.29729095],\n", + " [-40.28771701, -12.65752504, -37.63206016],\n", + " [-40.54666016, -13.61706682, -37.95834086],\n", + " [-40.79903748, -14.5522782 , -38.27634831],\n", + " [-41.04501545, -15.46377611, 1.00252784],\n", + " [-41.28475634, -16.35216182, -0.30338194],\n", + " [-41.51841829, -17.21802139, -1.57617872],\n", + " [-41.74615544, -18.06192599, -2.81670212],\n", + " [-41.96811803, -18.88443232, -4.02577047],\n", + " [-42.18445248, -19.68608295, -5.20418135],\n", + " [-42.3953015 , -20.46740671, -6.35271213],\n", + " [-42.60080416, -21.22891902, -7.47212045],\n", + " [-42.80109605, -21.97112221, -8.56314476],\n", + " [-42.99630928, -22.6945059 , -9.62650475],\n", + " [-43.18657263, -23.39954727, -10.6629019 ],\n", + " [ 1.00252784, -24.08671143, -11.67301988],\n", + " [ -0.30338194, -24.75645166, -12.65752504],\n", + " [ -1.57617872, -25.40920978, -13.61706682],\n", + " [ -2.81670212, -26.04541639, -14.5522782 ],\n", + " [ -4.02577047, -26.66549117, -15.46377611],\n", + " [ 1.00252784, -27.26984317, -16.35216182],\n", + " [ -0.30338194, 1.00252784, -17.21802139],\n", + " [ -1.57617872, -0.30338194, -18.06192599],\n", + " [ -2.81670212, -1.57617872, -18.88443232],\n", + " [ -4.02577047, -2.81670212, -19.68608295],\n", + " [ -5.20418135, -4.02577047, -20.46740671],\n", + " [ -6.35271213, -5.20418135, -21.22891902],\n", + " [ -7.47212045, -6.35271213, -21.97112221],\n", + " [ -8.56314476, -7.47212045, -22.6945059 ],\n", + " [ -9.62650475, -8.56314476, -23.39954727],\n", + " [-10.6629019 , -9.62650475, -24.08671143],\n", + " [-11.67301988, -10.6629019 , -24.75645166],\n", + " [ 1.00252784, -11.67301988, -25.40920978],\n", + " [ -0.30338194, -12.65752504, -26.04541639],\n", + " [ -1.57617872, -13.61706682, -26.66549117],\n", + " [ -2.81670212, -14.5522782 , -27.26984317],\n", + " [ -4.02577047, -15.46377611, -27.85887106],\n", + " [ -5.20418135, -16.35216182, -28.43296339],\n", + " [ -6.35271213, -17.21802139, -28.99249888],\n", + " [ -7.47212045, -18.06192599, -29.53784664],\n", + " [ -8.56314476, -18.88443232, -30.06936642],\n", + " [ -9.62650475, -19.68608295, -30.58740883],\n", + " [-10.6629019 , -20.46740671, -31.09231562],\n", + " [-11.67301988, -21.22891902, -31.58441986],\n", + " [-12.65752504, -21.97112221, -32.06404617],\n", + " [-13.61706682, -22.6945059 , -32.53151095],\n", + " [-14.5522782 , 1.00252784, -32.98712256],\n", + " [-15.46377611, -0.30338194, -33.43118156],\n", + " [-16.35216182, -1.57617872, -33.86398088],\n", + " [-17.21802139, -2.81670212, -34.28580602],\n", + " [-18.06192599, -4.02577047, -34.69693526],\n", + " [-18.88443232, -5.20418135, -35.09763978],\n", + " [-19.68608295, -6.35271213, -35.48818394],\n", + " [-20.46740671, -7.47212045, -35.86882535],\n", + " [-21.22891902, -8.56314476, -36.23981511],\n", + " [-21.97112221, -9.62650475, -36.60139796],\n", + " [-22.6945059 , -10.6629019 , 1.00252784],\n", + " [-23.39954727, -11.67301988, -0.30338194]]),\n", + " 'pLvl': array([[1.01 , 1.01 , 1.01 ],\n", + " [1.0201 , 1.0201 , 1.0201 ],\n", + " [1.030301 , 1.030301 , 1.030301 ],\n", + " [1.04060401, 1.04060401, 1.04060401],\n", + " [1.05101005, 1.05101005, 1.05101005],\n", + " [1.06152015, 1.06152015, 1.06152015],\n", + " [1.07213535, 1.07213535, 1.07213535],\n", + " [1.08285671, 1.08285671, 1.08285671],\n", + " [1.09368527, 1.09368527, 1.09368527],\n", + " [1.10462213, 1.10462213, 1.01 ],\n", + " [1.11566835, 1.11566835, 1.0201 ],\n", + " [1.12682503, 1.12682503, 1.030301 ],\n", + " [1.13809328, 1.13809328, 1.04060401],\n", + " [1.14947421, 1.14947421, 1.05101005],\n", + " [1.16096896, 1.16096896, 1.06152015],\n", + " [1.17257864, 1.17257864, 1.07213535],\n", + " [1.18430443, 1.18430443, 1.08285671],\n", + " [1.19614748, 1.19614748, 1.09368527],\n", + " [1.20810895, 1.20810895, 1.10462213],\n", + " [1.22019004, 1.22019004, 1.11566835],\n", + " [1.23239194, 1.23239194, 1.12682503],\n", + " [1.24471586, 1.24471586, 1.13809328],\n", + " [1.25716302, 1.25716302, 1.14947421],\n", + " [1.26973465, 1.26973465, 1.16096896],\n", + " [1.282432 , 1.282432 , 1.17257864],\n", + " [1.29525631, 1.29525631, 1.18430443],\n", + " [1.30820888, 1.30820888, 1.19614748],\n", + " [1.32129097, 1.32129097, 1.20810895],\n", + " [1.33450388, 1.33450388, 1.22019004],\n", + " [1.34784892, 1.34784892, 1.23239194],\n", + " [1.3613274 , 1.3613274 , 1.24471586],\n", + " [1.37494068, 1.37494068, 1.25716302],\n", + " [1.38869009, 1.38869009, 1.26973465],\n", + " [1.40257699, 1.40257699, 1.282432 ],\n", + " [1.41660276, 1.41660276, 1.29525631],\n", + " [1.43076878, 1.43076878, 1.30820888],\n", + " [1.44507647, 1.44507647, 1.32129097],\n", + " [1.45952724, 1.45952724, 1.33450388],\n", + " [1.47412251, 1.47412251, 1.34784892],\n", + " [1.48886373, 1.48886373, 1.3613274 ],\n", + " [1.50375237, 1.50375237, 1.37494068],\n", + " [1.51878989, 1.51878989, 1.38869009],\n", + " [1.53397779, 1.53397779, 1.40257699],\n", + " [1.54931757, 1.54931757, 1.41660276],\n", + " [1.56481075, 1.56481075, 1.43076878],\n", + " [1.58045885, 1.58045885, 1.44507647],\n", + " [1.59626344, 1.59626344, 1.45952724],\n", + " [1.61222608, 1.61222608, 1.47412251],\n", + " [1.62834834, 1.62834834, 1.48886373],\n", + " [1.64463182, 1.64463182, 1.50375237],\n", + " [1.66107814, 1.66107814, 1.51878989],\n", + " [1.67768892, 1.01 , 1.53397779],\n", + " [1.69446581, 1.0201 , 1.54931757],\n", + " [1.71141047, 1.030301 , 1.56481075],\n", + " [1.72852457, 1.04060401, 1.58045885],\n", + " [1.74580982, 1.05101005, 1.59626344],\n", + " [1.76326792, 1.06152015, 1.61222608],\n", + " [1.7809006 , 1.07213535, 1.62834834],\n", + " [1.7987096 , 1.08285671, 1.64463182],\n", + " [1.8166967 , 1.09368527, 1.66107814],\n", + " [1.83486367, 1.10462213, 1.67768892],\n", + " [1.8532123 , 1.11566835, 1.69446581],\n", + " [1.87174443, 1.12682503, 1.71141047],\n", + " [1.89046187, 1.13809328, 1.72852457],\n", + " [1.90936649, 1.14947421, 1.74580982],\n", + " [1.92846015, 1.16096896, 1.76326792],\n", + " [1.94774475, 1.17257864, 1.01 ],\n", + " [1.9672222 , 1.18430443, 1.0201 ],\n", + " [1.98689442, 1.19614748, 1.030301 ],\n", + " [2.00676337, 1.20810895, 1.04060401],\n", + " [2.026831 , 1.22019004, 1.05101005],\n", + " [2.04709931, 1.23239194, 1.06152015],\n", + " [2.06757031, 1.24471586, 1.07213535],\n", + " [2.08824601, 1.25716302, 1.08285671],\n", + " [2.10912847, 1.26973465, 1.09368527],\n", + " [2.13021975, 1.282432 , 1.10462213],\n", + " [2.15152195, 1.29525631, 1.11566835],\n", + " [1.01 , 1.30820888, 1.12682503],\n", + " [1.0201 , 1.32129097, 1.13809328],\n", + " [1.030301 , 1.33450388, 1.14947421],\n", + " [1.04060401, 1.34784892, 1.16096896],\n", + " [1.05101005, 1.3613274 , 1.17257864],\n", + " [1.01 , 1.37494068, 1.18430443],\n", + " [1.0201 , 1.01 , 1.19614748],\n", + " [1.030301 , 1.0201 , 1.20810895],\n", + " [1.04060401, 1.030301 , 1.22019004],\n", + " [1.05101005, 1.04060401, 1.23239194],\n", + " [1.06152015, 1.05101005, 1.24471586],\n", + " [1.07213535, 1.06152015, 1.25716302],\n", + " [1.08285671, 1.07213535, 1.26973465],\n", + " [1.09368527, 1.08285671, 1.282432 ],\n", + " [1.10462213, 1.09368527, 1.29525631],\n", + " [1.11566835, 1.10462213, 1.30820888],\n", + " [1.12682503, 1.11566835, 1.32129097],\n", + " [1.01 , 1.12682503, 1.33450388],\n", + " [1.0201 , 1.13809328, 1.34784892],\n", + " [1.030301 , 1.14947421, 1.3613274 ],\n", + " [1.04060401, 1.16096896, 1.37494068],\n", + " [1.05101005, 1.17257864, 1.38869009],\n", + " [1.06152015, 1.18430443, 1.40257699],\n", + " [1.07213535, 1.19614748, 1.41660276],\n", + " [1.08285671, 1.20810895, 1.43076878],\n", + " [1.09368527, 1.22019004, 1.44507647],\n", + " [1.10462213, 1.23239194, 1.45952724],\n", + " [1.11566835, 1.24471586, 1.47412251],\n", + " [1.12682503, 1.25716302, 1.48886373],\n", + " [1.13809328, 1.26973465, 1.50375237],\n", + " [1.14947421, 1.282432 , 1.51878989],\n", + " [1.16096896, 1.01 , 1.53397779],\n", + " [1.17257864, 1.0201 , 1.54931757],\n", + " [1.18430443, 1.030301 , 1.56481075],\n", + " [1.19614748, 1.04060401, 1.58045885],\n", + " [1.20810895, 1.05101005, 1.59626344],\n", + " [1.22019004, 1.06152015, 1.61222608],\n", + " [1.23239194, 1.07213535, 1.62834834],\n", + " [1.24471586, 1.08285671, 1.64463182],\n", + " [1.25716302, 1.09368527, 1.66107814],\n", + " [1.26973465, 1.10462213, 1.67768892],\n", + " [1.282432 , 1.11566835, 1.01 ],\n", + " [1.29525631, 1.12682503, 1.0201 ]]),\n", + " 'aNrm': array([[ -1.27807355, -1.27807355, -1.27807355],\n", + " [ -2.52615583, -2.52615583, -2.52615583],\n", + " [ -3.74259139, -3.74259139, -3.74259139],\n", + " [ -4.92818269, -4.92818269, -4.92818269],\n", + " [ -6.08371181, -6.08371181, -6.08371181],\n", + " [ -7.20994102, -7.20994102, -7.20994102],\n", + " [ -8.30761326, -8.30761326, -8.30761326],\n", + " [ -9.37745262, -9.37745262, -9.37745262],\n", + " [-10.42016485, -10.42016485, -10.42016485],\n", + " [-11.43643779, -11.43643779, -1.27807355],\n", + " [-12.42694183, -12.42694183, -2.52615583],\n", + " [-13.39233038, -13.39233038, -3.74259139],\n", + " [-14.33324028, -14.33324028, -4.92818269],\n", + " [-15.25029222, -15.25029222, -6.08371181],\n", + " [-16.14409113, -16.14409113, -7.20994102],\n", + " [-17.01522664, -17.01522664, -8.30761326],\n", + " [-17.8642734 , -17.8642734 , -9.37745262],\n", + " [-18.69179151, -18.69179151, -10.42016485],\n", + " [-19.49832683, -19.49832683, -11.43643779],\n", + " [-20.28441144, -20.28441144, -12.42694183],\n", + " [-21.05056386, -21.05056386, -13.39233038],\n", + " [-21.79728952, -21.79728952, -14.33324028],\n", + " [-22.525081 , -22.525081 , -15.25029222],\n", + " [-23.2344184 , -23.2344184 , -16.14409113],\n", + " [-23.92576966, -23.92576966, -17.01522664],\n", + " [-24.59959082, -24.59959082, -17.8642734 ],\n", + " [-25.25632639, -25.25632639, -18.69179151],\n", + " [-25.89640959, -25.89640959, -19.49832683],\n", + " [-26.52026268, -26.52026268, -20.28441144],\n", + " [-27.12829717, -27.12829717, -21.05056386],\n", + " [-27.72091418, -27.72091418, -21.79728952],\n", + " [-28.29850463, -28.29850463, -22.525081 ],\n", + " [-28.86144954, -28.86144954, -23.2344184 ],\n", + " [-29.41012026, -29.41012026, -23.92576966],\n", + " [-29.94487875, -29.94487875, -24.59959082],\n", + " [-30.46607775, -30.46607775, -25.25632639],\n", + " [-30.97406109, -30.97406109, -25.89640959],\n", + " [-31.46916387, -31.46916387, -26.52026268],\n", + " [-31.95171268, -31.95171268, -27.12829717],\n", + " [-32.42202586, -32.42202586, -27.72091418],\n", + " [-32.88041365, -32.88041365, -28.29850463],\n", + " [-33.32717843, -33.32717843, -28.86144954],\n", + " [-33.76261493, -33.76261493, -29.41012026],\n", + " [-34.18701038, -34.18701038, -29.94487875],\n", + " [-34.60064474, -34.60064474, -30.46607775],\n", + " [-35.00379088, -35.00379088, -30.97406109],\n", + " [-35.39671474, -35.39671474, -31.46916387],\n", + " [-35.77967551, -35.77967551, -31.95171268],\n", + " [-36.15292583, -36.15292583, -32.42202586],\n", + " [-36.51671191, -36.51671191, -32.88041365],\n", + " [-36.87127373, -36.87127373, -33.32717843],\n", + " [-37.21684518, -1.27807355, -33.76261493],\n", + " [-37.55365424, -2.52615583, -34.18701038],\n", + " [-37.88192307, -3.74259139, -34.60064474],\n", + " [-38.20186823, -4.92818269, -35.00379088],\n", + " [-38.51370077, -6.08371181, -35.39671474],\n", + " [-38.8176264 , -7.20994102, -35.77967551],\n", + " [-39.11384561, -8.30761326, -36.15292583],\n", + " [-39.4025538 , -9.37745262, -36.51671191],\n", + " [-39.68394144, -10.42016485, -36.87127373],\n", + " [-39.95819413, -11.43643779, -37.21684518],\n", + " [-40.2254928 , -12.42694183, -37.55365424],\n", + " [-40.48601376, -13.39233038, -37.88192307],\n", + " [-40.73992889, -14.33324028, -38.20186823],\n", + " [-40.98740568, -15.25029222, -38.51370077],\n", + " [-41.22860738, -16.14409113, -38.8176264 ],\n", + " [-41.46369311, -17.01522664, -1.27807355],\n", + " [-41.69281793, -17.8642734 , -2.52615583],\n", + " [-41.91613301, -18.69179151, -3.74259139],\n", + " [-42.13378565, -19.49832683, -4.92818269],\n", + " [-42.34591942, -20.28441144, -6.08371181],\n", + " [-42.55267428, -21.05056386, -7.20994102],\n", + " [-42.75418661, -21.79728952, -8.30761326],\n", + " [-42.95058933, -22.525081 , -9.37745262],\n", + " [-43.14201201, -23.2344184 , -10.42016485],\n", + " [-43.32858093, -23.92576966, -11.43643779],\n", + " [-43.51041916, -24.59959082, -12.42694183],\n", + " [ -1.27807355, -25.25632639, -13.39233038],\n", + " [ -2.52615583, -25.89640959, -14.33324028],\n", + " [ -3.74259139, -26.52026268, -15.25029222],\n", + " [ -4.92818269, -27.12829717, -16.14409113],\n", + " [ -6.08371181, -27.72091418, -17.01522664],\n", + " [ -1.27807355, -28.29850463, -17.8642734 ],\n", + " [ -2.52615583, -1.27807355, -18.69179151],\n", + " [ -3.74259139, -2.52615583, -19.49832683],\n", + " [ -4.92818269, -3.74259139, -20.28441144],\n", + " [ -6.08371181, -4.92818269, -21.05056386],\n", + " [ -7.20994102, -6.08371181, -21.79728952],\n", + " [ -8.30761326, -7.20994102, -22.525081 ],\n", + " [ -9.37745262, -8.30761326, -23.2344184 ],\n", + " [-10.42016485, -9.37745262, -23.92576966],\n", + " [-11.43643779, -10.42016485, -24.59959082],\n", + " [-12.42694183, -11.43643779, -25.25632639],\n", + " [-13.39233038, -12.42694183, -25.89640959],\n", + " [ -1.27807355, -13.39233038, -26.52026268],\n", + " [ -2.52615583, -14.33324028, -27.12829717],\n", + " [ -3.74259139, -15.25029222, -27.72091418],\n", + " [ -4.92818269, -16.14409113, -28.29850463],\n", + " [ -6.08371181, -17.01522664, -28.86144954],\n", + " [ -7.20994102, -17.8642734 , -29.41012026],\n", + " [ -8.30761326, -18.69179151, -29.94487875],\n", + " [ -9.37745262, -19.49832683, -30.46607775],\n", + " [-10.42016485, -20.28441144, -30.97406109],\n", + " [-11.43643779, -21.05056386, -31.46916387],\n", + " [-12.42694183, -21.79728952, -31.95171268],\n", + " [-13.39233038, -22.525081 , -32.42202586],\n", + " [-14.33324028, -23.2344184 , -32.88041365],\n", + " [-15.25029222, -23.92576966, -33.32717843],\n", + " [-16.14409113, -1.27807355, -33.76261493],\n", + " [-17.01522664, -2.52615583, -34.18701038],\n", + " [-17.8642734 , -3.74259139, -34.60064474],\n", + " [-18.69179151, -4.92818269, -35.00379088],\n", + " [-19.49832683, -6.08371181, -35.39671474],\n", + " [-20.28441144, -7.20994102, -35.77967551],\n", + " [-21.05056386, -8.30761326, -36.15292583],\n", + " [-21.79728952, -9.37745262, -36.51671191],\n", + " [-22.525081 , -10.42016485, -36.87127373],\n", + " [-23.2344184 , -11.43643779, -37.21684518],\n", + " [-23.92576966, -12.42694183, -1.27807355],\n", + " [-24.59959082, -13.39233038, -2.52615583]])}" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "PFexample.track_vars = [\"who_dies\", \"mNrm\", \"pLvl\", \"aNrm\"]\n", + "PFexample.make_shock_history()\n", + "\n", + "PFexample.initialize_sim()\n", + "PFexample.simulate()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "3b126cc4", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(np.mean(PFexample.history[\"mNrm\"], axis=1))\n", + "plt.xlabel(\"Time\")\n", + "plt.ylabel(\"Mean normalized market resources\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "633034d3", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYcAAAEGCAYAAACO8lkDAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAA9uklEQVR4nO3deXyU1dXA8d/JTiBhDfu+JSRBURHUuiBF2UHtpvZtfautfVu12tpq3RBwaV9t1Wrr3lq7v7ZVQVBQrKJWXHApkLAHkE0Ia1gyyWRy3j+eZ2DI+iSZNTnfz+f5yDwzyXPGmcyde8+954qqYowxxoRKinUAxhhj4o81DsYYY2qxxsEYY0wt1jgYY4ypxRoHY4wxtaTEOoBw6Natmw4cODDWYRhjTEL56KOP9qhqTl33tYrGYeDAgSxfvjzWYRhjTEIRkS313WfDSsYYY2qxxsEYY0wt1jgYY4ypxRoHY4wxtVjjYIwxphZrHIwxxtRijYMxxpha2nTjsHXfUea8VIQ/UB3rUIwxJq606cZh3a5DPPPvzfzl/c9iHYoxxsSVuG0cRGSSiKwVkQ0i8tNIXGN8Xne+MLQrDy5Zx8Gj/khcwhhjElJcNg4ikgz8BpgM5AOXiUh+BK7DbVPyOVju55F/rQ/3rzfGmIQVl40DMAbYoKolqloJ/A2YGYkL5ffO5muj+/Hsss1s3nMkEpcwxpiEE6+NQx9ga8jtbe65Y0TkahFZLiLLS0tLW3SxH104nNTkJH72yuoW/R5jjGkt4rVxaJSqPqmqo1V1dE5OnRVnPeuelcH3xw1hcdEulm3cG6YIjTEmccVr47Ad6Bdyu697LmK+fc5g+nRqx90LiwlUayQvZYwxcS9eG4cPgWEiMkhE0oBLgfmRvGBGajI3TcqlaEcZ//x4WyQvZYwxcS8uGwdVrQKuBRYDq4HnVLUo0tedcXJvTunfifsXr+VIRVWkL2eMMXErLhsHAFV9WVWHq+oQVb0nGtcUEWZNy6f0UAWPvbkxGpc0xpi4FLeNQ6yc0r8zF43qzZNvl7Bt/9FYh2OMMTFhjUMdbpqUR5LAz19ZE+tQjDEmJqxxqEPvTu347rlDWLBiJ8s374t1OMYYE3VNahxEpLOInBSpYOLJd88bTM/sDOYuKKbaprYaY9qYRhsHEXlTRLJFpAvwMfCUiDwQ+dBiKzMthZsn57Ji20Ge/ySiSyyMMSbueOk5dFTVMuAS4A+qOhaYENmw4sPMk/swql8n7lu0xqa2GmPaFC+NQ4qI9AK+CiyIcDxxJSlJmDU9n92HKnj0zQ2xDscYY6LGS+MwF2cx2kZV/VBEBgNtpr71qe7U1qfe3sTWfTa11RjTNjTaOKjq31X1JFX9nnu7RFW/FPnQ4sfNk/NIFrGqrcaYNsNLQnq4iLwuIqvc2yeJyO2RDy1+9OrYju+NG8LLKz/nvRKr2mqMaf28DCs9BdwC+AFUdQVOIbw25epznaqtc16yqq3GmNbPS+OQqaof1DjX5qbuZKQmc8uUPFbvLOO55Vsb/wFjjElgXhqHPSIyBFAAEfkysDOiUcWpqSN7MWZgF36xeC0Hy/2xDscYYyLGS+NwDfAEkCci24EbgO9FMqh4JeJMbd13tJJHXm8zE7aMMW2Ql9lKJao6AcgB8lT1bFXdHPHI4lRhn45ceno/fv/uZjbsPhzrcIwxJiK8zFa6V0Q6qeoRVT3k1le6OxrBxasbL8ylXWoydy8sjnUoxsSVDbsP4w9UxzoMEwZehpUmq+qB4A1V3Q9MiVhECaBbh3SunzCMN9eW8q81u+p8zIbdh/jK4++y/UB5lKMzJjbKKwNM+dXbzJ4f8U0bTRR4aRySRSQ9eENE2gHpDTy+TfjmmQMZnNOeuxasprKq9jel5z/ezoeb93PvQls4Z9qG/UcrqQxU89cPPqN4R1mswzEt5KVx+DPwuohcJSJXAa8Bz0Y2rPiXlpLErGn5bNpzhN+/u6nW/W+uLSUlSVi4cifLNtrCOdP6lfmcGXzVCnMXFKFq64ESWYONg4gI8BfgbmCEe9ylqvdFIba4Ny63O1/M687Dr29g9yHfsfO7y3wU7yzj++OGuAvniqiycVjTypWVO8ufJhf25L2SfSxa9XmMIzIt0WDjoE7T/7KqLlLVH7vH4ijFlhBun5ZPRVWA+xetPXbuzXWlAEws7MmtU0aw5vND/PVDWzhnWrdDbs/h6nMHk9czi7sXrsbnD8Q4KtNcXoaVPhaR0yMeSYIa1K09V549iL9/tI1Ptx4AYOnaUrpnpZPfK5spI3tyxuAu/PLVtRw4WhnbYI2JoOCwUqfMNO6cXsD2A+U8+VZJjKMyzeWlcRgLLBORjSKyQkRWisiKSAeWSK4bP4ycrHRmzy+isqqat9eXct7wHEQEEeHO6QWUlft58LV1sQ7VmIgJDitlZ6Rw5pCuTBnZk0ff3MAOm7GXkLw0DhOBIcB4YDowzf2vcXVIT+Gnk/L4dOsBZs1bRZmvinG53Y/dP6JXNl8fO4A/vf8Zaz63WRymdSpzS8pkZaQCcOuUEajCz15ZE8uwTDN5aRy0nsOEuPiUPpzSvxN/+3AryUnC2cO6nXD/jy4YTlZGCnPmF9ssDtMqlfn8tEtNJi3F+Vjp2zmT7543hJf+s4MPNu2LcXSmqbw0DgtxtgddCLwOlACvtOSiIvIVESkSkWoRGV3jvltEZIOIrBWRiS25TjQlJQmzpxcAcFr/znRsl3rC/Z3bp3HjhbksK9nLKzaLw7RCZeVVZLdLOeHc984bQu+OGcyeX2Sl7hOMl9pKI92d4Eaq6jBgDLCshdddBVwCvBV6UkTycfaKKAAmAY+KSHILrxU1J/frxP1fPombJuXWef/lY/ozolc29yxcTXmlzeIwrUuZz092xolfitqlJXPLlBEU7yzjbx9+FqPITHN46TmcQFU/xklSN5uqrlbVtXXcNRP4m6pWqOomYANOY5QwvjK6H6MHdqnzvuQkYfb0fLYfKOfxpRujHJkxkVXm85Ndo8cMMO2kXowZ5Ja6P2ql7hOFl8J7Pwo5fiwifwF2RCiePkDogoBt7rm64rpaRJaLyPLS0tIIhRN+Ywd3ZfrJvXl86Ua27jsa63CMCZuy8iqyM1JqnRdxhlwPlvt5cInN2EsUXnoOWSFHOk7uYWZjPyQiS0RkVR1Hoz/rhao+qaqjVXV0Tk5OOH5l1Nw6JY8kEe6xukumFamv5wCQ3zuby8f254/vbbEZewmidjNfg6rOARCRDu5tT5sYuHtANNV2oF/I7b7uuValV8d2XDt+KPcvXss76/fUmtlkTCIqK6+dcwh14wW5LFixkznzi/nLd8biVOcx8crLsFKhiHwCFAFFIvKRiBRGKJ75wKUiki4ig4BhQM39q1uFq84eRP8umcx+qcjq35uEp6qU+WrPVgoVOmPv5ZU2Yy/eeRlWehL4kaoOUNUBwI3uuWYTkYtFZBtwJrBQRBYDqGoR8BxQDCwCrlHVVjmtJyM1mVnT8tmw+zDPvrs51uEY0yJHKwMEqrXBngOEztgrthl7cc5L49BeVd8I3lDVN4H2Lbmoqr6gqn1VNV1Ve6jqxJD77lHVIaqaq6otWk8R7744ojvjcnP41ZL1J1R1NSbRHPK5pTPqyTkEBWfs7Tjo47E3N0QjNNNMXhqHEhG5Q0QGusftOAvhTAuJCLOm5eOrCnDforpm9hqTGIJF9xrrOYAzY2/Gyb15/K0SPttrM/bilZfG4UogB3jePbq550wYDM7pwFVnD+YfH23joy37Yx2OMc0SrKvUUM4h1C1T8kgW4S7bhz1ueVkhvV9Vf6CqpwKnA7PcfaRNmFw3fig9stOtxIBJWE3pOcDxGXuvFe9i6brEWafUlniZrfQXEckWkfbASqBYRH4S+dDajvbpKdw6ZQQrtx/k/2xTIJOAguW6s+pYBFefb58ziIFdM5njlro38cXLsFK+qpYBF+EU3BsEfCOSQbVFM07uzZhBXbh/8RrbFMgknGM9h0YS0qHSU5KZNT2fkj1HeObftfdhN3U7UlFFSamn5WYt4qVxSBWRVJzGYb6q+rGS3WEnIsydWUCZr4pfvmolBkxiOb6Xg/eeA8D4vB7uPuzr2VVmM/a8+O07m5j40FtsjHAD4aVxeALYjDN99S0RGQDY+vcIyOuZzTfOGMCf39/Cqu0HYx2OMZ6V+arISE0iPaXpRZRnTc/HH1B+9rKVk/Fi35FK/AFl7kuR3RvGS0L6YVXto6pT1LEFOD9iEbVxP7xgOJ0z05g1bxXVlpw2CaKx0hkNGdC1PVefO5gXP93Bh5ttU6DG+PzO4sGl60pZsnp3xK7jJSHdQ0R+KyKvuLfzgSsiFlEb17FdKjdPzuPjzw7w/CetrqyUSQAVVU1fudxQ0T0vvn++synQrHk2Y68xPn+APp3aMbxHB+YuKDrWWISbl2Gl3wOLgd7u7XXADRGJxgDw5VP7ckr/Tvz8lTXHEn3GRMPrq3dxytzXWLfrUJN+rr5y3V5lpqVw+7R8Vu8s48/vb2n272kLyv0BOqSnMHt6AVv3lfPkW5FZk+ylceimqs8B1QCqWgVYUZQISkoS5s4oZO+RCh58zZLTJnp2HCjnaGWA2fOLmjSe3dKeA8Dkwp58YWhXfrF4LXsPV7Tod7VmPn81GWnJnDW0G9eNH8pZQ7pG5DpeGocjItIVd4aSiJwBWLY0wkb27cjlY/rzh2VW/95ET2XAaRDe3di0yqktyTkEiQhzZhRwtDLA/Yu9lZNZtf0gpYfaVkNS7g+QkeJ8dN94YW69O0+2lJfG4Uc4pbSHiMi/gT8A10UkGnOCn0zMJTsjhVnzmvYtzpjmCi5GG9q9A3cvLOZoZZWnnzvUSLlur4Z2z+LKswfxf8u38unWAw0+trpaufyp97j6j8vb1OSNCn+AdmlNnxXWVA02DiKSDJznHmcB3wUKVHVFxCMzdMpM46ZJeXywaR/z/xOpnVmNOS64t8jdFxWy86CP37zReOVUZy+Hlvccgn7wxWHkdEhn1rxVDSanP9t3lDJfFZ+0sckb5f4A7VJj3Di4eylcpqpVqlqkqqvcRXAmSr42uh8n9+3I3QtXc8iS0ybC/IFqRGDsoC5cckofnnprE5v2HGnwZ3z+avwBbXHOIahDegq3TR3Bim0HeW55/eVkinY4w609szP4+Sur28zkDZ+/moxYNw6uf4vIr0XkHBE5NXhEPDIDuMnpmYXsOVzBr5asj3U4ppWrDFSTlpyEiPDTyXmkpSQx56WGhzWbWnTPi2A5mfsW1V9OpmjHQVKShN98/RT2Hqnkodfaxt9HuT8QN43DKKAAmAv80j1+EcGYTA0n9+vEpaf345l3N7P286ZNMTSmKSqrnMYBoHt2BjdMGMaba0t5vYHFVk0t1+1FaDmZ+pLTRTvKGNq9A6cN6MJlY/rz7LK28ffhqwyQkerlo7tlvKyQPr+OY3zEIzMn+MnEPLIyUpg1b5Ulp03E+APVpKYc/1i44qyBDOvegTkNLLaKRM8BnHIy3zxzAH/54DNWbqs9QbJoRxkFvTsC8JMLc8nKSOHO+a3/78NXFQc5BxM/urRP46aJebxvyWkTQf4qJTVZjt1OTU5izgxnsdUTS+tebBUs1x2unEOoH14wnK7t07mjRjmZ3WU+9hyuoKB3NgCd26fxk4m5vFeyj5dW7Ax7HPGiKuDkd+JlWMnEia+d3o+TLDltIsgfqCYt5cSPhbOGdmPqSb149M0NbN1Xe1vP4z2H8A0rBWVnpHLrlDw+3XqAv390PDldtNNJRgcbB4BLT+9PYZ9s7llYzJEKb1NwE43PnWocFz0HEUn3cs5EXnKScJebnH7IktMmAioC1aQm1/5YuH3qCJKThLkLam/rebxcd/h7DgAXn9KH0wd25n8XrT2WnC52ZyqNCGkckt3JG7vKKnj4X63z76O80hnai4ucA7DM4zkTBU5yuj+/f3ezrZw2YecPSUiH6tWxHdeNH8Zrxbt4Y+2JyekyX9N3gWsKJzldyMFyP7941UlOF+04SP8umbXyHKf278xXTuvL797ZFPH9DmIhmPeJ6bCSiPQUkdOAdiJySsg01nFAZsQjM/W6Kbhy+kVbOW3Cy19PzwHgqrMHMTinPXPmn5icLiv3k56SFNEPrBG9nOT0n993ktNOMjq7zsfePDmPdqnJTa4PlQiC/99jvUJ6Is6U1b7AAxyfxvpD4NaIR2bq1bl9GjdPyuODzft4oQ2tDDWR5w9orZxDUFqKk5zevPcoT7/tJKerAtV8tGU/XdunRTy2YHL65n+uYMveo/U2Dt06pHPjhbm8vX4Pr6zyXh8qEfj8Ts4hoxmbKjVVvY2Dqj6rqucD/11jGutMVX0+4pGZBn11dD9G9evEvS+v5mC5JadNeFRWVZ8wW6mmc4blMLmwJ79+YwPb9h/l/lfXsnzLfm64YHjEYwsmp4uPJaM71vvYr4/tz4he2dy9wHt9qERQHic9h6B/19zsR0SuaslFReR+EVkjIitE5AUR6RRy3y0iskFE1orIxJZcpzVLShLuvqiQvUcqray3CZvKBoaVgm6flo8gfOuZD3liaQn/dUZ/vjq6X1TiCyangXp7DgApyUncNbOAHQd9/PpfjdeHShTl/vhKSD9D+Df7eQ0oVNWT3N93CxzbZe5SnBXZk4BH3eJ/pg6FfTryX2MH8Idlm23PaRMW/kA16fUMKwX16dSOa8cPZf3uw5w2oDOzphVEKTonOf3Qpadw/5dPont2RoOPHT2wC5ec2oen3i6hpJUkp+MiIR0i7Jv9qOqr7u8BeA8nrwEwE/ibqlao6iZgAzCmJddq7X58YS6dM9NqLRIypjkaSkiH+s45g5kzo4AnvnFavTmKSOnTqR1f8dhTuWXyCDJSkrmzlSSn461xiPRmP1cCr7j/7gOElmHc5p6rRUSuFpHlIrK8tLQ0jOEklo6ZqdwyZQSffHbiIiFjmsPJOTT+sZCWksQVZw2kW4f4XvKUk5XOjy4cztvr97CoFSSnj81WipPGoVmb/YjIEhFZVccxM+QxtwFVwJ+bGriqPqmqo1V1dE5OTlN/vFX50qnOOOzPX1nD/iN1V7A0xgt/QD01DonkG2cMIK9nFne1guR0cBFcvDQO+6mx2Q/Q6NcFVZ2gqoV1HPMAROS/gWnA1/V4f287ENpf7OueMw0QEe66qJAyXxX3LV4T63BMAquso3xGoktJTmLuzMJWkZwOls+Il2GlfwA9gpv9AGcCv2vJRUVkEnATMENVQ4u1zAcuFZF0ERkEDAM+aMm12oq8ntn891kD+duHW/nks/2xDsckKH+gmrQGprImqjGDjienE3nldLDn0NikgXDwcoX/AV50V0xPAR4BprTwur8GsoDXRORTEXkcQFWLgOeAYmARcI27G53x4IYJw+ielc7tLza8vaIx9fGac0hEweR0Iq+c9lUFSE9JIikp8g24l/0cPgR+ALwKzAYmqGqLMp+qOlRV+6nqKPf4n5D77lHVIaqaq6qvNPR7zImyMlK5fWo+RTvK+NN7W2IdjklANfdzaE1ystK50U1OJ+rKaV9lICoL4KDh2kovich8EZmPsw4hE6gAfuueM3Fo2km9OHtoN37x6lp2H/LFOhyTQFTVKZ/RSnsOAP91xgBG9MrmrgWJWdbb56+OSukMaLjn8AuO11P6JXAVcHvIbROHgtsrVvir+dnLlpw23lUGnGRna0tIh0pJTuLuiwrYedDHI2FOTh+pqOKc+/7FwghuNlTuj4Oeg6ouBd4BZqvq0ppHVKIzzTI4pwPfPW8wL3yynWUb98Y6HJMg/AFnHL6h2kqtwWkDuvCV0/ry9NslbNgdvj2nt+0vZ+u+cu6cX3RsA6RwK/cHopKMhkZyDm4yuFpE6q9wZeLSNecPpV+XdtwxbxWV7vQ3Yxrid98nrTUhHermyXlkpiVzRxjL3u9z1xjtOVzBQ69FZrMhXzz0HEIcBla6xfceDh6RDsy0TEZqMrOnF7Bh92GefqfuvX+NCeVvA8NKQd06pPOTibksK9kbtj3Zg43D6QM78+yyyGzG5fMHorIADrw1Ds8DdwBvAR+FHCbOfXFEDy7M78EjrzvllY1pSEUb6jkAXD52ACP7dOSeMO3Jvu9IBQD3XDySrIwU7pwX/imzPn91VBbAgbeprM/WdUQjONNyd85wKmbOfan23r/GhDrWc2gjjUNyklNZoPRwBQ+GYRho3xGngRnUrT03Tczj/U37wtYrCSqPp56DiAwTkX+ISLGIlASPaARnWq5Pp3ZcP2EYrxbv4vXVu2IdjoljxxPSbaNxABjl7sn+7LLNrN7ZsmGgfUcqyMpIITU5ia+d3o+T+nbk3pdXcziMU2Z9/gDpUdjLAbzv5/AYToG883EK7/0pkkGZ8LryC4MY1r0Dd84vOrb83pia2lLOIVRwT/Y7XmxZ2fu9RyqPbZeanCTMmVHArrIKHn49fMnpeMs5tFPV1wFR1S2qOhuYGtmwTDilpSRx90WFbNtfzq/fiMwsCpP4juccWvdU1po6t0/jp5PzWL5lP//8eFuzf8/+o5V0CdlL+5T+nfna6H787p1NrN8VnimzcZVzACpEJAlYLyLXisjFQIcIx2XCbOzgrlxyah+efCu8c7tN69HWcg6hvnJaP07t34mfv7KGg0ebl5zee/jExgHgpkm5tE9PCctmQ6oaXzkH4Hqc0hk/AE4DvgFcEcmgTGTcOmUEmWkp3P7iqoQtPGYip60OK4GzJ/tdFxWy/2gl97/avMoC+47Ubhy6dkjnxxcO592Ne1nQwpXT/oASqNao7B8NHgvvqephVd2mqt9S1UtU9b1oBGfCq1uHdG6alMt7Jft48VPbJsOcKNg4tKWEdKiC3h355pkD+fP7n/GfrQea9LOq6g4r1d7q5vKxAyjonc3dC4tblJz2VUVvi1DwNltptIi8ICIfi8iK4BGN4Ez4XXZ6f0b168Q9C1c3u/tsWqfKNrbOoS4/unA43Tqkc8e8ppW9P1RRhT+gxxLSoZKThLkzC9lVVsEjLUhO+4K7wMXRCuk/48xY+hIwPeQwCSgpSbj7okL2HWl+99m0TpXuVNa0lLaVkA6VnZHK7VNHsGLbQf7ywWeef27fYWd1dOc6GgeA0wZ05quj+/LbdzY1O+fn87u7wMVBVdagUlWdr6qb3NlKW1TVNgtIYIV9OnLFWU73+dMmdp9N6xWsrZSWHJ0Pn3g14+TenDm4K/cvWsOewxWefmbfUadxqKvnEHTzJKee06xmrpwu98dfz+FOEXlaRC4TkUuCR8QjMxH1owuG0z0rndteWElVwArzmZCcQxvuOUBwT/YCyv0B7n15taefCfYcaiakQ3V16zm9u3EvC1c2PTnt8wdzDnGSkAa+BYwCJnF8SGlaBGMyUZCVkcqsaQUU7Sjjj7ZrnOH4fg5tOecQNLR7Ft85ZzDPf7yd90saL3sfLLrXUOMAx5PTdy1oenK63B9nCWngdFUdrapXuLOVvqWqV0Y8MhNxU0b25NzhOfzy1XXsKrNd49o6S0if6Lrxw+jTySl772+kdx0cVmqscWhJctoXh43DuyKSH/FITNSJCHNnFFAZqGbuAivM19YFaytFazOZeNcuLZnZMwpYt+swz/x7U4OP3XekkvSUJDI95ANCk9NNWTkdbBziaRHcGcCnIrLWnca60qayth4Du7Xn2vOHsnDFTpauK411OCaG2vo6h7pckN+DCSO689CS9ew4UF7v4/YeduoqiXjL1zQnOX1stlIcNQ6TgGHAhRzPN9hU1lbku+cNZnC39syat+rYtxPT9lRWVZMkztCHOe7O6QVUqzZY9n7/0cp6p7HWpWuHdH4yKY9lJXt5yePK6fJ46zmETl+1qaytU3pKMnddVMiWvUd59I3wbrpuEoc/UG29hjr065LJdeOHsajoc95Ys7vOx+yto3RGYy4f05+RfTpy94JiT5sNBSsqx03jYNqGLwztxkWjevPY0o1s2H041uGYGKgMVLfJukpefOecwQzJac+d84vq7F3vO1LR4BqHuoRuNvSrJY0np4PlM+JpPwfTRtw2NZ+M1GTusMJ8bZI/UN0mK7J6kZaSxF0XFfLZvrp71/uP+Js0rBTkbDbUj2fe3czazxtOTvsqA4hEb8JATN4JInKXm9z+VEReFZHe7nkRkYdFZIN7/6mxiK+tyslK52Z3HPSFT6wwX1tTWWXDSg05a4jTu358aQklpcd71xVVAQ5XVDW55xB008Q8sjJSuGNew1/KfFXVZKQke056t1S97wQROSQiZfUdLbzu/ap6kqqOAhYAs9zzk3GS38OAq3F2oDNRdPkYK8zXVvkDasNKjbh16gjSU5NOmGV0fAFc7YqsXnRun8bNk/L4YNO+Br+UlVcGolY6AxpoHFQ1S1WzgV8BPwX6AH2Bm4GHWnJRVQ1tXNoDweZyJvAHdbwHdBKRXi25lmmapCTh3otHcqDcz88XWWG+tqQyUN3mdoFrqu5ZGfxkYi7vbNhzbJbR8cYhtdm/92uj+3Fyv07c+/IaDpbX/aXM5w+QEcXG28uVZqjqo6p6SFXLVPUxnA/xFhGRe0RkK/B1jvcc+gBbQx62zT1noii/dzbfOmsgf/3gMz7asi/W4Zgo8duwkidfHzuAkX06cteCYsp8/hb3HMCtljyzkL1HKnjwtXV1PqbcHyAjHnoOIY6IyNdFJFlEkkTk68CRxn5IRJaIyKo6jpkAqnqbqvbDKQl+bVMDF5GrRWS5iCwvLbXFW+F2wwXD6dUxg9teaLx0gGkdbLaSN8lJwj0XF7LncAUPvLrOc12lxozs25H/GjuAPyzbTNGOg7Xu9/mrozaNFbw1DpcDXwV2ucdX3HMNUtUJqlpYxzGvxkP/jLNXBMB2oF/IfX3dc3X9/ifdmk+jc3JyPDwN0xQd0lO4c3oBaz4/1GjpANM62Gwl707q2+nYB/lb6/YADZfr9urHF+bSOTONO15cRXWNzYZ8/kDUVkeDt0Vwm1V1pqp2U9UcVb1IVTe35KIiMizk5kwgOLg9H/imO2vpDOCgqrZs41XTbBMLnNIBD762nu0NlA4wrYO/Sm1YqQl+PDGXLu3T+efH20gS6Niu+TmHoI6ZqdwyZQQff3aAf3y07YT7yv2B+Oo5iMhwEXldRFa5t08SkdtbeN2fu0NMK3DKclzvnn8ZKAE2AE8B32/hdUwLiAizZxQAMHt+UYyjMZFWGagm1YaVPOvYztk1DqBzZhpJYSo78qVT+3D6wM78fNEaDrjVXiHYc4ivhPRTwC2AH0BVVwCXtuSiqvold4jpJFWdrqrb3fOqqteo6hBVHamqy1tyHdNyfTtncsOEYbxWvItXiz6PdTgmgiqrqkmz2UpNMnNUb84Z1o2B3dqH7XeKOGW9D5b7uW/x2mPny+NtWAnIVNUPapxr2i4VJqFdefYg8npmMXt+EUeauEGJSRx+S0g3mYjw2ytO549XjQnr7x3RK5srznRmDP7H3cq3wl8dd43DHhEZgrsWQUS+DFgeoA1JTU7inosL2XHQV+80OxM50SplYoX3mictJYnMtJSw/94fXjCMnA7p3P7iKgLVGn85B+Aa4AkgT0S2AzcA34tkUCb+nDagC5eN6c8z79Y9zc5ExnMfbmXCA0s9Ve1sKX/AEtLxJCsjldun5bNy+0H+8v6W+Ms5qGqJqk4AcoA8VT27pbOVTGL66aQ8OmemcusLzjcZE3lrdx1iY+kRHvlX5EupV9giuLgz/aRenDWkK/ctXht/PQcRCYjIz4GjqnrIPfdxxCMzcadjZiq3T83nP1sP8Jf3bUuPaKhwyzQ/8+9NbCyNbCl1f6DatgiNM8HktM8fQJW4WyFd5D7uVRHp4p6zKQ1t1MxRvTl7aDfuW7SW3WW+WIfT6vn81XRsl0pGSjJzXyqOaP7Bb7WV4tLQ7h349jmDAchIia/GoUpVbwKeBt4WkdM4XijPtDEizgYlFYFq5i6of9tEEx4+f4Cu7dO4fsIwlq4r5fXVde9EFg6WkI5f140fypdO7csXhnaL2jW9vBMEQFX/D/ga8AwwOJJBmfg2qFt7rhk3lAUrdvLm2sh9WBknD5CemswVZw1kaPcO3LWw+NhQUzhVV6slpONYZloKv/zqyeT2zIraNb28E74d/IeqrgLOAX4QsYhMQvifcYMZnNOeO+atOra3rQk/nz9AekoSqclJzJqWz5a9R/ndO5vDfh1/tVNc0dY5mKCGNvsZ7/5zgIhcEjyALwK2yXAbl56SzD0XjWTrvnIe+Vfj+9+a5nEWPjl/pucOz+GC/B488q/17ApzvscfcEaKrfCeCWronXCe+9/pdRzTIhyXSQBnDunKl07ty5NvlbBuV8P735rmqag6sWTCHVPzqapWfv5KeDdi8lc5PQdLSJughnaCu9P977fqOK6MXogmnt02dQQdMlK47YWVtUoMm5bz+atPmKHSv2smV58zmBc+2c7yzeHbiKkyEBxWit5sGBPf6l3zLSI/augHVfWB8IdjEk2X9mncOnkEN/1zBX//aCtfO71/rENqVXxVAdJrrIr9/vlD+MdH25j9UhHzrjmb5DBUA620noOpoaFhpaxGDmMA+MrovowZ1IV7X17DnsMVsQ6nVXH2DT7x23xmWgq3Th3Bqu1lPLd8az0/2TT+gCWkzYnq7Tmo6pxoBmISl4hw78WFTP7V29y7cDUPfG1UrENqNSqqquuspzP9pF78adkW7l+8limFveiY2bKNZoLDSjaV1QR5KZ+RISLXiMijIvK74BGN4EziGNo9i++eO4TnP9nOuxv2xDqcVsPnD5BeRz0dEeHOGfkcOFrJg0taXinXX2WzlcyJvLwT/gj0BCYCS3H2dbapKaaWa8cPZUDXTG57cRU+v619aClVdRPSdf+ZFvTuyOVj+/PH97aw9vOW/Uke6znYsJJxeXknDFXVO4AjqvosMBUYG9mwTCLKSE3m7osK2bTnCI+9uTHW4TRJVaA67mZbBT+w6+o5BN14QS5ZGSnMnl/UorpL/oAlpM2JvDQOwULyB0SkEOgIdI9cSCaRnTMsh5mjevPYmxvZsDtx1kp+6fFl3PL8yliHcQKf320cGvg237l9GjdemMuykr28sqr527gGZyvZsJIJ8vJOeFJEOgN3APOBYuC+iEZlEtrtU/PJSE3ithdWRm0Xs5basvcI/7d8K++X7I11KMdUuENzjW0NefmY/ozolc09C1c3u5SJzVYyNXnZ7OdpVd2vqktVdbCqdlfVx6MRnElMOVnp/HTyCN7ftI9/frw91uF4EvxQnTWv6NgHZaxVuN/mG2sckpOE2dPz2X6gnMeWNm84z2+zlUwNXmYrdRKRH4jIAyLycPCIRnAmcV16ej9OG9CZexYWs+9IZazDaVB1tVJRVU1hn2zW7jrEH5bFx0ZGwaS+lw14xg7uyoyTe/P40o1s3Xe0ydeqdGsrWeNggry8E14GBgIrgY9CDmPqlZQk3HvxSA75qrj35dWxDqdBwW/oU0f25rzhOTz42rq42MgomHNorOcQdMuUPJJFuHth0/fZsJyDqcnLOyFDVX+kqs+o6rPBI+KRmYSX2zOLq88dzD8+2sayjfEzll9TufsNPTMtmdkzCqisquZnYS5s1xzBfRu8birfq2M7rh0/lMVFu3h7fWmTrmU5B1OTp3UOIvIdEeklIl2CR8QjM63CdeOH0b9LJre9uDIim9SEQ7n/+IfwoG7t+e55TmG7WCenj89W8l4M79vnDGJA10xmz29a7sSmspqavDQOlcD9wDKODyktj2RQpvVol5bM3JkFlJQe4fE3S2IdTp2Cyejg8M33xw2lT6d2MU9O+/xN6zmA05DMmpbPxtIjPPvuZs8/d6zwnvUcjMvLO+FGnIVwA1V1kHuEZZtQEblRRFREurm3xU14bxCRFSJyajiuY2JrXG53pp/cm9+8sYGS0vhb+xD8EG7nNg7t0pKZNT2ftbsONekDNty8zlaqaXxed8bl5vDQkvXsPuQtd3KsZLflHIzLyzthA9D06Q+NEJF+wIXAZyGnJwPD3ONq4LFwX9fExh3TRpCemsTtL66Ku7UPxxqHtOMfwhfm9zj+ARuj5HRTZiuFEhFmTcunoirAfYvWevqZYG0lm61kgry8E44An4rIE2GeyvogcBMQ+kkxE/iDOt4DOolIrzBcy8RY96wMfjo5j3c37uX5OFv7UF7HYjMRYfZ0Jzkdq9lWvipvi+DqMjinA1ed7UwG+Piz/Y0+3h+oJjlJwrI3hGkdvDQOLwL3AO8SpqmsIjIT2K6q/6lxVx8gtED9NvdcXb/jahFZLiLLS0ubNjPDxMZlp/fn1P6duOfl1eyPo7UPwcRvuxofwgO7ted/zhvMi5/u4L0YJKcrglNZm7k727Xjh9IjO53Z84sarRvlD1RbMtqcoMHGQUSSgf8OncLqdSqriCwRkVV1HDOBW4FZLQlcVZ9U1dGqOjonJ6clv8pESVKScO8lIykr9/OzV+Jn7UNdPYeg740bSt/O7Zg1b1XUk9PBnkPNneC86pCewi2TR7Bi20H+/lHDmwJVVFVbvsGcoMF3g6oGgGoR6djUX6yqE1S1sOYBlACDgP+IyGacEuAfi0hPYDvQL+TX9HXPmVYir2c23zl3MM8t3xaTb+N18VXWzjkEtUtL5s7pBazbdZjf/3tzdOPyUHivMTNH9Wb0gM7ct2gtB8v99T7OH6i2NQ7mBF7eDYeBlSLy23DkHFR1pVufaaCqDsQZOjpVVT/HKez3TXfW0hnAQVXd2dxrmfj0g/HD6NelHbe+EB9rH471HOr5cJwwojvj87rz0JJ17IpicrqiKkB6ShIizR/uERFmzyhg39FKHnyt/k2BnGElaxzMcV7eDc/jVGR9i8iXz3gZp2exAXgK+H6ErmNiqF1aMndfNJKS0iM8sTT2ax/qmq0USkS4c3o+/mrlnoXRGw6r8Fe3qNcQVNinI5ePaXhTIH9ArXEwJ/BSlfVZ4K8cbxT+Es7yGW4PYo/7b1XVa1R1iKqOVFVbbNdKnTc8h+kn9+bXcbD24XjPof7E74Cu7fneeUOY/58dvLsxOtug+vyBZs1UqsuPL8ylQ3r9mwJVVtmwkjmRl6qs44D1wG+AR4F1InJuZMMybcEd00aQnhL7tQ/l/gBpKUkkNTKN83vjhtCvi7NyOriiOJIqqqrD1jh0bp/Gjy8czrKSvby8svamQJU2rGRq8PJu+CVwoaqep6rn4uwl/WBkwzJtQfesDG6eFPu1D77KQK1prHXJSE1m9vQCNuw+zO/f3RT5uPyBsAwrBV0+doC7KVAxRyurTrjPH6gmzaaymhBe3nmpqnpsmaWqrgNSIxeSaUsuHxP7tQ8+f7WnxgHgiyN6MGFEdx5asp6dB8sjHFf4hpXA2RRozowCdhz01drj2xLSpiYv74blIvK0iIxzj6ewwnsmTELXPsRqJXK5P1BvMroud04vIBCF5LQzrBTeD+wxg7owc1RvnnirhM/2Hq+KYzkHU5OXd8P3cPaN/oF7FLvnjAmL4NqHv8do34fyJg7f9OuSyffHDWXBip38e0PkktPOsFL4eg5Bt0weQUqSMHfB8U2BKm22kqnBy2ylClV9QFUvcY8HVbUiGsGZtiO49iEW+z74mthzAPjueYPp3yWTWfNWRSw57fOHv+cA0LNjBteNH8aS1bt4c+1uAPxVNqxkTuRlttIXROQ1EVknIiXBIxrBmbYjdO1DtPd98Pm9JaRDZaQmM3uGs2/C7/4dmeS0rypAehhzDqGuPHsgg7q1Z+5LxVRWVbsrpC0hbY7z8lXht8ADwNnA6SGHMWEVXPsQ7X0fypvROACMz+vBBfk9ePj19ew4EP7kdLgWwdUlPcXZs6Jkj9O4VQastpI5kZd3w0FVfUVVd6vq3uAR8chMmxSLfR/KK5s/K2jWtHwC1crdC4sbf3ATVVSFd7ZSTefndmfCiO488vp69h2ptGElcwIv74Y3ROR+ETlTRE4NHhGPzLRJsdj3wRnbb96HcL8umVx7/lBeXvk5b68Pb+l4n7+62eW6vbpjmlMW5JCvyrYINSfw8m4YC4wG7sVZEPdL4BeRDMq0baH7PuyLwtoHJyHd/A/G75w7mIFdM7lzXlFYk+kVVYFml+v2akDX9lx9jrPrrw0rmVBeZiudX8cxPhrBmbbphH0forD2obk5hyAnOV1AyZ4jPP12eJLTgWrFH9CI9xwAvn/+EPJ7ZZPbMyvi1zKJw74qmLgUrbUPqkp5GFYij8vtzsSCHjzyr/VsD0Ny2ndsA6LI/4lmpqXw8vXncNmY/hG/lkkc1jiYuBWNtQ+VgWpUm7dPc013TMsHYO5LRS3+XRVVLd/ox5iWsHeeiVvRWPvgq6x7/+jm6Ns5k+vGD2Nx0fHFZc2Oq4GtS42JBk+Ng4icJSKXi8g3g0ekAzMGIr/2oaH9o5vj2+cMYnC39sye37LktDUOJta8rJD+I87spNBFcKMjHJcxxwTXPtz2QvjXPpQf2wUuPJ3o9BQnOb1571GebMEudzasZGItxcNjRgP5GsvdWEybFlz7cNsLq/jnx9v58ml9w/a7j20RGsZv6OcOz2HKyJ78+o0NXHRKH/p1yWx2XNZzMLHi5WvJKqBnpAMxpiHH1j4sLA7r2odwDysF3TEtn+QalU+bwud3ew5RmK1kTF28vPO6AcUislhE5gePSAdmTKjg2odDvqqwrn3wVUamcejVsR3XjR/Ga8W7eGNN05PTwXxFJEp2G+OFl2Gl2ZEOwhgvgmsfHntzI5ec2pczh3Rt8e8sj8CwUtBVZw/i7x9tZfZLRZw5pGuTGqBgzyEa6xyMqYuXFdJL6zqiEZwxNYV77UPwQ7ip+zl4kZaSxNwZhWzZe5QnmpicDj43yzmYWPEyW+kMEflQRA6LSKWIBESkLBrBGVNTu7Rk7ppZGLa1D5HsOQCcPawbU0/qxaNvbmDrvqON/4Crwm+zlUxseXnn/Rq4DFgPtAO+DfwmkkEZ05Bxud3DtvYh2DhEMvF7+9QRJCcJc5qwctpnPQcTY57+IlR1A5CsqgFVfQaYFNmwjGlYuNY+BBPSkeo5gJOcvv6Lw1iyejdLind5i8umspoY89I4HBWRNOBTEblPRH7o8efqJSKzRWS7iHzqHlNC7rtFRDaIyFoRmdiS65jWK7j2YVlJy/Z9iNaH8Le+MIih3TswZ0HRsWs2xIaVTKx5eed9w33ctcARoB/wpTBc+0FVHeUeLwOISD5wKVCA0zt5VETsq5OpU+i+D/ubufah3B8gJUkivgtaWkoSc2cWsHVfOY+9ubHRx/uqAiRHIS5j6uNlttIWQIBeqjpHVX/kDjNFwkzgb6paoaqbgA3AmAhdyyS4E/Z9eKV5ax9aupdDU5w1pBszTu7NY0s3smXvkQYf6+wCZw2DiR0vs5WmA58Ci9zbo8K0CO5aEVkhIr8Tkc7uuT7A1pDHbHPP1RXX1SKyXESWl5aGd3tGkzjyembz7XMG89zybbxf0vR9H3z+ABkRmMZan9umjiA1SZg9v6jBXImzC5x1mk3sePlqMhvn2/sBAFX9FBjU2A+JyBIRWVXHMRN4DBgCjAJ24mw92iSq+qSqjlbV0Tk5OU39cdOKXP/FYfTt3I5bX2j62gefvzpqPQeAHtkZ/PCC4byxtpQlq+tfOW09BxNrXt59flU9WONco9NDVHWCqhbWccxT1V3uzKdq4CmODx1tx8lpBPV1zxlTr3Zpydx1USEbS480uRJqeWUg6quQrzhrIMN7dGD2/CLKK+tuzHxh2J3OmJbw8ldRJCKXA8kiMkxEHgHebclFRaRXyM2LcYr7AcwHLhWRdBEZBAwDPmjJtUzbcH5ud6ae1ItH3tjA5j0Nj+eHimbOISg1OYm5MwvZfqCcx96sO31XUVVNmvUcTAx5efddhzN7qAL4K1AG3NDC694nIitFZAVwPvBDAFUtAp4DinFyHNeoamT2hzStzp3T8klPTuL2F72vfYjVN/QzBnflolG9eXxpSZ2NmfUcTKx5ma10VFVvU9XT3TH+21TV15KLquo3VHWkqp6kqjNUdWfIffeo6hBVzVXVV1pyHdO2dM/O4KZJubyzYQ/zPt3h6Wd8/kBE6ip5ceuUEaSlJDH7pdrJ6Qp/tRXdMzFVb1XWxmYkqeqM8IdjTMtcPnYA//x4O3ctKGZcbg6dMtMafHy5P0CvGJXF7p6dwQ0ThnH3wtW8WryLiQXHt02pqAo0GrsxkdTQV5MzcRLCb+NsE/rLGocxcSc5Sbj34pEcKPfzv4vWNPr48hj2HMBJTuf2yGLuS8UnJKd91nMwMdbQu68ncCtQCPwKuADYYyW7TbzL753NlV8YyF8/2MryzfsafKzzIRy7xsFJThew/UA5j4Ykp31VlnMwsVVv4+BONV2kqlcAZ+CsVn5TRK6NWnTGNNMNE4bTp5Oz9qGyqrrex/kqoz9bqaaxbnL6iaUlbHKT0z5/wOoqmZhq8N3nTim9BPgTcA3wMPBCNAIzpiXap6cwZ0YB63Yd5ul36l/7UO6P/jqHugST03e6K6crqmLbozGm3r8KEfkDsAw4FZjjzla6S1VtUZpJCBPyezCxoAcPv76ez/bW3mjHH6imqlpj3nMAJzn9wwuG89a6UhYX7bKprCbmGvrK9F84i9CuB94VkTL3OGQ7wZlEMXtGAcki3DGv9tqHYOnsWCakQ11x5gBye2Rx14JiKqqqbVjJxFRDOYckVc1yj+yQI0tVs6MZpDHN1atjO268MJel60pZuHLnCfcd3wUuPhqHlJDktKpt9GNiy76amFbvirMGMrJPR+a8VMzBcv+x875KJ1EdD8NKQWMHd+XiU5xCxNZzMLFk7z7T6gXXPuw9XMEvFq89dj7Yc4inxgHglsl55PbIYkQv66Cb2LHGwbQJI/t25JtnDuRP72/h060HgNCcQ3z9GXTPzmDxD8/lC0O7xToU04bF11+FMRF044XD6Z6Vzq3Pr6QqUH2s55ARo/IZxsQzaxxMm5GVkcqd0wso3lnG79/dfLxxiJPZSsbEE2scTJsyubAn5+fm8MBr6ygpdVYjx1vOwZh4YI2DaVNEhLkzC6lW5aEl6wBrHIypizUOps3p1yWT6784nEO+KsDWExhTF2scTJv07XMGkdsjCyAuaisZE2/q3ezHmNYsNTmJX102igX/2UnHdqmxDseYuGONg2mz8npmk9fTFpoZUxfrTxtjjKnFGgdjjDG1WONgjDGmFmscjDHG1GKNgzHGmFqscTDGGFOLNQ7GGGNqscbBGGNMLVJz0/VEJCKlwJZm/ng3YE8Yw4m11vR87LnEJ3su8ak5z2WAqubUdUeraBxaQkSWq+roWMcRLq3p+dhziU/2XOJTuJ+LDSsZY4ypxRoHY4wxtVjjAE/GOoAwa03Px55LfLLnEp/C+lzafM7BGGNMbdZzMMYYU4s1DsYYY2pp042DiEwSkbUiskFEfhrreJpCRPqJyBsiUiwiRSJyvXu+i4i8JiLr3f92jnWsXolIsoh8IiIL3NuDROR99/X5PxFJi3WMXohIJxH5h4isEZHVInJmor4uIvJD9/21SkT+KiIZifS6iMjvRGS3iKwKOVfnayGOh93ntUJETo1d5LXV81zud99nK0TkBRHpFHLfLe5zWSsiE5t6vTbbOIhIMvAbYDKQD1wmIvmxjapJqoAbVTUfOAO4xo3/p8DrqjoMeN29nSiuB1aH3P5f4EFVHQrsB66KSVRN9ytgkarmASfjPKeEe11EpA/wA2C0qhYCycClJNbr8ntgUo1z9b0Wk4Fh7nE18FiUYvTq99R+Lq8Bhap6ErAOuAXA/Sy4FChwf+ZR9zPPszbbOABjgA2qWqKqlcDfgJkxjskzVd2pqh+7/z6E8wHUB+c5POs+7FngopgE2EQi0heYCjzt3hZgPPAP9yEJ8VxEpCNwLvBbAFWtVNUDJOjrgrOVcDsRSQEygZ0k0Ouiqm8B+2qcru+1mAn8QR3vAZ1EpFdUAvWgrueiqq+qapV78z2gr/vvmcDfVLVCVTcBG3A+8zxry41DH2BryO1t7rmEIyIDgVOA94EeqrrTvetzoEes4mqih4CbgGr3dlfgQMgbP1Fen0FAKfCMO0T2tIi0JwFfF1XdDvwC+AynUTgIfERivi6h6nstEv0z4UrgFfffLX4ubblxaBVEpAPwT+AGVS0LvU+decpxP1dZRKYBu1X1o1jHEgYpwKnAY6p6CnCEGkNICfS6dMb5BjoI6A20p/awRkJLlNeiMSJyG85Q85/D9TvbcuOwHegXcruvey5hiEgqTsPwZ1V93j29K9gVdv+7O1bxNcEXgBkishlneG88zrh9J3c4AxLn9dkGbFPV993b/8BpLBLxdZkAbFLVUlX1A8/jvFaJ+LqEqu+1SMjPBBH5b2Aa8HU9vnCtxc+lLTcOHwLD3JkXaTjJm/kxjskzd0z+t8BqVX0g5K75wBXuv68A5kU7tqZS1VtUta+qDsR5Hf6lql8H3gC+7D4sUZ7L58BWEcl1T30RKCYBXxec4aQzRCTTfb8Fn0vCvS411PdazAe+6c5aOgM4GDL8FJdEZBLOcOwMVT0actd84FIRSReRQThJ9g+a9MtVtc0ewBScDP9G4LZYx9PE2M/G6Q6vAD51jyk4Y/WvA+uBJUCXWMfaxOc1Dljg/nuw+4beAPwdSI91fB6fwyhgufvavAh0TtTXBZgDrAFWAX8E0hPpdQH+ipMv8eP06q6q77UABGcG40ZgJc4srZg/h0aeywac3ELwM+DxkMff5j6XtcDkpl7PymcYY4yppS0PKxljjKmHNQ7GGGNqscbBGGNMLdY4GGOMqcUaB2OMMbVY42BME4hIVxH51D0+F5Ht7r8Pi8ijsY7PmHCxqazGNJOIzAYOq+ovYh2LMeFmPQdjwkBExoXsQzFbRJ4VkbdFZIuIXCIi94nIShFZ5JY9QUROE5GlIvKRiCyOpwqgxljjYExkDMGpETUD+BPwhqqOBMqBqW4D8QjwZVU9DfgdcE+sgjWmppTGH2KMaYZXVNUvIitxNslZ5J5fCQwEcoFC4DWnbBHJOKURjIkL1jgYExkVAKpaLSJ+PZ7cq8b5uxOgSFXPjFWAxjTEhpWMiY21QI6InAlO+XURKYhxTMYcY42DMTGgzta0Xwb+V0T+g1NR86yYBmVMCJvKaowxphbrORhjjKnFGgdjjDG1WONgjDGmFmscjDHG1GKNgzHGmFqscTDGGFOLNQ7GGGNq+X/QU97E+daMhwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(np.mean(PFexample.history[\"mNrm\"] * PFexample.history[\"pLvl\"], axis=1))\n", + "plt.xlabel(\"Time\")\n", + "plt.ylabel(\"Mean normalized market resources\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "bb741c54", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_14820/947589964.py:1: RuntimeWarning: divide by zero encountered in log\n", + " plt.plot(np.log(np.mean(PFexample.history[\"mNrm\"], axis=1) - np.min(np.mean(PFexample.history[\"mNrm\"], axis=1))))\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(\n", + " np.log(\n", + " np.mean(PFexample.history[\"mNrm\"], axis=1)\n", + " - np.min(np.mean(PFexample.history[\"mNrm\"], axis=1))\n", + " )\n", + ")\n", + "plt.xlabel(\"Time\")\n", + "plt.ylabel(\"Mean normalized market resources\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "603ae6e5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(0,)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "PFexample.newborn_init_history[\"pLvl\"][1, PFexample.history[\"who_dies\"][1, :] > 0].shape" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "567440dd", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(0,)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "PFexample.newborn_init_history[\"aNrm\"][2, PFexample.history[\"who_dies\"][2, :] > 0].shape" + ] + }, + { + "cell_type": "markdown", + "id": "0ead3ec8", + "metadata": {}, + "source": [ + "## Using the Generic Monte Carlo Simulator" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "adfbe431", + "metadata": {}, + "outputs": [], + "source": [ + "from HARK.distribution import Lognormal\n", + "import HARK.models.perfect_foresight_normalized as pfn\n", + "from HARK.simulation.monte_carlo import AgentTypeMonteCarloSimulator" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "5a0c394b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'shocks': {'live': },\n", + " 'parameters': {'DiscFac': 0.96,\n", + " 'CRRA': (2.0,),\n", + " 'Rfree': 1.03,\n", + " 'LivPrb': 0.98,\n", + " 'PermGroFac': 1.01,\n", + " 'BoroCnstArt': None},\n", + " 'dynamics': {'p': (PermGroFac, p)>,\n", + " 'r_eff': (Rfree, PermGroFac)>,\n", + " 'b_nrm': (r_eff, a_nrm)>,\n", + " 'm_nrm': (b_nrm)>,\n", + " 'c_nrm': ,\n", + " 'a_nrm': (m_nrm, c_nrm)>},\n", + " 'reward': {'u': (c)>}}" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pfn.model" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "e9d068bd", + "metadata": {}, + "outputs": [], + "source": [ + "pfn_simulator = AgentTypeMonteCarloSimulator(\n", + " pfn.model[\"parameters\"],\n", + " pfn.model[\"shocks\"],\n", + " pfn.model[\"dynamics\"],\n", + " {\"c_nrm\": lambda m_nrm: PFexample.solution[0].cFunc(m_nrm)},\n", + " { # initial states\n", + " \"a_nrm\": Lognormal(-6, 0),\n", + " #'live' : 1,\n", + " \"p\": 1.0,\n", + " },\n", + " agent_count=3,\n", + " T_sim=120,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "36ba1dda", + "metadata": {}, + "outputs": [], + "source": [ + "pfn_simulator.read_shocks = True\n", + "# pfn_simulator.shock_history['live'] = 1 - np.roll(PFexample.history[\"who_dies\"], -1)\n", + "\n", + "pfn_simulator.shock_history[\"live\"] = 1 - PFexample.history[\"who_dies\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "bc84d3e5", + "metadata": {}, + "outputs": [], + "source": [ + "pfn_simulator.newborn_init_history[\"a_nrm\"] = PFexample.newborn_init_history[\"aNrm\"]\n", + "pfn_simulator.newborn_init_history[\"p\"] = PFexample.newborn_init_history[\"pLvl\"]\n", + "# pfn_simulator.newborn_init_history['live'] = PFexample.newborn_init_history['pLvl']" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "65df3a7f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'live': array([[ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 0.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 0., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 0.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 0., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 0., 1., 1.],\n", + " [ 1., 0., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 0., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 0., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 1.],\n", + " [ 1., 1., 0.],\n", + " [ 1., 1., 1.],\n", + " [nan, nan, nan]]),\n", + " 'p': array([[1.01 , 1.01 , 1.01 ],\n", + " [1.0201 , 1.0201 , 1.0201 ],\n", + " [1.030301 , 1.030301 , 1.030301 ],\n", + " [1.04060401, 1.04060401, 1.04060401],\n", + " [1.05101005, 1.05101005, 1.05101005],\n", + " [1.06152015, 1.06152015, 1.06152015],\n", + " [1.07213535, 1.07213535, 1.07213535],\n", + " [1.08285671, 1.08285671, 1.08285671],\n", + " [1.09368527, 1.09368527, 1.09368527],\n", + " [1.10462213, 1.10462213, 1.01 ],\n", + " [1.11566835, 1.11566835, 1.0201 ],\n", + " [1.12682503, 1.12682503, 1.030301 ],\n", + " [1.13809328, 1.13809328, 1.04060401],\n", + " [1.14947421, 1.14947421, 1.05101005],\n", + " [1.16096896, 1.16096896, 1.06152015],\n", + " [1.17257864, 1.17257864, 1.07213535],\n", + " [1.18430443, 1.18430443, 1.08285671],\n", + " [1.19614748, 1.19614748, 1.09368527],\n", + " [1.20810895, 1.20810895, 1.10462213],\n", + " [1.22019004, 1.22019004, 1.11566835],\n", + " [1.23239194, 1.23239194, 1.12682503],\n", + " [1.24471586, 1.24471586, 1.13809328],\n", + " [1.25716302, 1.25716302, 1.14947421],\n", + " [1.26973465, 1.26973465, 1.16096896],\n", + " [1.282432 , 1.282432 , 1.17257864],\n", + " [1.29525631, 1.29525631, 1.18430443],\n", + " [1.30820888, 1.30820888, 1.19614748],\n", + " [1.32129097, 1.32129097, 1.20810895],\n", + " [1.33450388, 1.33450388, 1.22019004],\n", + " [1.34784892, 1.34784892, 1.23239194],\n", + " [1.3613274 , 1.3613274 , 1.24471586],\n", + " [1.37494068, 1.37494068, 1.25716302],\n", + " [1.38869009, 1.38869009, 1.26973465],\n", + " [1.40257699, 1.40257699, 1.282432 ],\n", + " [1.41660276, 1.41660276, 1.29525631],\n", + " [1.43076878, 1.43076878, 1.30820888],\n", + " [1.44507647, 1.44507647, 1.32129097],\n", + " [1.45952724, 1.45952724, 1.33450388],\n", + " [1.47412251, 1.47412251, 1.34784892],\n", + " [1.48886373, 1.48886373, 1.3613274 ],\n", + " [1.50375237, 1.50375237, 1.37494068],\n", + " [1.51878989, 1.51878989, 1.38869009],\n", + " [1.53397779, 1.53397779, 1.40257699],\n", + " [1.54931757, 1.54931757, 1.41660276],\n", + " [1.56481075, 1.56481075, 1.43076878],\n", + " [1.58045885, 1.58045885, 1.44507647],\n", + " [1.59626344, 1.59626344, 1.45952724],\n", + " [1.61222608, 1.61222608, 1.47412251],\n", + " [1.62834834, 1.62834834, 1.48886373],\n", + " [1.64463182, 1.64463182, 1.50375237],\n", + " [1.66107814, 1.66107814, 1.51878989],\n", + " [1.67768892, 1.01 , 1.53397779],\n", + " [1.69446581, 1.0201 , 1.54931757],\n", + " [1.71141047, 1.030301 , 1.56481075],\n", + " [1.72852457, 1.04060401, 1.58045885],\n", + " [1.74580982, 1.05101005, 1.59626344],\n", + " [1.76326792, 1.06152015, 1.61222608],\n", + " [1.7809006 , 1.07213535, 1.62834834],\n", + " [1.7987096 , 1.08285671, 1.64463182],\n", + " [1.8166967 , 1.09368527, 1.66107814],\n", + " [1.83486367, 1.10462213, 1.67768892],\n", + " [1.8532123 , 1.11566835, 1.69446581],\n", + " [1.87174443, 1.12682503, 1.71141047],\n", + " [1.89046187, 1.13809328, 1.72852457],\n", + " [1.90936649, 1.14947421, 1.74580982],\n", + " [1.92846015, 1.16096896, 1.76326792],\n", + " [1.94774475, 1.17257864, 1.01 ],\n", + " [1.9672222 , 1.18430443, 1.0201 ],\n", + " [1.98689442, 1.19614748, 1.030301 ],\n", + " [2.00676337, 1.20810895, 1.04060401],\n", + " [2.026831 , 1.22019004, 1.05101005],\n", + " [2.04709931, 1.23239194, 1.06152015],\n", + " [2.06757031, 1.24471586, 1.07213535],\n", + " [2.08824601, 1.25716302, 1.08285671],\n", + " [2.10912847, 1.26973465, 1.09368527],\n", + " [2.13021975, 1.282432 , 1.10462213],\n", + " [2.15152195, 1.29525631, 1.11566835],\n", + " [1.01 , 1.30820888, 1.12682503],\n", + " [1.0201 , 1.32129097, 1.13809328],\n", + " [1.030301 , 1.33450388, 1.14947421],\n", + " [1.04060401, 1.34784892, 1.16096896],\n", + " [1.05101005, 1.3613274 , 1.17257864],\n", + " [1.01 , 1.37494068, 1.18430443],\n", + " [1.0201 , 1.01 , 1.19614748],\n", + " [1.030301 , 1.0201 , 1.20810895],\n", + " [1.04060401, 1.030301 , 1.22019004],\n", + " [1.05101005, 1.04060401, 1.23239194],\n", + " [1.06152015, 1.05101005, 1.24471586],\n", + " [1.07213535, 1.06152015, 1.25716302],\n", + " [1.08285671, 1.07213535, 1.26973465],\n", + " [1.09368527, 1.08285671, 1.282432 ],\n", + " [1.10462213, 1.09368527, 1.29525631],\n", + " [1.11566835, 1.10462213, 1.30820888],\n", + " [1.12682503, 1.11566835, 1.32129097],\n", + " [1.01 , 1.12682503, 1.33450388],\n", + " [1.0201 , 1.13809328, 1.34784892],\n", + " [1.030301 , 1.14947421, 1.3613274 ],\n", + " [1.04060401, 1.16096896, 1.37494068],\n", + " [1.05101005, 1.17257864, 1.38869009],\n", + " [1.06152015, 1.18430443, 1.40257699],\n", + " [1.07213535, 1.19614748, 1.41660276],\n", + " [1.08285671, 1.20810895, 1.43076878],\n", + " [1.09368527, 1.22019004, 1.44507647],\n", + " [1.10462213, 1.23239194, 1.45952724],\n", + " [1.11566835, 1.24471586, 1.47412251],\n", + " [1.12682503, 1.25716302, 1.48886373],\n", + " [1.13809328, 1.26973465, 1.50375237],\n", + " [1.14947421, 1.282432 , 1.51878989],\n", + " [1.16096896, 1.01 , 1.53397779],\n", + " [1.17257864, 1.0201 , 1.54931757],\n", + " [1.18430443, 1.030301 , 1.56481075],\n", + " [1.19614748, 1.04060401, 1.58045885],\n", + " [1.20810895, 1.05101005, 1.59626344],\n", + " [1.22019004, 1.06152015, 1.61222608],\n", + " [1.23239194, 1.07213535, 1.62834834],\n", + " [1.24471586, 1.08285671, 1.64463182],\n", + " [1.25716302, 1.09368527, 1.66107814],\n", + " [1.26973465, 1.10462213, 1.67768892],\n", + " [1.282432 , 1.11566835, 1.01 ],\n", + " [1.29525631, 1.12682503, 1.0201 ]]),\n", + " 'r_eff': array([[1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198],\n", + " [1.01980198, 1.01980198, 1.01980198]]),\n", + " 'b_nrm': array([[ 2.52783638e-03, 2.52783638e-03, 2.52783638e-03],\n", + " [-1.30338194e+00, -1.30338194e+00, -1.30338194e+00],\n", + " [-2.57617872e+00, -2.57617872e+00, -2.57617872e+00],\n", + " [-3.81670212e+00, -3.81670212e+00, -3.81670212e+00],\n", + " [-5.02577047e+00, -5.02577047e+00, -5.02577047e+00],\n", + " [-6.20418135e+00, -6.20418135e+00, -6.20418135e+00],\n", + " [-7.35271213e+00, -7.35271213e+00, -7.35271213e+00],\n", + " [-8.47212045e+00, -8.47212045e+00, -8.47212045e+00],\n", + " [-9.56314476e+00, -9.56314476e+00, -9.56314476e+00],\n", + " [-1.06265047e+01, -1.06265047e+01, 2.52783638e-03],\n", + " [-1.16629019e+01, -1.16629019e+01, -1.30338194e+00],\n", + " [-1.26730199e+01, -1.26730199e+01, -2.57617872e+00],\n", + " [-1.36575250e+01, -1.36575250e+01, -3.81670212e+00],\n", + " [-1.46170668e+01, -1.46170668e+01, -5.02577047e+00],\n", + " [-1.55522782e+01, -1.55522782e+01, -6.20418135e+00],\n", + " [-1.64637761e+01, -1.64637761e+01, -7.35271213e+00],\n", + " [-1.73521618e+01, -1.73521618e+01, -8.47212045e+00],\n", + " [-1.82180214e+01, -1.82180214e+01, -9.56314476e+00],\n", + " [-1.90619260e+01, -1.90619260e+01, -1.06265047e+01],\n", + " [-1.98844323e+01, -1.98844323e+01, -1.16629019e+01],\n", + " [-2.06860829e+01, -2.06860829e+01, -1.26730199e+01],\n", + " [-2.14674067e+01, -2.14674067e+01, -1.36575250e+01],\n", + " [-2.22289190e+01, -2.22289190e+01, -1.46170668e+01],\n", + " [-2.29711222e+01, -2.29711222e+01, -1.55522782e+01],\n", + " [-2.36945059e+01, -2.36945059e+01, -1.64637761e+01],\n", + " [-2.43995473e+01, -2.43995473e+01, -1.73521618e+01],\n", + " [-2.50867114e+01, -2.50867114e+01, -1.82180214e+01],\n", + " [-2.57564517e+01, -2.57564517e+01, -1.90619260e+01],\n", + " [-2.64092098e+01, -2.64092098e+01, -1.98844323e+01],\n", + " [-2.70454164e+01, -2.70454164e+01, -2.06860829e+01],\n", + " [-2.76654912e+01, -2.76654912e+01, -2.14674067e+01],\n", + " [-2.82698432e+01, -2.82698432e+01, -2.22289190e+01],\n", + " [-2.88588711e+01, -2.88588711e+01, -2.29711222e+01],\n", + " [-2.94329634e+01, -2.94329634e+01, -2.36945059e+01],\n", + " [-2.99924989e+01, -2.99924989e+01, -2.43995473e+01],\n", + " [-3.05378466e+01, -3.05378466e+01, -2.50867114e+01],\n", + " [-3.10693664e+01, -3.10693664e+01, -2.57564517e+01],\n", + " [-3.15874088e+01, -3.15874088e+01, -2.64092098e+01],\n", + " [-3.20923156e+01, -3.20923156e+01, -2.70454164e+01],\n", + " [-3.25844199e+01, -3.25844199e+01, -2.76654912e+01],\n", + " [-3.30640462e+01, -3.30640462e+01, -2.82698432e+01],\n", + " [-3.35315109e+01, -3.35315109e+01, -2.88588711e+01],\n", + " [-3.39871226e+01, -3.39871226e+01, -2.94329634e+01],\n", + " [-3.44311816e+01, -3.44311816e+01, -2.99924989e+01],\n", + " [-3.48639809e+01, -3.48639809e+01, -3.05378466e+01],\n", + " [-3.52858060e+01, -3.52858060e+01, -3.10693664e+01],\n", + " [-3.56969353e+01, -3.56969353e+01, -3.15874088e+01],\n", + " [-3.60976398e+01, -3.60976398e+01, -3.20923156e+01],\n", + " [-3.64881839e+01, -3.64881839e+01, -3.25844199e+01],\n", + " [-3.68688253e+01, -3.68688253e+01, -3.30640462e+01],\n", + " [-3.72398151e+01, -3.72398151e+01, -3.35315109e+01],\n", + " [-3.76013980e+01, 2.52783638e-03, -3.39871226e+01],\n", + " [-3.79538124e+01, -1.30338194e+00, -3.44311816e+01],\n", + " [-3.82972910e+01, -2.57617872e+00, -3.48639809e+01],\n", + " [-3.86320602e+01, -3.81670212e+00, -3.52858060e+01],\n", + " [-3.89583409e+01, -5.02577047e+00, -3.56969353e+01],\n", + " [-3.92763483e+01, -6.20418135e+00, -3.60976398e+01],\n", + " [-3.95862923e+01, -7.35271213e+00, -3.64881839e+01],\n", + " [-3.98883772e+01, -8.47212045e+00, -3.68688253e+01],\n", + " [-4.01828024e+01, -9.56314476e+00, -3.72398151e+01],\n", + " [-4.04697621e+01, -1.06265047e+01, -3.76013980e+01],\n", + " [-4.07494455e+01, -1.16629019e+01, -3.79538124e+01],\n", + " [-4.10220372e+01, -1.26730199e+01, -3.82972910e+01],\n", + " [-4.12877170e+01, -1.36575250e+01, -3.86320602e+01],\n", + " [-4.15466602e+01, -1.46170668e+01, -3.89583409e+01],\n", + " [-4.17990375e+01, -1.55522782e+01, -3.92763483e+01],\n", + " [-4.20450154e+01, -1.64637761e+01, 2.52783638e-03],\n", + " [-4.22847563e+01, -1.73521618e+01, -1.30338194e+00],\n", + " [-4.25184183e+01, -1.82180214e+01, -2.57617872e+00],\n", + " [-4.27461554e+01, -1.90619260e+01, -3.81670212e+00],\n", + " [-4.29681180e+01, -1.98844323e+01, -5.02577047e+00],\n", + " [-4.31844525e+01, -2.06860829e+01, -6.20418135e+00],\n", + " [-4.33953015e+01, -2.14674067e+01, -7.35271213e+00],\n", + " [-4.36008042e+01, -2.22289190e+01, -8.47212045e+00],\n", + " [-4.38010961e+01, -2.29711222e+01, -9.56314476e+00],\n", + " [-4.39963093e+01, -2.36945059e+01, -1.06265047e+01],\n", + " [-4.41865726e+01, -2.43995473e+01, -1.16629019e+01],\n", + " [ 2.52783638e-03, -2.50867114e+01, -1.26730199e+01],\n", + " [-1.30338194e+00, -2.57564517e+01, -1.36575250e+01],\n", + " [-2.57617872e+00, -2.64092098e+01, -1.46170668e+01],\n", + " [-3.81670212e+00, -2.70454164e+01, -1.55522782e+01],\n", + " [-5.02577047e+00, -2.76654912e+01, -1.64637761e+01],\n", + " [ 2.52783638e-03, -2.82698432e+01, -1.73521618e+01],\n", + " [-1.30338194e+00, 2.52783638e-03, -1.82180214e+01],\n", + " [-2.57617872e+00, -1.30338194e+00, -1.90619260e+01],\n", + " [-3.81670212e+00, -2.57617872e+00, -1.98844323e+01],\n", + " [-5.02577047e+00, -3.81670212e+00, -2.06860829e+01],\n", + " [-6.20418135e+00, -5.02577047e+00, -2.14674067e+01],\n", + " [-7.35271213e+00, -6.20418135e+00, -2.22289190e+01],\n", + " [-8.47212045e+00, -7.35271213e+00, -2.29711222e+01],\n", + " [-9.56314476e+00, -8.47212045e+00, -2.36945059e+01],\n", + " [-1.06265047e+01, -9.56314476e+00, -2.43995473e+01],\n", + " [-1.16629019e+01, -1.06265047e+01, -2.50867114e+01],\n", + " [-1.26730199e+01, -1.16629019e+01, -2.57564517e+01],\n", + " [ 2.52783638e-03, -1.26730199e+01, -2.64092098e+01],\n", + " [-1.30338194e+00, -1.36575250e+01, -2.70454164e+01],\n", + " [-2.57617872e+00, -1.46170668e+01, -2.76654912e+01],\n", + " [-3.81670212e+00, -1.55522782e+01, -2.82698432e+01],\n", + " [-5.02577047e+00, -1.64637761e+01, -2.88588711e+01],\n", + " [-6.20418135e+00, -1.73521618e+01, -2.94329634e+01],\n", + " [-7.35271213e+00, -1.82180214e+01, -2.99924989e+01],\n", + " [-8.47212045e+00, -1.90619260e+01, -3.05378466e+01],\n", + " [-9.56314476e+00, -1.98844323e+01, -3.10693664e+01],\n", + " [-1.06265047e+01, -2.06860829e+01, -3.15874088e+01],\n", + " [-1.16629019e+01, -2.14674067e+01, -3.20923156e+01],\n", + " [-1.26730199e+01, -2.22289190e+01, -3.25844199e+01],\n", + " [-1.36575250e+01, -2.29711222e+01, -3.30640462e+01],\n", + " [-1.46170668e+01, -2.36945059e+01, -3.35315109e+01],\n", + " [-1.55522782e+01, 2.52783638e-03, -3.39871226e+01],\n", + " [-1.64637761e+01, -1.30338194e+00, -3.44311816e+01],\n", + " [-1.73521618e+01, -2.57617872e+00, -3.48639809e+01],\n", + " [-1.82180214e+01, -3.81670212e+00, -3.52858060e+01],\n", + " [-1.90619260e+01, -5.02577047e+00, -3.56969353e+01],\n", + " [-1.98844323e+01, -6.20418135e+00, -3.60976398e+01],\n", + " [-2.06860829e+01, -7.35271213e+00, -3.64881839e+01],\n", + " [-2.14674067e+01, -8.47212045e+00, -3.68688253e+01],\n", + " [-2.22289190e+01, -9.56314476e+00, -3.72398151e+01],\n", + " [-2.29711222e+01, -1.06265047e+01, -3.76013980e+01],\n", + " [-2.36945059e+01, -1.16629019e+01, 2.52783638e-03],\n", + " [-2.43995473e+01, -1.26730199e+01, -1.30338194e+00]]),\n", + " 'm_nrm': array([[ 1.00252784, 1.00252784, 1.00252784],\n", + " [ -0.30338194, -0.30338194, -0.30338194],\n", + " [ -1.57617872, -1.57617872, -1.57617872],\n", + " [ -2.81670212, -2.81670212, -2.81670212],\n", + " [ -4.02577047, -4.02577047, -4.02577047],\n", + " [ -5.20418135, -5.20418135, -5.20418135],\n", + " [ -6.35271213, -6.35271213, -6.35271213],\n", + " [ -7.47212045, -7.47212045, -7.47212045],\n", + " [ -8.56314476, -8.56314476, -8.56314476],\n", + " [ -9.62650475, -9.62650475, 1.00252784],\n", + " [-10.6629019 , -10.6629019 , -0.30338194],\n", + " [-11.67301988, -11.67301988, -1.57617872],\n", + " [-12.65752504, -12.65752504, -2.81670212],\n", + " [-13.61706682, -13.61706682, -4.02577047],\n", + " [-14.5522782 , -14.5522782 , -5.20418135],\n", + " [-15.46377611, -15.46377611, -6.35271213],\n", + " [-16.35216182, -16.35216182, -7.47212045],\n", + " [-17.21802139, -17.21802139, -8.56314476],\n", + " [-18.06192599, -18.06192599, -9.62650475],\n", + " [-18.88443232, -18.88443232, -10.6629019 ],\n", + " [-19.68608295, -19.68608295, -11.67301988],\n", + " [-20.46740671, -20.46740671, -12.65752504],\n", + " [-21.22891902, -21.22891902, -13.61706682],\n", + " [-21.97112221, -21.97112221, -14.5522782 ],\n", + " [-22.6945059 , -22.6945059 , -15.46377611],\n", + " [-23.39954727, -23.39954727, -16.35216182],\n", + " [-24.08671143, -24.08671143, -17.21802139],\n", + " [-24.75645166, -24.75645166, -18.06192599],\n", + " [-25.40920978, -25.40920978, -18.88443232],\n", + " [-26.04541639, -26.04541639, -19.68608295],\n", + " [-26.66549117, -26.66549117, -20.46740671],\n", + " [-27.26984317, -27.26984317, -21.22891902],\n", + " [-27.85887106, -27.85887106, -21.97112221],\n", + " [-28.43296339, -28.43296339, -22.6945059 ],\n", + " [-28.99249888, -28.99249888, -23.39954727],\n", + " [-29.53784664, -29.53784664, -24.08671143],\n", + " [-30.06936642, -30.06936642, -24.75645166],\n", + " [-30.58740883, -30.58740883, -25.40920978],\n", + " [-31.09231562, -31.09231562, -26.04541639],\n", + " [-31.58441986, -31.58441986, -26.66549117],\n", + " [-32.06404617, -32.06404617, -27.26984317],\n", + " [-32.53151095, -32.53151095, -27.85887106],\n", + " [-32.98712256, -32.98712256, -28.43296339],\n", + " [-33.43118156, -33.43118156, -28.99249888],\n", + " [-33.86398088, -33.86398088, -29.53784664],\n", + " [-34.28580602, -34.28580602, -30.06936642],\n", + " [-34.69693526, -34.69693526, -30.58740883],\n", + " [-35.09763978, -35.09763978, -31.09231562],\n", + " [-35.48818394, -35.48818394, -31.58441986],\n", + " [-35.86882535, -35.86882535, -32.06404617],\n", + " [-36.23981511, -36.23981511, -32.53151095],\n", + " [-36.60139796, 1.00252784, -32.98712256],\n", + " [-36.95381242, -0.30338194, -33.43118156],\n", + " [-37.29729095, -1.57617872, -33.86398088],\n", + " [-37.63206016, -2.81670212, -34.28580602],\n", + " [-37.95834086, -4.02577047, -34.69693526],\n", + " [-38.27634831, -5.20418135, -35.09763978],\n", + " [-38.58629227, -6.35271213, -35.48818394],\n", + " [-38.8883772 , -7.47212045, -35.86882535],\n", + " [-39.18280239, -8.56314476, -36.23981511],\n", + " [-39.46976206, -9.62650475, -36.60139796],\n", + " [-39.7494455 , -10.6629019 , -36.95381242],\n", + " [-40.02203721, -11.67301988, -37.29729095],\n", + " [-40.28771701, -12.65752504, -37.63206016],\n", + " [-40.54666016, -13.61706682, -37.95834086],\n", + " [-40.79903748, -14.5522782 , -38.27634831],\n", + " [-41.04501545, -15.46377611, 1.00252784],\n", + " [-41.28475634, -16.35216182, -0.30338194],\n", + " [-41.51841829, -17.21802139, -1.57617872],\n", + " [-41.74615544, -18.06192599, -2.81670212],\n", + " [-41.96811803, -18.88443232, -4.02577047],\n", + " [-42.18445248, -19.68608295, -5.20418135],\n", + " [-42.3953015 , -20.46740671, -6.35271213],\n", + " [-42.60080416, -21.22891902, -7.47212045],\n", + " [-42.80109605, -21.97112221, -8.56314476],\n", + " [-42.99630928, -22.6945059 , -9.62650475],\n", + " [-43.18657263, -23.39954727, -10.6629019 ],\n", + " [ 1.00252784, -24.08671143, -11.67301988],\n", + " [ -0.30338194, -24.75645166, -12.65752504],\n", + " [ -1.57617872, -25.40920978, -13.61706682],\n", + " [ -2.81670212, -26.04541639, -14.5522782 ],\n", + " [ -4.02577047, -26.66549117, -15.46377611],\n", + " [ 1.00252784, -27.26984317, -16.35216182],\n", + " [ -0.30338194, 1.00252784, -17.21802139],\n", + " [ -1.57617872, -0.30338194, -18.06192599],\n", + " [ -2.81670212, -1.57617872, -18.88443232],\n", + " [ -4.02577047, -2.81670212, -19.68608295],\n", + " [ -5.20418135, -4.02577047, -20.46740671],\n", + " [ -6.35271213, -5.20418135, -21.22891902],\n", + " [ -7.47212045, -6.35271213, -21.97112221],\n", + " [ -8.56314476, -7.47212045, -22.6945059 ],\n", + " [ -9.62650475, -8.56314476, -23.39954727],\n", + " [-10.6629019 , -9.62650475, -24.08671143],\n", + " [-11.67301988, -10.6629019 , -24.75645166],\n", + " [ 1.00252784, -11.67301988, -25.40920978],\n", + " [ -0.30338194, -12.65752504, -26.04541639],\n", + " [ -1.57617872, -13.61706682, -26.66549117],\n", + " [ -2.81670212, -14.5522782 , -27.26984317],\n", + " [ -4.02577047, -15.46377611, -27.85887106],\n", + " [ -5.20418135, -16.35216182, -28.43296339],\n", + " [ -6.35271213, -17.21802139, -28.99249888],\n", + " [ -7.47212045, -18.06192599, -29.53784664],\n", + " [ -8.56314476, -18.88443232, -30.06936642],\n", + " [ -9.62650475, -19.68608295, -30.58740883],\n", + " [-10.6629019 , -20.46740671, -31.09231562],\n", + " [-11.67301988, -21.22891902, -31.58441986],\n", + " [-12.65752504, -21.97112221, -32.06404617],\n", + " [-13.61706682, -22.6945059 , -32.53151095],\n", + " [-14.5522782 , 1.00252784, -32.98712256],\n", + " [-15.46377611, -0.30338194, -33.43118156],\n", + " [-16.35216182, -1.57617872, -33.86398088],\n", + " [-17.21802139, -2.81670212, -34.28580602],\n", + " [-18.06192599, -4.02577047, -34.69693526],\n", + " [-18.88443232, -5.20418135, -35.09763978],\n", + " [-19.68608295, -6.35271213, -35.48818394],\n", + " [-20.46740671, -7.47212045, -35.86882535],\n", + " [-21.22891902, -8.56314476, -36.23981511],\n", + " [-21.97112221, -9.62650475, -36.60139796],\n", + " [-22.6945059 , -10.6629019 , 1.00252784],\n", + " [-23.39954727, -11.67301988, -0.30338194]]),\n", + " 'c_nrm': array([[2.28060139, 2.28060139, 2.28060139],\n", + " [2.22277389, 2.22277389, 2.22277389],\n", + " [2.16641268, 2.16641268, 2.16641268],\n", + " [2.11148057, 2.11148057, 2.11148057],\n", + " [2.05794134, 2.05794134, 2.05794134],\n", + " [2.00575967, 2.00575967, 2.00575967],\n", + " [1.95490113, 1.95490113, 1.95490113],\n", + " [1.90533217, 1.90533217, 1.90533217],\n", + " [1.8570201 , 1.8570201 , 1.8570201 ],\n", + " [1.80993304, 1.80993304, 2.28060139],\n", + " [1.76403993, 1.76403993, 2.22277389],\n", + " [1.7193105 , 1.7193105 , 2.16641268],\n", + " [1.67571524, 1.67571524, 2.11148057],\n", + " [1.63322539, 1.63322539, 2.05794134],\n", + " [1.59181293, 1.59181293, 2.00575967],\n", + " [1.55145054, 1.55145054, 1.95490113],\n", + " [1.51211158, 1.51211158, 1.90533217],\n", + " [1.47377011, 1.47377011, 1.8570201 ],\n", + " [1.43640084, 1.43640084, 1.80993304],\n", + " [1.39997912, 1.39997912, 1.76403993],\n", + " [1.36448091, 1.36448091, 1.7193105 ],\n", + " [1.32988281, 1.32988281, 1.67571524],\n", + " [1.29616199, 1.29616199, 1.63322539],\n", + " [1.26329619, 1.26329619, 1.59181293],\n", + " [1.23126376, 1.23126376, 1.55145054],\n", + " [1.20004355, 1.20004355, 1.51211158],\n", + " [1.16961496, 1.16961496, 1.47377011],\n", + " [1.13995793, 1.13995793, 1.43640084],\n", + " [1.11105289, 1.11105289, 1.39997912],\n", + " [1.08288078, 1.08288078, 1.36448091],\n", + " [1.055423 , 1.055423 , 1.32988281],\n", + " [1.02866146, 1.02866146, 1.29616199],\n", + " [1.00257848, 1.00257848, 1.26329619],\n", + " [0.97715687, 0.97715687, 1.23126376],\n", + " [0.95237986, 0.95237986, 1.20004355],\n", + " [0.92823111, 0.92823111, 1.16961496],\n", + " [0.90469467, 0.90469467, 1.13995793],\n", + " [0.88175503, 0.88175503, 1.11105289],\n", + " [0.85939706, 0.85939706, 1.08288078],\n", + " [0.837606 , 0.837606 , 1.055423 ],\n", + " [0.81636748, 0.81636748, 1.02866146],\n", + " [0.79566748, 0.79566748, 1.00257848],\n", + " [0.77549237, 0.77549237, 0.97715687],\n", + " [0.75582882, 0.75582882, 0.95237986],\n", + " [0.73666386, 0.73666386, 0.92823111],\n", + " [0.71798486, 0.71798486, 0.90469467],\n", + " [0.69977948, 0.69977948, 0.88175503],\n", + " [0.68203573, 0.68203573, 0.85939706],\n", + " [0.66474189, 0.66474189, 0.837606 ],\n", + " [0.64788656, 0.64788656, 0.81636748],\n", + " [0.63145862, 0.63145862, 0.79566748],\n", + " [0.61544722, 2.28060139, 0.77549237],\n", + " [0.59984182, 2.22277389, 0.75582882],\n", + " [0.58463211, 2.16641268, 0.73666386],\n", + " [0.56980807, 2.11148057, 0.71798486],\n", + " [0.5553599 , 2.05794134, 0.69977948],\n", + " [0.54127809, 2.00575967, 0.68203573],\n", + " [0.52755334, 1.95490113, 0.66474189],\n", + " [0.5141766 , 1.90533217, 0.64788656],\n", + " [0.50113904, 1.8570201 , 0.63145862],\n", + " [0.48843207, 1.80993304, 0.61544722],\n", + " [0.4760473 , 1.76403993, 0.59984182],\n", + " [0.46397656, 1.7193105 , 0.58463211],\n", + " [0.45221189, 1.67571524, 0.56980807],\n", + " [0.44074552, 1.63322539, 0.5553599 ],\n", + " [0.4295699 , 1.59181293, 0.54127809],\n", + " [0.41867766, 1.55145054, 2.28060139],\n", + " [0.4080616 , 1.51211158, 2.22277389],\n", + " [0.39771472, 1.47377011, 2.16641268],\n", + " [0.3876302 , 1.43640084, 2.11148057],\n", + " [0.37780139, 1.39997912, 2.05794134],\n", + " [0.3682218 , 1.36448091, 2.00575967],\n", + " [0.35888511, 1.32988281, 1.95490113],\n", + " [0.34978517, 1.29616199, 1.90533217],\n", + " [0.34091596, 1.26329619, 1.8570201 ],\n", + " [0.33227165, 1.23126376, 1.80993304],\n", + " [0.32384652, 1.20004355, 1.76403993],\n", + " [2.28060139, 1.16961496, 1.7193105 ],\n", + " [2.22277389, 1.13995793, 1.67571524],\n", + " [2.16641268, 1.11105289, 1.63322539],\n", + " [2.11148057, 1.08288078, 1.59181293],\n", + " [2.05794134, 1.055423 , 1.55145054],\n", + " [2.28060139, 1.02866146, 1.51211158],\n", + " [2.22277389, 2.28060139, 1.47377011],\n", + " [2.16641268, 2.22277389, 1.43640084],\n", + " [2.11148057, 2.16641268, 1.39997912],\n", + " [2.05794134, 2.11148057, 1.36448091],\n", + " [2.00575967, 2.05794134, 1.32988281],\n", + " [1.95490113, 2.00575967, 1.29616199],\n", + " [1.90533217, 1.95490113, 1.26329619],\n", + " [1.8570201 , 1.90533217, 1.23126376],\n", + " [1.80993304, 1.8570201 , 1.20004355],\n", + " [1.76403993, 1.80993304, 1.16961496],\n", + " [1.7193105 , 1.76403993, 1.13995793],\n", + " [2.28060139, 1.7193105 , 1.11105289],\n", + " [2.22277389, 1.67571524, 1.08288078],\n", + " [2.16641268, 1.63322539, 1.055423 ],\n", + " [2.11148057, 1.59181293, 1.02866146],\n", + " [2.05794134, 1.55145054, 1.00257848],\n", + " [2.00575967, 1.51211158, 0.97715687],\n", + " [1.95490113, 1.47377011, 0.95237986],\n", + " [1.90533217, 1.43640084, 0.92823111],\n", + " [1.8570201 , 1.39997912, 0.90469467],\n", + " [1.80993304, 1.36448091, 0.88175503],\n", + " [1.76403993, 1.32988281, 0.85939706],\n", + " [1.7193105 , 1.29616199, 0.837606 ],\n", + " [1.67571524, 1.26329619, 0.81636748],\n", + " [1.63322539, 1.23126376, 0.79566748],\n", + " [1.59181293, 2.28060139, 0.77549237],\n", + " [1.55145054, 2.22277389, 0.75582882],\n", + " [1.51211158, 2.16641268, 0.73666386],\n", + " [1.47377011, 2.11148057, 0.71798486],\n", + " [1.43640084, 2.05794134, 0.69977948],\n", + " [1.39997912, 2.00575967, 0.68203573],\n", + " [1.36448091, 1.95490113, 0.66474189],\n", + " [1.32988281, 1.90533217, 0.64788656],\n", + " [1.29616199, 1.8570201 , 0.63145862],\n", + " [1.26329619, 1.80993304, 0.61544722],\n", + " [1.23126376, 1.76403993, 2.28060139],\n", + " [1.20004355, 1.7193105 , 2.22277389]]),\n", + " 'a_nrm': array([[ -1.27807355, -1.27807355, -1.27807355],\n", + " [ -2.52615583, -2.52615583, -2.52615583],\n", + " [ -3.74259139, -3.74259139, -3.74259139],\n", + " [ -4.92818269, -4.92818269, -4.92818269],\n", + " [ -6.08371181, -6.08371181, -6.08371181],\n", + " [ -7.20994102, -7.20994102, -7.20994102],\n", + " [ -8.30761326, -8.30761326, -8.30761326],\n", + " [ -9.37745262, -9.37745262, -9.37745262],\n", + " [-10.42016485, -10.42016485, -10.42016485],\n", + " [-11.43643779, -11.43643779, -1.27807355],\n", + " [-12.42694183, -12.42694183, -2.52615583],\n", + " [-13.39233038, -13.39233038, -3.74259139],\n", + " [-14.33324028, -14.33324028, -4.92818269],\n", + " [-15.25029222, -15.25029222, -6.08371181],\n", + " [-16.14409113, -16.14409113, -7.20994102],\n", + " [-17.01522664, -17.01522664, -8.30761326],\n", + " [-17.8642734 , -17.8642734 , -9.37745262],\n", + " [-18.69179151, -18.69179151, -10.42016485],\n", + " [-19.49832683, -19.49832683, -11.43643779],\n", + " [-20.28441144, -20.28441144, -12.42694183],\n", + " [-21.05056386, -21.05056386, -13.39233038],\n", + " [-21.79728952, -21.79728952, -14.33324028],\n", + " [-22.525081 , -22.525081 , -15.25029222],\n", + " [-23.2344184 , -23.2344184 , -16.14409113],\n", + " [-23.92576966, -23.92576966, -17.01522664],\n", + " [-24.59959082, -24.59959082, -17.8642734 ],\n", + " [-25.25632639, -25.25632639, -18.69179151],\n", + " [-25.89640959, -25.89640959, -19.49832683],\n", + " [-26.52026268, -26.52026268, -20.28441144],\n", + " [-27.12829717, -27.12829717, -21.05056386],\n", + " [-27.72091418, -27.72091418, -21.79728952],\n", + " [-28.29850463, -28.29850463, -22.525081 ],\n", + " [-28.86144954, -28.86144954, -23.2344184 ],\n", + " [-29.41012026, -29.41012026, -23.92576966],\n", + " [-29.94487875, -29.94487875, -24.59959082],\n", + " [-30.46607775, -30.46607775, -25.25632639],\n", + " [-30.97406109, -30.97406109, -25.89640959],\n", + " [-31.46916387, -31.46916387, -26.52026268],\n", + " [-31.95171268, -31.95171268, -27.12829717],\n", + " [-32.42202586, -32.42202586, -27.72091418],\n", + " [-32.88041365, -32.88041365, -28.29850463],\n", + " [-33.32717843, -33.32717843, -28.86144954],\n", + " [-33.76261493, -33.76261493, -29.41012026],\n", + " [-34.18701038, -34.18701038, -29.94487875],\n", + " [-34.60064474, -34.60064474, -30.46607775],\n", + " [-35.00379088, -35.00379088, -30.97406109],\n", + " [-35.39671474, -35.39671474, -31.46916387],\n", + " [-35.77967551, -35.77967551, -31.95171268],\n", + " [-36.15292583, -36.15292583, -32.42202586],\n", + " [-36.51671191, -36.51671191, -32.88041365],\n", + " [-36.87127373, -36.87127373, -33.32717843],\n", + " [-37.21684518, -1.27807355, -33.76261493],\n", + " [-37.55365424, -2.52615583, -34.18701038],\n", + " [-37.88192307, -3.74259139, -34.60064474],\n", + " [-38.20186823, -4.92818269, -35.00379088],\n", + " [-38.51370077, -6.08371181, -35.39671474],\n", + " [-38.8176264 , -7.20994102, -35.77967551],\n", + " [-39.11384561, -8.30761326, -36.15292583],\n", + " [-39.4025538 , -9.37745262, -36.51671191],\n", + " [-39.68394144, -10.42016485, -36.87127373],\n", + " [-39.95819413, -11.43643779, -37.21684518],\n", + " [-40.2254928 , -12.42694183, -37.55365424],\n", + " [-40.48601376, -13.39233038, -37.88192307],\n", + " [-40.73992889, -14.33324028, -38.20186823],\n", + " [-40.98740568, -15.25029222, -38.51370077],\n", + " [-41.22860738, -16.14409113, -38.8176264 ],\n", + " [-41.46369311, -17.01522664, -1.27807355],\n", + " [-41.69281793, -17.8642734 , -2.52615583],\n", + " [-41.91613301, -18.69179151, -3.74259139],\n", + " [-42.13378565, -19.49832683, -4.92818269],\n", + " [-42.34591942, -20.28441144, -6.08371181],\n", + " [-42.55267428, -21.05056386, -7.20994102],\n", + " [-42.75418661, -21.79728952, -8.30761326],\n", + " [-42.95058933, -22.525081 , -9.37745262],\n", + " [-43.14201201, -23.2344184 , -10.42016485],\n", + " [-43.32858093, -23.92576966, -11.43643779],\n", + " [-43.51041916, -24.59959082, -12.42694183],\n", + " [ -1.27807355, -25.25632639, -13.39233038],\n", + " [ -2.52615583, -25.89640959, -14.33324028],\n", + " [ -3.74259139, -26.52026268, -15.25029222],\n", + " [ -4.92818269, -27.12829717, -16.14409113],\n", + " [ -6.08371181, -27.72091418, -17.01522664],\n", + " [ -1.27807355, -28.29850463, -17.8642734 ],\n", + " [ -2.52615583, -1.27807355, -18.69179151],\n", + " [ -3.74259139, -2.52615583, -19.49832683],\n", + " [ -4.92818269, -3.74259139, -20.28441144],\n", + " [ -6.08371181, -4.92818269, -21.05056386],\n", + " [ -7.20994102, -6.08371181, -21.79728952],\n", + " [ -8.30761326, -7.20994102, -22.525081 ],\n", + " [ -9.37745262, -8.30761326, -23.2344184 ],\n", + " [-10.42016485, -9.37745262, -23.92576966],\n", + " [-11.43643779, -10.42016485, -24.59959082],\n", + " [-12.42694183, -11.43643779, -25.25632639],\n", + " [-13.39233038, -12.42694183, -25.89640959],\n", + " [ -1.27807355, -13.39233038, -26.52026268],\n", + " [ -2.52615583, -14.33324028, -27.12829717],\n", + " [ -3.74259139, -15.25029222, -27.72091418],\n", + " [ -4.92818269, -16.14409113, -28.29850463],\n", + " [ -6.08371181, -17.01522664, -28.86144954],\n", + " [ -7.20994102, -17.8642734 , -29.41012026],\n", + " [ -8.30761326, -18.69179151, -29.94487875],\n", + " [ -9.37745262, -19.49832683, -30.46607775],\n", + " [-10.42016485, -20.28441144, -30.97406109],\n", + " [-11.43643779, -21.05056386, -31.46916387],\n", + " [-12.42694183, -21.79728952, -31.95171268],\n", + " [-13.39233038, -22.525081 , -32.42202586],\n", + " [-14.33324028, -23.2344184 , -32.88041365],\n", + " [-15.25029222, -23.92576966, -33.32717843],\n", + " [-16.14409113, -1.27807355, -33.76261493],\n", + " [-17.01522664, -2.52615583, -34.18701038],\n", + " [-17.8642734 , -3.74259139, -34.60064474],\n", + " [-18.69179151, -4.92818269, -35.00379088],\n", + " [-19.49832683, -6.08371181, -35.39671474],\n", + " [-20.28441144, -7.20994102, -35.77967551],\n", + " [-21.05056386, -8.30761326, -36.15292583],\n", + " [-21.79728952, -9.37745262, -36.51671191],\n", + " [-22.525081 , -10.42016485, -36.87127373],\n", + " [-23.2344184 , -11.43643779, -37.21684518],\n", + " [-23.92576966, -12.42694183, -1.27807355],\n", + " [-24.59959082, -13.39233038, -2.52615583]])}" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# pf_simulator.track_vars = [\"mNrm\"]\n", + "pfn_simulator.initialize_sim()\n", + "pfn_simulator.simulate(sim_periods=120)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "9e2c7ad0", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(np.mean(pfn_simulator.history[\"m_nrm\"], axis=1))\n", + "plt.xlabel(\"Time\")\n", + "plt.ylabel(\"Mean normalized market resources\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "2b471cf1", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_14820/2889722531.py:1: RuntimeWarning: divide by zero encountered in log\n", + " plt.plot(np.log(np.mean(pfn_simulator.history[\"m_nrm\"], axis=1) - np.min(np.mean(pfn_simulator.history[\"m_nrm\"], axis=1))))\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(\n", + " np.log(\n", + " np.mean(pfn_simulator.history[\"m_nrm\"], axis=1)\n", + " - np.min(np.mean(pfn_simulator.history[\"m_nrm\"], axis=1))\n", + " )\n", + ")\n", + "plt.xlabel(\"Time\")\n", + "plt.ylabel(\"Mean normalized market resources\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "464f19e7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(pfn_simulator.history[\"live\"].sum(axis=1))" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "1cc1dc83", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYcAAAEICAYAAAC0+DhzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAABT70lEQVR4nO3dd3xT9frA8c+TpoOyoZVNWzZ0UsoSQUQEFAVBXDhQROVeXFeve+FV78913ePqdeDeCLgQBw4crLJKKRtkUzYtTdokz++PpLXQlbRJ0/F9v17nRXNyTr5PSJvnfM/5nucrqophGIZhFGcJdgCGYRhGzWOSg2EYhlGCSQ6GYRhGCSY5GIZhGCWY5GAYhmGUYJKDYRiGUUKNTQ4iMkpE1orIBhG5I9jxGIZh1CdSE+9zEJEQYB1wBrAdWAxcrKqZpW0fFRWlsbGx1RegYRhGHbB06dJ9qhpd2nPW6g7GS/2ADaq6CUBEPgDGAqUmh9jYWJYsWVKN4RmGYdR+IrK1rOdq6mmldsC2Yo+3e9YZhmEY1aCmJocKicg1IrJERJZkZ2cHOxzDMIw6paYmhx1Ah2KP23vWFVHVV1Q1TVXToqNLPWVmGIZhVFJNveawGOgqInG4k8JFwMTghmR4o6CggO3bt2Oz2YIdimEYHhEREbRv357Q0FCv96mRyUFVHSJyHfANEAK8rqqrgxyW4YXt27fTuHFjYmNjEZFgh2MY9Z6qsn//frZv305cXJzX+9XI5ACgql8BXwU7DsM3NpvNJAbDqEFEhJYtW+Lrtdmaes3BqMVMYjCMmqUyf5P1Ojns3raBP/77d/bt3lbxxoZhGPVIvU4O9pzDDNj9LhvmvxXsUAw/2rNnDxMnTqRTp0706dOHgQMH8tlnnwW83f/+97+89VZwf5cOHTrEiy++WK1tbtmyhYSEhGpt0wi8ep0cYnr2YWNIJ1psnBXsUAw/UVXOPfdchgwZwqZNm1i6dCkffPAB27dvD2i7DoeDqVOncvnllwe0nYpUd3JwOBzV1pZRvep1cgDIjhtLN8c6tm1YFexQDD/44YcfCAsLY+rUqUXrYmJiuP766wFwOp3ceuut9O3bl6SkJF5++WUAfvzxR4YOHcqECRPo0aMHl1xyCYV1x5YuXcqpp55Knz59GDlyJLt27QJg6NCh3HTTTaSlpfHMM88wffp0nnjiCQA2bNjA8OHDSU5OJjU1lY0bNx4X55YtW+jRowdXXHEF3bp145JLLuG7775j0KBBdO3alUWLFgFw4MABzj33XJKSkhgwYAArV64EYPr06UyePJmhQ4fSqVMnnn32WQDuuOMONm7cSEpKCrfeeisAjz/+eNH7vf/++0v9f5s7dy6pqakkJydz+umnA7Bo0SIGDhxI7969Ofnkk1m7di0AM2bMYMyYMQwbNqxo20I2m40rr7ySxMREevfuzfz5833+DI2aocaOVqounU6bhGv902z/6U06dHki2OHUKQ98vprMnUf8+pq92jbh/nPiy3x+9erVpKamlvn8a6+9RtOmTVm8eDF2u51BgwYxYsQIAJYtW8bq1atp27YtgwYN4tdff6V///5cf/31zJ49m+joaD788EPuvvtuXn/9dQDy8/OL6npNnz69qJ1LLrmEO+64g3HjxmGz2XC5XCVi2bBhAx9//DGvv/46ffv25b333mPBggXMmTOHf//738yaNYv777+f3r17M2vWLH744Qcuv/xyli9fDkBWVhbz58/n6NGjdO/enb/97W888sgjZGRkFG0zb9481q9fz6JFi1BVxowZw88//8yQIUOK4sjOzubqq6/m559/Ji4ujgMHDgDQo0cPfvnlF6xWK9999x133XUXn376KQDp6emsXLmSFi1asGXLlqLXeuGFFxARVq1aRVZWFiNGjGDdunVERESU+ZkYNVO9Tw4ntYsjIyKZDtu/QF2PIZZ635mqU6ZNm8aCBQsICwtj8eLFzJs3j5UrV/LJJ58AcPjwYdavX09YWBj9+vWjffv2AKSkpLBlyxaaNWtGRkYGZ5xxBuDuebRp06bo9S+88MISbR49epQdO3Ywbtw4gDK/GOPi4khMTAQgPj6e008/HREhMTGx6At3wYIFRV/Iw4YNY//+/Rw54k64o0ePJjw8nPDwcE466ST27NlToo158+Yxb948evfuDUBOTg7r168/Ljn88ccfDBkypGgMfIsWLYr+byZNmsT69esREQoKCor2OeOMM4q2K27BggVFvbQePXoQExPDunXrSEpKKvX/wKi56n1yAMjrPp6ElfexNv1HuqcNC3Y4dUZ5R/iBEh8fX/RlCu4j2X379pGWlga4r0k899xzjBw58rj9fvzxR8LDw4seh4SE4HA4UFXi4+P5/fffS22vYcOGlY61eHsWi6XoscVi8epcfmnxnkhVufPOO7n22mt9ju/ee+/ltNNO47PPPmPLli0MHTq06LmqvG+jdjCHyUD3YZdi11AOLXw32KEYVTRs2DBsNhsvvfRS0bpjx44V/Txy5EheeumloqPgdevWkZubW+brde/enezs7KLkUFBQwOrV5d+s37hxY9q3b8+sWbMAsNvtx8Xgi8GDB/Puu+7fyx9//JGoqCiaNGlSbttHjx4tejxy5Ehef/11cnJyANixYwd79+49bp8BAwbw888/s3nzZoCi00qHDx+mXTt3MeQZM2b4HO+6dev4888/6d69u1f7GjWLSQ5Ak2YtWd14IF2z51GQbw92OEYViAizZs3ip59+Ii4ujn79+jFp0iQeffRRAKZMmUKvXr1ITU0lISGBa6+9ttyj9LCwMD755BNuv/12kpOTSUlJ4bfffqswjrfffptnn32WpKQkTj75ZHbv3l2p9zN9+nSWLl1KUlISd9xxB2+++Wa527ds2ZJBgwaRkJDArbfeyogRI5g4cSIDBw4kMTGRCRMmHJc8AKKjo3nllVcYP348ycnJRafKbrvtNu6880569+7t9aikv//977hcLhITE7nwwguZMWPGcT0co/aokTPB+SotLU2rOtnP8m/fI+XXv7F88MuknH6RnyKrf9asWUPPnj2DHYZhGCco7W9TRJaqalpp25ueg0evIeM5SBOcy94PdiiGYRhBZ5KDR1h4BOuiR5Bw9FcOH9wX7HAMwzCCyiSHYlqcPIlwKWDt96achmEY9ZtPyUFEmotInR2w3CX5FLZaOtB47SfBDsUwDCOoKkwOIvKjiDQRkRZAOvA/EXky8KFVP7FY2Bkzlp4Fq9mxaU2wwzEMwwgab3oOTVX1CDAeeEtV+wPDAxtW8MQNuxKXCn/Ofy3YoRiGYQSNN8nBKiJtgAuALwIcT9C17tCF1REpxGyfg8vpDHY4RiU0atTouMczZszguuuuO25dSkoKF110/JDlK664gri4OFJSUkhOTub7778vem7o0KFFNZQ2b95M165d+eabb0q0/eabb9K1a1e6du1a5j0JH3/8MfHx8VgsFooPwV60aBEpKSlF7ZdVZjw2NpbExESSkpIYMWKEz/dQPPvss/Ts2ZNLLrmEGTNmEB0dXdRuIKvKTpkyhczMzHK3ueKKK4pKmxS3ZcsW3nvvvePWLVq0iCFDhtC9e3d69+7NlClTKn2zYbA8/PDDRf/3ISEhRT8XFlIMKlUtdwHOB1YCL3kedwI+rWi/6lz69Omj/rR49kuq9zfRjF+/9Ovr1geZmZnBDkEbNmx43OM33nhDp02bVvQ4MzNTExIStG3btpqTk1O0ftKkSfrxxx+rquoPP/ygXbp0KXru1FNP1cWLF+u2bdu0W7duOnv27BLt7t+/X+Pi4nT//v164MABjYuL0wMHDpTYLjMzU7Oysopes1Bubq4WFBSoqurOnTs1Ojq66HFxMTExmp2draqqd955p15//fVe/b8Uvlb37t1127Ztpf7feMvlcqnT6fR5v4oU/wyKmz9/vo4ePbro8e7du7Vjx47622+/Fa37+OOPdffu3X6PKZCKf74n/t76W2l/m8ASLeN7tcKeg6p+rKpJqvo3z+NNqnpe4NJV8MWffgk52oBji8yopbro/fff57LLLmPEiBHMnj271G0GDhzIjh07jlu3a9cuRowYwcMPP8yYMWNK7PPNN98UFaRr3rw5Z5xxBnPnzi2xXc+ePUstKREZGYnV6i53ZrPZvJracciQIWzYsKHcUuSDBw9mzJgx9OrVi6lTp7Jp0ybOPPNMnnrqqTJf98knnyQhIYGEhASefvppwH303r17dy6//HISEhLYtm1bqeXAc3NzGT16NMnJySQkJPDhhx8Cx/e+XnvtNbp160a/fv24+uqrj+vZ/fzzz5x88sl06tSpqBdxxx138Msvv5CSksJTTz3FCy+8wKRJkxg4cGDRfhMmTKBVq1Y+lzkvK97Y2Fj27XMPa1+yZElRbanp06czadIkBg8eTExMDDNnzuS2224jMTGRUaNGFZVm8bbU+4nuu+++ov9zgLvvvptnnnmGH3/8kSFDhjB69Gi6d+/O1KlTi6r9zps3j4EDB5Kamsr5559fVC6lKiosvCci3YCXgFaqmuAZrTRGVR+qcuultzcduBoonA37LlX9KhBtlaVBw8YsanE6CQe+JffoIRo2bladzdcdX98Bu/08T0brRDjzkXI3ycvLIyUlpejxgQMHjvsy//DDD/n222/JysriueeeY+LEiSVeY+7cuZx77rnHrZs0aRIPPfQQEyZMKLXdHTt20KFDh6LH7du3L5FgKrJw4UImT57M1q1befvtt4uSRVm++OILEhMTyy1Fnp6eTkZGRlHV1blz5zJ//nyioqKYMWMGH374IQsWLADgxhtvJCkpiTfeeIOFCxeiqvTv359TTz2V5s2bs379et58800GDBhQZjnw7Oxs2rZty5dffgm4azQVt3PnTh588EHS09Np3Lgxw4YNIzk5uej5Xbt2sWDBArKyshgzZgwTJkzgkUce4YknnuCLL9xntsePH8+kSZNK/T/xtcz53Llzy423NBs3bmT+/PlkZmYycOBAPv30Ux577DHGjRvHl19+yejRo70u9X6iyZMnM378eG666SZcLhcffPABixYtYtWqVSxatIjMzExiYmIYNWoUM2fOZOjQoTz00EN89913NGzYkEcffZQnn3yS++67r8L3UR5vqrL+D7gVeBlAVVeKyHtAQJKDx1OqGtTJFZoMvILIr75g0Xdv02/c9cEMxfBRgwYNir4MwH3NofAPccmSJURFRdGxY0fatWvH5MmTOXDgQFH56VtvvZW77rqL7du3l6jEOnz4cN555x2uuOIKIiMjAxJ7//79Wb16NWvWrGHSpEmceeaZpZb8Pu200wgJCSEpKYmHHnqIKVOmlFuKvDAxlObCCy/k+eefL3r8zDPPMG7cuKLKq+PHj+eXX35hzJgxxMTEMGDAAKDscuCDBw/mlltu4fbbb+fss89m8ODBx7W3aNEiTj311KL/8/PPP59169YVPX/uuedisVjo1atXqWXIK+JrmfPExMRy4y3NmWeeSWhoKImJiTidTkaNGgVQVG597dq1Ppd6LxQbG0vLli1ZtmwZe/bsoXfv3rRs2RKAfv360alTJwAuvvhiFixYQEREBJmZmQwaNAhwJ57iParK8iY5RKrqohO6uHV+bsDuaaez7eu2NFrzIZjkUDkVHOEHw/vvv09WVhaxsbEAHDlyhE8//ZSrr74acM+aNmHCBJ577jkmT57M0qVLi/a97bbbePvttzn//POZPXt2iaP6du3a8eOPPxY93r59+3Flrn3Rs2dPGjVqREZGRlG58eIKj/wLaTmlyP1ZXrv4a2k55cDT09P56quvuOeeezj99NN9OootXqhPy6j9Fh8fz9KlSxk7dqwP0Zde5rxbt26lxmu1WotO29hstlJfx2KxEBoaWnQKsLDculax1PuUKVOYMWMGu3fvZvLkyUXrTzzVKCKoKmeccQbvv+/f0j/ejFbaJyKdAfUEMwHY5dcoSrpORFaKyOsi0jzA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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(np.mean(pfn_simulator.history[\"a_nrm\"], axis=1), label=\"Generic monte carlo\")\n", + "plt.plot(\n", + " np.mean(PFexample.history[\"aNrm\"], axis=1),\n", + " label=\"HARK 0.13 PerfForesightConsumerType\",\n", + ")\n", + "plt.xlabel(\"Time\")\n", + "plt.ylabel(\"Mean normalized market resources\")\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "dcff94ad", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0.])" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.mean(pfn_simulator.history[\"a_nrm\"], axis=1) - np.mean(\n", + " PFexample.history[\"aNrm\"], axis=1\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "70de1058", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([ 8, 50, 65, 76, 81, 82, 93, 107, 117]),\n", + " array([2, 1, 2, 0, 0, 1, 0, 1, 2]))" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.where(pfn_simulator.history[\"live\"] < 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "0e37528d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([ 8, 50, 65, 76, 81, 82, 93, 107, 117]),\n", + " array([2, 1, 2, 0, 0, 1, 0, 1, 2]))" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.where(1 - PFexample.history[\"who_dies\"] < 1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7e5cf6a1", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "hark-env", + "language": "python", + "name": "hark-env" + }, + "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.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}