From 93cd50157b7d65775ecb1d53c0cb12aa5a590bdb Mon Sep 17 00:00:00 2001 From: John Stachurski Date: Tue, 29 Jul 2025 17:24:36 +0900 Subject: [PATCH 1/3] misc --- lectures/mccall_model_with_separation.py | 564 +++++++++++++++++++++++ 1 file changed, 564 insertions(+) create mode 100644 lectures/mccall_model_with_separation.py diff --git a/lectures/mccall_model_with_separation.py b/lectures/mccall_model_with_separation.py new file mode 100644 index 000000000..fe1db49a5 --- /dev/null +++ b/lectures/mccall_model_with_separation.py @@ -0,0 +1,564 @@ +# --- +# jupyter: +# jupytext: +# default_lexer: ipython +# text_representation: +# extension: .py +# format_name: percent +# format_version: '1.3' +# jupytext_version: 1.17.2 +# kernelspec: +# display_name: Python 3 +# language: python +# name: python3 +# --- + +# %% [markdown] +# (mccall_with_sep)= +# ```{raw} jupyter +#
+# +# QuantEcon +# +#
+# ``` +# +# # Job Search II: Search and Separation +# +# ```{index} single: An Introduction to Job Search +# ``` +# +# ```{contents} Contents +# :depth: 2 +# ``` +# +# In addition to what's in Anaconda, this lecture will need the following libraries: + +# %% tags=["hide-output"] +# !pip install quantecon + +# %% [markdown] +# ## Overview +# +# Previously {doc}`we looked ` at the McCall job search model {cite}`McCall1970` as a way of understanding unemployment and worker decisions. +# +# One unrealistic feature of the model is that every job is permanent. +# +# In this lecture, we extend the McCall model by introducing job separation. +# +# Once separation enters the picture, the agent comes to view +# +# * the loss of a job as a capital loss, and +# * a spell of unemployment as an *investment* in searching for an acceptable job +# +# The other minor addition is that a utility function will be included to make +# worker preferences slightly more sophisticated. +# +# We'll need the following imports + +# %% +import matplotlib.pyplot as plt +import numpy as np +import jax +import jax.numpy as jnp +from typing import NamedTuple +from quantecon.distributions import BetaBinomial + + +# %% [markdown] +# ## The Model +# +# The model is similar to the {doc}`baseline McCall job search model `. +# +# It concerns the life of an infinitely lived worker and +# +# * the opportunities he or she (let's say he to save one character) has to work at different wages +# * exogenous events that destroy his current job +# * his decision making process while unemployed +# +# The worker can be in one of two states: employed or unemployed. +# +# He wants to maximize +# +# ```{math} +# :label: objective +# +# {\mathbb E} \sum_{t=0}^\infty \beta^t u(y_t) +# ``` +# +# At this stage the only difference from the {doc}`baseline model ` is that we've added some flexibility to preferences by +# introducing a utility function $u$. +# +# It satisfies $u'> 0$ and $u'' < 0$. +# +# ### The Wage Process +# +# For now we will drop the separation of state process and wage process that we +# maintained for the {doc}`baseline model `. +# +# In particular, we simply suppose that wage offers $\{ w_t \}$ are IID with common distribution $q$. +# +# The set of possible wage values is denoted by $\mathbb W$. +# +# (Later we will go back to having a separate state process $\{s_t\}$ +# driving random outcomes, since this formulation is usually convenient in more sophisticated +# models.) +# +# ### Timing and Decisions +# +# At the start of each period, the agent can be either +# +# * unemployed or +# * employed at some existing wage level $w_e$. +# +# At the start of a given period, the current wage offer $w_t$ is observed. +# +# If currently *employed*, the worker +# +# 1. receives utility $u(w_e)$ and +# 1. is fired with some (small) probability $\alpha$. +# +# If currently *unemployed*, the worker either accepts or rejects the current offer $w_t$. +# +# If he accepts, then he begins work immediately at wage $w_t$. +# +# If he rejects, then he receives unemployment compensation $c$. +# +# The process then repeats. +# +# ```{note} +# We do not allow for job search while employed---this topic is taken up in a {doc}`later lecture `. +# ``` +# +# ## Solving the Model +# +# We drop time subscripts in what follows and primes denote next period values. +# +# Let +# +# * $v(w_e)$ be total lifetime value accruing to a worker who enters the current period *employed* with existing wage $w_e$ +# * $h(w)$ be total lifetime value accruing to a worker who who enters the current period *unemployed* and receives +# wage offer $w$. +# +# Here *value* means the value of the objective function {eq}`objective` when the worker makes optimal decisions at all future points in time. +# +# Our first aim is to obtain these functions. +# +# ### The Bellman Equations +# +# Suppose for now that the worker can calculate the functions $v$ and $h$ and use them in his decision making. +# +# Then $v$ and $h$ should satisfy +# +# ```{math} +# :label: bell1_mccall +# +# v(w_e) = u(w_e) + \beta +# \left[ +# (1-\alpha)v(w_e) + \alpha \sum_{w' \in \mathbb W} h(w') q(w') +# \right] +# ``` +# +# and +# +# ```{math} +# :label: bell2_mccall +# +# h(w) = \max \left\{ v(w), \, u(c) + \beta \sum_{w' \in \mathbb W} h(w') q(w') \right\} +# ``` +# +# Equation {eq}`bell1_mccall` expresses the value of being employed at wage $w_e$ in terms of +# +# * current reward $u(w_e)$ plus +# * discounted expected reward tomorrow, given the $\alpha$ probability of being fired +# +# Equation {eq}`bell2_mccall` expresses the value of being unemployed with offer +# $w$ in hand as a maximum over the value of two options: accept or reject +# the current offer. +# +# Accepting transitions the worker to employment and hence yields reward $v(w)$. +# +# Rejecting leads to unemployment compensation and unemployment tomorrow. +# +# Equations {eq}`bell1_mccall` and {eq}`bell2_mccall` are the Bellman equations for this model. +# +# They provide enough information to solve for both $v$ and $h$. +# +# (ast_mcm)= +# ### A Simplifying Transformation +# +# Rather than jumping straight into solving these equations, let's see if we can +# simplify them somewhat. +# +# (This process will be analogous to our {ref}`second pass ` at the plain vanilla +# McCall model, where we simplified the Bellman equation.) +# +# First, let +# +# ```{math} +# :label: defd_mm +# +# d := \sum_{w' \in \mathbb W} h(w') q(w') +# ``` +# +# be the expected value of unemployment tomorrow. +# +# We can now write {eq}`bell2_mccall` as +# +# $$ +# h(w) = \max \left\{ v(w), \, u(c) + \beta d \right\} +# $$ +# +# or, shifting time forward one period +# +# $$ +# \sum_{w' \in \mathbb W} h(w') q(w') +# = \sum_{w' \in \mathbb W} \max \left\{ v(w'), \, u(c) + \beta d \right\} q(w') +# $$ +# +# Using {eq}`defd_mm` again now gives +# +# ```{math} +# :label: bell02_mccall +# +# d = \sum_{w' \in \mathbb W} \max \left\{ v(w'), \, u(c) + \beta d \right\} q(w') +# ``` +# +# Finally, {eq}`bell1_mccall` can now be rewritten as +# +# ```{math} +# :label: bell01_mccall +# +# v(w) = u(w) + \beta +# \left[ +# (1-\alpha)v(w) + \alpha d +# \right] +# ``` +# +# In the last expression, we wrote $w_e$ as $w$ to make the notation +# simpler. +# +# ### The Reservation Wage +# +# Suppose we can use {eq}`bell02_mccall` and {eq}`bell01_mccall` to solve for +# $d$ and $v$. +# +# (We will do this soon.) +# +# We can then determine optimal behavior for the worker. +# +# From {eq}`bell2_mccall`, we see that an unemployed agent accepts current offer +# $w$ if $v(w) \geq u(c) + \beta d$. +# +# This means precisely that the value of accepting is higher than the expected value of rejecting. +# +# It is clear that $v$ is (at least weakly) increasing in $w$, since the agent is never made worse off by a higher wage offer. +# +# Hence, we can express the optimal choice as accepting wage offer $w$ if and only if +# +# $$ +# w \geq \bar w +# \quad \text{where} \quad +# \bar w \text{ solves } v(\bar w) = u(c) + \beta d +# $$ +# +# ### Solving the Bellman Equations +# +# We'll use the same iterative approach to solving the Bellman equations that we +# adopted in the {doc}`first job search lecture `. +# +# Here this amounts to +# +# 1. make guesses for $d$ and $v$ +# 1. plug these guesses into the right-hand sides of {eq}`bell02_mccall` and {eq}`bell01_mccall` +# 1. update the left-hand sides from this rule and then repeat +# +# In other words, we are iterating using the rules +# +# ```{math} +# :label: bell1001 +# +# d_{n+1} = \sum_{w' \in \mathbb W} +# \max \left\{ v_n(w'), \, u(c) + \beta d_n \right\} q(w') +# ``` +# +# ```{math} +# :label: bell2001 +# +# v_{n+1}(w) = u(w) + \beta +# \left[ +# (1-\alpha)v_n(w) + \alpha d_n +# \right] +# ``` +# +# starting from some initial conditions $d_0, v_0$. +# +# As before, the system always converges to the true solutions---in this case, +# the $v$ and $d$ that solve {eq}`bell02_mccall` and {eq}`bell01_mccall`. +# +# (A proof can be obtained via the Banach contraction mapping theorem.) +# +# ## Implementation +# +# Let's implement this iterative process. +# +# In the code, you'll see that we use a class to store the various parameters and other +# objects associated with a given model. +# +# This helps to tidy up the code and provides an object that's easy to pass to functions. +# +# The default utility function is a CRRA utility function + +# %% +@jax.jit +def u(c, σ=2.0): + return (c**(1 - σ) - 1) / (1 - σ) + + +# %% [markdown] +# Also, here's a default wage distribution, based around the BetaBinomial +# distribution: + +# %% +n = 60 # n possible outcomes for w +w_default = jnp.linspace(10, 20, n) # wages between 10 and 20 +a, b = 600, 400 # shape parameters +dist = BetaBinomial(n-1, a, b) # distribution +q_default = jnp.array(dist.pdf()) # probabilities as a JAX array + +# %% [markdown] +# Here's our jitted class for the McCall model with separation. + +# %% +class Model(NamedTuple): + α: float = 0.2 # job separation rate + β: float = 0.98 # discount factor + c: float = 6.0 # unemployment compensation + w: jnp.ndarray = w_default # wage outcome space + q: jnp.ndarray = q_default # probabilities over wage offers + + + +# %% [markdown] +# Now we iterate until successive realizations are closer together than some small tolerance level. +# +# We then return the current iterate as an approximate solution. + +# %% +@jax.jit +def update(model, v, d): + " One update on the Bellman equations. " + α, β, c, w, q = model.α, model.β, model.c, model.w, model.q + v_new = u(w) + β * ((1 - α) * v + α * d) + d_new = jnp.sum(jnp.maximum(v, u(c) + β * d) * q) + return v_new, d_new + +@jax.jit +def solve_model(model, tol=1e-5, max_iter=2000): + " Iterates to convergence on the Bellman equations. " + + def cond_fun(state): + v, d, i, error = state + return jnp.logical_and(error > tol, i < max_iter) + + def body_fun(state): + v, d, i, error = state + v_new, d_new = update(model, v, d) + error_1 = jnp.max(jnp.abs(v_new - v)) + error_2 = jnp.abs(d_new - d) + error_new = jnp.maximum(error_1, error_2) + return v_new, d_new, i + 1, error_new + + # Initial state: (v, d, i, error) + v_init = jnp.ones_like(model.w) + d_init = 1.0 + i_init = 0 + error_init = tol + 1 + + init_state = (v_init, d_init, i_init, error_init) + final_state = jax.lax.while_loop(cond_fun, body_fun, init_state) + v_final, d_final, _, _ = final_state + + return v_final, d_final + +# %% [markdown] +# ### The Reservation Wage: First Pass +# +# The optimal choice of the agent is summarized by the reservation wage. +# +# As discussed above, the reservation wage is the $\bar w$ that solves +# $v(\bar w) = h$ where $h := u(c) + \beta d$ is the continuation +# value. +# +# Let's compare $v$ and $h$ to see what they look like. +# +# We'll use the default parameterizations found in the code above. + +# %% +model = Model() +v, d = solve_model(model) +h = u(model.c) + model.β * d + +fig, ax = plt.subplots() +ax.plot(model.w, v, 'b-', lw=2, alpha=0.7, label='$v$') +ax.plot(model.w, [h] * len(model.w), + 'g-', lw=2, alpha=0.7, label='$h$') +ax.set_xlim(min(model.w), max(model.w)) +ax.legend() +plt.show() + + +# %% [markdown] +# The value $v$ is increasing because higher $w$ generates a higher wage flow conditional on staying employed. +# +# ### The Reservation Wage: Computation +# +# Here's a function `compute_reservation_wage` that takes an instance of `Model` +# and returns the associated reservation wage. + +# %% +@jax.jit +def compute_reservation_wage(model): + """ + Computes the reservation wage of an instance of the McCall model + by finding the smallest w such that v(w) >= h. If no such w exists, then + w_bar is set to np.inf. + + """ + v, d = solve_model(model) + h = u(model.c) + model.β * d + i = jnp.searchsorted(v, h, side='right') + w_bar = model.w[i] + return w_bar + + +# %% [markdown] +# Next we will investigate how the reservation wage varies with parameters. +# +# ## Impact of Parameters +# +# In each instance below, we'll show you a figure and then ask you to reproduce it in the exercises. +# +# ### The Reservation Wage and Unemployment Compensation +# +# First, let's look at how $\bar w$ varies with unemployment compensation. +# +# In the figure below, we use the default parameters in the `Model` class, apart from +# c (which takes the values given on the horizontal axis) +# +# ```{figure} /_static/lecture_specific/mccall_model_with_separation/mccall_resw_c.png +# +# ``` +# +# As expected, higher unemployment compensation causes the worker to hold out for higher wages. +# +# In effect, the cost of continuing job search is reduced. +# +# ### The Reservation Wage and Discounting +# +# Next, let's investigate how $\bar w$ varies with the discount factor. +# +# The next figure plots the reservation wage associated with different values of +# $\beta$ +# +# ```{figure} /_static/lecture_specific/mccall_model_with_separation/mccall_resw_beta.png +# +# ``` +# +# Again, the results are intuitive: More patient workers will hold out for higher wages. +# +# ### The Reservation Wage and Job Destruction +# +# Finally, let's look at how $\bar w$ varies with the job separation rate $\alpha$. +# +# Higher $\alpha$ translates to a greater chance that a worker will face termination in each period once employed. +# +# ```{figure} /_static/lecture_specific/mccall_model_with_separation/mccall_resw_alpha.png +# +# ``` +# +# Once more, the results are in line with our intuition. +# +# If the separation rate is high, then the benefit of holding out for a higher wage falls. +# +# Hence the reservation wage is lower. +# +# ## Exercises +# +# ```{exercise-start} +# :label: mmws_ex1 +# ``` +# +# Reproduce all the reservation wage figures shown above. +# +# Regarding the values on the horizontal axis, use + +# %% +grid_size = 25 +c_vals = jnp.linspace(2, 12, grid_size) # unemployment compensation +beta_vals = jnp.linspace(0.8, 0.99, grid_size) # discount factors +alpha_vals = jnp.linspace(0.05, 0.5, grid_size) # separation rate + +# %% [markdown] +# ```{exercise-end} +# ``` +# +# ```{solution-start} mmws_ex1 +# :class: dropdown +# ``` +# +# Here's the first figure. + +# %% + +def compute_res_wage_given_c(c): + model = Model(c=c) + w_bar = compute_reservation_wage(model) + return w_bar + +w_bar_vals = jax.vmap(compute_res_wage_given_c)(c_vals) + +fig, ax = plt.subplots() +ax.set(xlabel='unemployment compensation', ylabel='reservation wage') +ax.plot(c_vals, w_bar_vals, label=r'$\bar w$ as a function of $c$') +ax.legend() +plt.show() + +# %% [markdown] +# Here's the second one. + +# %% +def compute_res_wage_given_beta(β): + model = Model(β=β) + w_bar = compute_reservation_wage(model) + return w_bar + +w_bar_vals = jax.vmap(compute_res_wage_given_beta)(beta_vals) + +fig, ax = plt.subplots() +ax.set(xlabel='discount factor', ylabel='reservation wage') +ax.plot(beta_vals, w_bar_vals, label=r'$\bar w$ as a function of $\beta$') +ax.legend() +plt.show() + +# %% [markdown] +# Here's the third. + +# %% + +def compute_res_wage_given_alpha(α): + model = Model(α=α) + w_bar = compute_reservation_wage(model) + return w_bar + +w_bar_vals = jax.vmap(compute_res_wage_given_alpha)(alpha_vals) + +fig, ax = plt.subplots() +ax.set(xlabel='separation rate', ylabel='reservation wage') +ax.plot(alpha_vals, w_bar_vals, label=r'$\bar w$ as a function of $\alpha$') +ax.legend() +plt.show() + +# %% [markdown] +# ```{solution-end} +# ``` From c5174d31e1735f74224e63f6913c187cc5747b11 Mon Sep 17 00:00:00 2001 From: John Stachurski Date: Tue, 29 Jul 2025 17:27:27 +0900 Subject: [PATCH 2/3] misc --- lectures/mccall_model_with_separation.md | 221 ++++----- lectures/mccall_model_with_separation.py | 564 ----------------------- 2 files changed, 101 insertions(+), 684 deletions(-) delete mode 100644 lectures/mccall_model_with_separation.py diff --git a/lectures/mccall_model_with_separation.md b/lectures/mccall_model_with_separation.md index 774b1cf79..5356dd71d 100644 --- a/lectures/mccall_model_with_separation.md +++ b/lectures/mccall_model_with_separation.md @@ -3,6 +3,8 @@ jupytext: text_representation: extension: .md format_name: myst + format_version: 0.13 + jupytext_version: 1.17.2 kernelspec: display_name: Python 3 language: python @@ -30,9 +32,8 @@ kernelspec: In addition to what's in Anaconda, this lecture will need the following libraries: ```{code-cell} ipython ---- -tags: [hide-output] ---- +:tags: [hide-output] + !pip install quantecon ``` @@ -56,10 +57,10 @@ We'll need the following imports ```{code-cell} ipython import matplotlib.pyplot as plt -plt.rcParams["figure.figsize"] = (11, 5) #set default figure size import numpy as np -from numba import jit, float64 -from numba.experimental import jitclass +import jax +import jax.numpy as jnp +from typing import NamedTuple from quantecon.distributions import BetaBinomial ``` @@ -306,8 +307,8 @@ This helps to tidy up the code and provides an object that's easy to pass to fun The default utility function is a CRRA utility function -```{code-cell} python3 -@jit +```{code-cell} ipython +@jax.jit def u(c, σ=2.0): return (c**(1 - σ) - 1) / (1 - σ) ``` @@ -315,78 +316,66 @@ def u(c, σ=2.0): Also, here's a default wage distribution, based around the BetaBinomial distribution: -```{code-cell} python3 +```{code-cell} ipython n = 60 # n possible outcomes for w -w_default = np.linspace(10, 20, n) # wages between 10 and 20 +w_default = jnp.linspace(10, 20, n) # wages between 10 and 20 a, b = 600, 400 # shape parameters -dist = BetaBinomial(n-1, a, b) -q_default = dist.pdf() +dist = BetaBinomial(n-1, a, b) # distribution +q_default = jnp.array(dist.pdf()) # probabilities as a JAX array ``` Here's our jitted class for the McCall model with separation. -```{code-cell} python3 -mccall_data = [ - ('α', float64), # job separation rate - ('β', float64), # discount factor - ('c', float64), # unemployment compensation - ('w', float64[:]), # list of wage values - ('q', float64[:]) # pmf of random variable w -] - -@jitclass(mccall_data) -class McCallModel: - """ - Stores the parameters and functions associated with a given model. - """ - - def __init__(self, α=0.2, β=0.98, c=6.0, w=w_default, q=q_default): - - self.α, self.β, self.c, self.w, self.q = α, β, c, w, q - - - def update(self, v, d): - - α, β, c, w, q = self.α, self.β, self.c, self.w, self.q - - v_new = np.empty_like(v) - - for i in range(len(w)): - v_new[i] = u(w[i]) + β * ((1 - α) * v[i] + α * d) - - d_new = np.sum(np.maximum(v, u(c) + β * d) * q) +```{code-cell} ipython +class Model(NamedTuple): + α: float = 0.2 # job separation rate + β: float = 0.98 # discount factor + c: float = 6.0 # unemployment compensation + w: jnp.ndarray = w_default # wage outcome space + q: jnp.ndarray = q_default # probabilities over wage offers - return v_new, d_new ``` Now we iterate until successive realizations are closer together than some small tolerance level. We then return the current iterate as an approximate solution. -```{code-cell} python3 -@jit -def solve_model(mcm, tol=1e-5, max_iter=2000): - """ - Iterates to convergence on the Bellman equations - - * mcm is an instance of McCallModel - """ - - v = np.ones_like(mcm.w) # Initial guess of v - d = 1 # Initial guess of d - i = 0 - error = tol + 1 - - while error > tol and i < max_iter: - v_new, d_new = mcm.update(v, d) - error_1 = np.max(np.abs(v_new - v)) - error_2 = np.abs(d_new - d) - error = max(error_1, error_2) - v = v_new - d = d_new - i += 1 - - return v, d +```{code-cell} ipython +@jax.jit +def update(model, v, d): + " One update on the Bellman equations. " + α, β, c, w, q = model.α, model.β, model.c, model.w, model.q + v_new = u(w) + β * ((1 - α) * v + α * d) + d_new = jnp.sum(jnp.maximum(v, u(c) + β * d) * q) + return v_new, d_new + +@jax.jit +def solve_model(model, tol=1e-5, max_iter=2000): + " Iterates to convergence on the Bellman equations. " + + def cond_fun(state): + v, d, i, error = state + return jnp.logical_and(error > tol, i < max_iter) + + def body_fun(state): + v, d, i, error = state + v_new, d_new = update(model, v, d) + error_1 = jnp.max(jnp.abs(v_new - v)) + error_2 = jnp.abs(d_new - d) + error_new = jnp.maximum(error_1, error_2) + return v_new, d_new, i + 1, error_new + + # Initial state: (v, d, i, error) + v_init = jnp.ones_like(model.w) + d_init = 1.0 + i_init = 0 + error_init = tol + 1 + + init_state = (v_init, d_init, i_init, error_init) + final_state = jax.lax.while_loop(cond_fun, body_fun, init_state) + v_final, d_final, _, _ = final_state + + return v_final, d_final ``` ### The Reservation Wage: First Pass @@ -401,19 +390,17 @@ Let's compare $v$ and $h$ to see what they look like. We'll use the default parameterizations found in the code above. -```{code-cell} python3 -mcm = McCallModel() -v, d = solve_model(mcm) -h = u(mcm.c) + mcm.β * d +```{code-cell} ipython +model = Model() +v, d = solve_model(model) +h = u(model.c) + model.β * d fig, ax = plt.subplots() - -ax.plot(mcm.w, v, 'b-', lw=2, alpha=0.7, label='$v$') -ax.plot(mcm.w, [h] * len(mcm.w), +ax.plot(model.w, v, 'b-', lw=2, alpha=0.7, label='$v$') +ax.plot(model.w, [h] * len(model.w), 'g-', lw=2, alpha=0.7, label='$h$') -ax.set_xlim(min(mcm.w), max(mcm.w)) +ax.set_xlim(min(model.w), max(model.w)) ax.legend() - plt.show() ``` @@ -421,25 +408,22 @@ The value $v$ is increasing because higher $w$ generates a higher wage flow cond ### The Reservation Wage: Computation -Here's a function `compute_reservation_wage` that takes an instance of `McCallModel` +Here's a function `compute_reservation_wage` that takes an instance of `Model` and returns the associated reservation wage. -```{code-cell} python3 -@jit -def compute_reservation_wage(mcm): +```{code-cell} ipython +@jax.jit +def compute_reservation_wage(model): """ Computes the reservation wage of an instance of the McCall model - by finding the smallest w such that v(w) >= h. + by finding the smallest w such that v(w) >= h. If no such w exists, then + w_bar is set to np.inf. - If no such w exists, then w_bar is set to np.inf. """ - - v, d = solve_model(mcm) - h = u(mcm.c) + mcm.β * d - - i = np.searchsorted(v, h, side='right') - w_bar = mcm.w[i] - + v, d = solve_model(model) + h = u(model.c) + model.β * d + i = jnp.searchsorted(v, h, side='right') + w_bar = model.w[i] return w_bar ``` @@ -453,7 +437,7 @@ In each instance below, we'll show you a figure and then ask you to reproduce it First, let's look at how $\bar w$ varies with unemployment compensation. -In the figure below, we use the default parameters in the `McCallModel` class, apart from +In the figure below, we use the default parameters in the `Model` class, apart from c (which takes the values given on the horizontal axis) ```{figure} /_static/lecture_specific/mccall_model_with_separation/mccall_resw_c.png @@ -503,11 +487,11 @@ Reproduce all the reservation wage figures shown above. Regarding the values on the horizontal axis, use -```{code-cell} python3 +```{code-cell} ipython grid_size = 25 -c_vals = np.linspace(2, 12, grid_size) # unemployment compensation -beta_vals = np.linspace(0.8, 0.99, grid_size) # discount factors -alpha_vals = np.linspace(0.05, 0.5, grid_size) # separation rate +c_vals = jnp.linspace(2, 12, grid_size) # unemployment compensation +beta_vals = jnp.linspace(0.8, 0.99, grid_size) # discount factors +alpha_vals = jnp.linspace(0.05, 0.5, grid_size) # separation rate ``` ```{exercise-end} @@ -519,57 +503,54 @@ alpha_vals = np.linspace(0.05, 0.5, grid_size) # separation rate Here's the first figure. -```{code-cell} python3 -mcm = McCallModel() - -w_bar_vals = np.empty_like(c_vals) +```{code-cell} ipython -fig, ax = plt.subplots() +def compute_res_wage_given_c(c): + model = Model(c=c) + w_bar = compute_reservation_wage(model) + return w_bar -for i, c in enumerate(c_vals): - mcm.c = c - w_bar = compute_reservation_wage(mcm) - w_bar_vals[i] = w_bar +w_bar_vals = jax.vmap(compute_res_wage_given_c)(c_vals) -ax.set(xlabel='unemployment compensation', - ylabel='reservation wage') +fig, ax = plt.subplots() +ax.set(xlabel='unemployment compensation', ylabel='reservation wage') ax.plot(c_vals, w_bar_vals, label=r'$\bar w$ as a function of $c$') ax.legend() - plt.show() ``` Here's the second one. -```{code-cell} python3 -fig, ax = plt.subplots() +```{code-cell} ipython +def compute_res_wage_given_beta(β): + model = Model(β=β) + w_bar = compute_reservation_wage(model) + return w_bar -for i, β in enumerate(beta_vals): - mcm.β = β - w_bar = compute_reservation_wage(mcm) - w_bar_vals[i] = w_bar +w_bar_vals = jax.vmap(compute_res_wage_given_beta)(beta_vals) +fig, ax = plt.subplots() ax.set(xlabel='discount factor', ylabel='reservation wage') ax.plot(beta_vals, w_bar_vals, label=r'$\bar w$ as a function of $\beta$') ax.legend() - plt.show() ``` Here's the third. -```{code-cell} python3 -fig, ax = plt.subplots() +```{code-cell} ipython + +def compute_res_wage_given_alpha(α): + model = Model(α=α) + w_bar = compute_reservation_wage(model) + return w_bar -for i, α in enumerate(alpha_vals): - mcm.α = α - w_bar = compute_reservation_wage(mcm) - w_bar_vals[i] = w_bar +w_bar_vals = jax.vmap(compute_res_wage_given_alpha)(alpha_vals) +fig, ax = plt.subplots() ax.set(xlabel='separation rate', ylabel='reservation wage') ax.plot(alpha_vals, w_bar_vals, label=r'$\bar w$ as a function of $\alpha$') ax.legend() - plt.show() ``` diff --git a/lectures/mccall_model_with_separation.py b/lectures/mccall_model_with_separation.py deleted file mode 100644 index fe1db49a5..000000000 --- a/lectures/mccall_model_with_separation.py +++ /dev/null @@ -1,564 +0,0 @@ -# --- -# jupyter: -# jupytext: -# default_lexer: ipython -# text_representation: -# extension: .py -# format_name: percent -# format_version: '1.3' -# jupytext_version: 1.17.2 -# kernelspec: -# display_name: Python 3 -# language: python -# name: python3 -# --- - -# %% [markdown] -# (mccall_with_sep)= -# ```{raw} jupyter -#
-# -# QuantEcon -# -#
-# ``` -# -# # Job Search II: Search and Separation -# -# ```{index} single: An Introduction to Job Search -# ``` -# -# ```{contents} Contents -# :depth: 2 -# ``` -# -# In addition to what's in Anaconda, this lecture will need the following libraries: - -# %% tags=["hide-output"] -# !pip install quantecon - -# %% [markdown] -# ## Overview -# -# Previously {doc}`we looked ` at the McCall job search model {cite}`McCall1970` as a way of understanding unemployment and worker decisions. -# -# One unrealistic feature of the model is that every job is permanent. -# -# In this lecture, we extend the McCall model by introducing job separation. -# -# Once separation enters the picture, the agent comes to view -# -# * the loss of a job as a capital loss, and -# * a spell of unemployment as an *investment* in searching for an acceptable job -# -# The other minor addition is that a utility function will be included to make -# worker preferences slightly more sophisticated. -# -# We'll need the following imports - -# %% -import matplotlib.pyplot as plt -import numpy as np -import jax -import jax.numpy as jnp -from typing import NamedTuple -from quantecon.distributions import BetaBinomial - - -# %% [markdown] -# ## The Model -# -# The model is similar to the {doc}`baseline McCall job search model `. -# -# It concerns the life of an infinitely lived worker and -# -# * the opportunities he or she (let's say he to save one character) has to work at different wages -# * exogenous events that destroy his current job -# * his decision making process while unemployed -# -# The worker can be in one of two states: employed or unemployed. -# -# He wants to maximize -# -# ```{math} -# :label: objective -# -# {\mathbb E} \sum_{t=0}^\infty \beta^t u(y_t) -# ``` -# -# At this stage the only difference from the {doc}`baseline model ` is that we've added some flexibility to preferences by -# introducing a utility function $u$. -# -# It satisfies $u'> 0$ and $u'' < 0$. -# -# ### The Wage Process -# -# For now we will drop the separation of state process and wage process that we -# maintained for the {doc}`baseline model `. -# -# In particular, we simply suppose that wage offers $\{ w_t \}$ are IID with common distribution $q$. -# -# The set of possible wage values is denoted by $\mathbb W$. -# -# (Later we will go back to having a separate state process $\{s_t\}$ -# driving random outcomes, since this formulation is usually convenient in more sophisticated -# models.) -# -# ### Timing and Decisions -# -# At the start of each period, the agent can be either -# -# * unemployed or -# * employed at some existing wage level $w_e$. -# -# At the start of a given period, the current wage offer $w_t$ is observed. -# -# If currently *employed*, the worker -# -# 1. receives utility $u(w_e)$ and -# 1. is fired with some (small) probability $\alpha$. -# -# If currently *unemployed*, the worker either accepts or rejects the current offer $w_t$. -# -# If he accepts, then he begins work immediately at wage $w_t$. -# -# If he rejects, then he receives unemployment compensation $c$. -# -# The process then repeats. -# -# ```{note} -# We do not allow for job search while employed---this topic is taken up in a {doc}`later lecture `. -# ``` -# -# ## Solving the Model -# -# We drop time subscripts in what follows and primes denote next period values. -# -# Let -# -# * $v(w_e)$ be total lifetime value accruing to a worker who enters the current period *employed* with existing wage $w_e$ -# * $h(w)$ be total lifetime value accruing to a worker who who enters the current period *unemployed* and receives -# wage offer $w$. -# -# Here *value* means the value of the objective function {eq}`objective` when the worker makes optimal decisions at all future points in time. -# -# Our first aim is to obtain these functions. -# -# ### The Bellman Equations -# -# Suppose for now that the worker can calculate the functions $v$ and $h$ and use them in his decision making. -# -# Then $v$ and $h$ should satisfy -# -# ```{math} -# :label: bell1_mccall -# -# v(w_e) = u(w_e) + \beta -# \left[ -# (1-\alpha)v(w_e) + \alpha \sum_{w' \in \mathbb W} h(w') q(w') -# \right] -# ``` -# -# and -# -# ```{math} -# :label: bell2_mccall -# -# h(w) = \max \left\{ v(w), \, u(c) + \beta \sum_{w' \in \mathbb W} h(w') q(w') \right\} -# ``` -# -# Equation {eq}`bell1_mccall` expresses the value of being employed at wage $w_e$ in terms of -# -# * current reward $u(w_e)$ plus -# * discounted expected reward tomorrow, given the $\alpha$ probability of being fired -# -# Equation {eq}`bell2_mccall` expresses the value of being unemployed with offer -# $w$ in hand as a maximum over the value of two options: accept or reject -# the current offer. -# -# Accepting transitions the worker to employment and hence yields reward $v(w)$. -# -# Rejecting leads to unemployment compensation and unemployment tomorrow. -# -# Equations {eq}`bell1_mccall` and {eq}`bell2_mccall` are the Bellman equations for this model. -# -# They provide enough information to solve for both $v$ and $h$. -# -# (ast_mcm)= -# ### A Simplifying Transformation -# -# Rather than jumping straight into solving these equations, let's see if we can -# simplify them somewhat. -# -# (This process will be analogous to our {ref}`second pass ` at the plain vanilla -# McCall model, where we simplified the Bellman equation.) -# -# First, let -# -# ```{math} -# :label: defd_mm -# -# d := \sum_{w' \in \mathbb W} h(w') q(w') -# ``` -# -# be the expected value of unemployment tomorrow. -# -# We can now write {eq}`bell2_mccall` as -# -# $$ -# h(w) = \max \left\{ v(w), \, u(c) + \beta d \right\} -# $$ -# -# or, shifting time forward one period -# -# $$ -# \sum_{w' \in \mathbb W} h(w') q(w') -# = \sum_{w' \in \mathbb W} \max \left\{ v(w'), \, u(c) + \beta d \right\} q(w') -# $$ -# -# Using {eq}`defd_mm` again now gives -# -# ```{math} -# :label: bell02_mccall -# -# d = \sum_{w' \in \mathbb W} \max \left\{ v(w'), \, u(c) + \beta d \right\} q(w') -# ``` -# -# Finally, {eq}`bell1_mccall` can now be rewritten as -# -# ```{math} -# :label: bell01_mccall -# -# v(w) = u(w) + \beta -# \left[ -# (1-\alpha)v(w) + \alpha d -# \right] -# ``` -# -# In the last expression, we wrote $w_e$ as $w$ to make the notation -# simpler. -# -# ### The Reservation Wage -# -# Suppose we can use {eq}`bell02_mccall` and {eq}`bell01_mccall` to solve for -# $d$ and $v$. -# -# (We will do this soon.) -# -# We can then determine optimal behavior for the worker. -# -# From {eq}`bell2_mccall`, we see that an unemployed agent accepts current offer -# $w$ if $v(w) \geq u(c) + \beta d$. -# -# This means precisely that the value of accepting is higher than the expected value of rejecting. -# -# It is clear that $v$ is (at least weakly) increasing in $w$, since the agent is never made worse off by a higher wage offer. -# -# Hence, we can express the optimal choice as accepting wage offer $w$ if and only if -# -# $$ -# w \geq \bar w -# \quad \text{where} \quad -# \bar w \text{ solves } v(\bar w) = u(c) + \beta d -# $$ -# -# ### Solving the Bellman Equations -# -# We'll use the same iterative approach to solving the Bellman equations that we -# adopted in the {doc}`first job search lecture `. -# -# Here this amounts to -# -# 1. make guesses for $d$ and $v$ -# 1. plug these guesses into the right-hand sides of {eq}`bell02_mccall` and {eq}`bell01_mccall` -# 1. update the left-hand sides from this rule and then repeat -# -# In other words, we are iterating using the rules -# -# ```{math} -# :label: bell1001 -# -# d_{n+1} = \sum_{w' \in \mathbb W} -# \max \left\{ v_n(w'), \, u(c) + \beta d_n \right\} q(w') -# ``` -# -# ```{math} -# :label: bell2001 -# -# v_{n+1}(w) = u(w) + \beta -# \left[ -# (1-\alpha)v_n(w) + \alpha d_n -# \right] -# ``` -# -# starting from some initial conditions $d_0, v_0$. -# -# As before, the system always converges to the true solutions---in this case, -# the $v$ and $d$ that solve {eq}`bell02_mccall` and {eq}`bell01_mccall`. -# -# (A proof can be obtained via the Banach contraction mapping theorem.) -# -# ## Implementation -# -# Let's implement this iterative process. -# -# In the code, you'll see that we use a class to store the various parameters and other -# objects associated with a given model. -# -# This helps to tidy up the code and provides an object that's easy to pass to functions. -# -# The default utility function is a CRRA utility function - -# %% -@jax.jit -def u(c, σ=2.0): - return (c**(1 - σ) - 1) / (1 - σ) - - -# %% [markdown] -# Also, here's a default wage distribution, based around the BetaBinomial -# distribution: - -# %% -n = 60 # n possible outcomes for w -w_default = jnp.linspace(10, 20, n) # wages between 10 and 20 -a, b = 600, 400 # shape parameters -dist = BetaBinomial(n-1, a, b) # distribution -q_default = jnp.array(dist.pdf()) # probabilities as a JAX array - -# %% [markdown] -# Here's our jitted class for the McCall model with separation. - -# %% -class Model(NamedTuple): - α: float = 0.2 # job separation rate - β: float = 0.98 # discount factor - c: float = 6.0 # unemployment compensation - w: jnp.ndarray = w_default # wage outcome space - q: jnp.ndarray = q_default # probabilities over wage offers - - - -# %% [markdown] -# Now we iterate until successive realizations are closer together than some small tolerance level. -# -# We then return the current iterate as an approximate solution. - -# %% -@jax.jit -def update(model, v, d): - " One update on the Bellman equations. " - α, β, c, w, q = model.α, model.β, model.c, model.w, model.q - v_new = u(w) + β * ((1 - α) * v + α * d) - d_new = jnp.sum(jnp.maximum(v, u(c) + β * d) * q) - return v_new, d_new - -@jax.jit -def solve_model(model, tol=1e-5, max_iter=2000): - " Iterates to convergence on the Bellman equations. " - - def cond_fun(state): - v, d, i, error = state - return jnp.logical_and(error > tol, i < max_iter) - - def body_fun(state): - v, d, i, error = state - v_new, d_new = update(model, v, d) - error_1 = jnp.max(jnp.abs(v_new - v)) - error_2 = jnp.abs(d_new - d) - error_new = jnp.maximum(error_1, error_2) - return v_new, d_new, i + 1, error_new - - # Initial state: (v, d, i, error) - v_init = jnp.ones_like(model.w) - d_init = 1.0 - i_init = 0 - error_init = tol + 1 - - init_state = (v_init, d_init, i_init, error_init) - final_state = jax.lax.while_loop(cond_fun, body_fun, init_state) - v_final, d_final, _, _ = final_state - - return v_final, d_final - -# %% [markdown] -# ### The Reservation Wage: First Pass -# -# The optimal choice of the agent is summarized by the reservation wage. -# -# As discussed above, the reservation wage is the $\bar w$ that solves -# $v(\bar w) = h$ where $h := u(c) + \beta d$ is the continuation -# value. -# -# Let's compare $v$ and $h$ to see what they look like. -# -# We'll use the default parameterizations found in the code above. - -# %% -model = Model() -v, d = solve_model(model) -h = u(model.c) + model.β * d - -fig, ax = plt.subplots() -ax.plot(model.w, v, 'b-', lw=2, alpha=0.7, label='$v$') -ax.plot(model.w, [h] * len(model.w), - 'g-', lw=2, alpha=0.7, label='$h$') -ax.set_xlim(min(model.w), max(model.w)) -ax.legend() -plt.show() - - -# %% [markdown] -# The value $v$ is increasing because higher $w$ generates a higher wage flow conditional on staying employed. -# -# ### The Reservation Wage: Computation -# -# Here's a function `compute_reservation_wage` that takes an instance of `Model` -# and returns the associated reservation wage. - -# %% -@jax.jit -def compute_reservation_wage(model): - """ - Computes the reservation wage of an instance of the McCall model - by finding the smallest w such that v(w) >= h. If no such w exists, then - w_bar is set to np.inf. - - """ - v, d = solve_model(model) - h = u(model.c) + model.β * d - i = jnp.searchsorted(v, h, side='right') - w_bar = model.w[i] - return w_bar - - -# %% [markdown] -# Next we will investigate how the reservation wage varies with parameters. -# -# ## Impact of Parameters -# -# In each instance below, we'll show you a figure and then ask you to reproduce it in the exercises. -# -# ### The Reservation Wage and Unemployment Compensation -# -# First, let's look at how $\bar w$ varies with unemployment compensation. -# -# In the figure below, we use the default parameters in the `Model` class, apart from -# c (which takes the values given on the horizontal axis) -# -# ```{figure} /_static/lecture_specific/mccall_model_with_separation/mccall_resw_c.png -# -# ``` -# -# As expected, higher unemployment compensation causes the worker to hold out for higher wages. -# -# In effect, the cost of continuing job search is reduced. -# -# ### The Reservation Wage and Discounting -# -# Next, let's investigate how $\bar w$ varies with the discount factor. -# -# The next figure plots the reservation wage associated with different values of -# $\beta$ -# -# ```{figure} /_static/lecture_specific/mccall_model_with_separation/mccall_resw_beta.png -# -# ``` -# -# Again, the results are intuitive: More patient workers will hold out for higher wages. -# -# ### The Reservation Wage and Job Destruction -# -# Finally, let's look at how $\bar w$ varies with the job separation rate $\alpha$. -# -# Higher $\alpha$ translates to a greater chance that a worker will face termination in each period once employed. -# -# ```{figure} /_static/lecture_specific/mccall_model_with_separation/mccall_resw_alpha.png -# -# ``` -# -# Once more, the results are in line with our intuition. -# -# If the separation rate is high, then the benefit of holding out for a higher wage falls. -# -# Hence the reservation wage is lower. -# -# ## Exercises -# -# ```{exercise-start} -# :label: mmws_ex1 -# ``` -# -# Reproduce all the reservation wage figures shown above. -# -# Regarding the values on the horizontal axis, use - -# %% -grid_size = 25 -c_vals = jnp.linspace(2, 12, grid_size) # unemployment compensation -beta_vals = jnp.linspace(0.8, 0.99, grid_size) # discount factors -alpha_vals = jnp.linspace(0.05, 0.5, grid_size) # separation rate - -# %% [markdown] -# ```{exercise-end} -# ``` -# -# ```{solution-start} mmws_ex1 -# :class: dropdown -# ``` -# -# Here's the first figure. - -# %% - -def compute_res_wage_given_c(c): - model = Model(c=c) - w_bar = compute_reservation_wage(model) - return w_bar - -w_bar_vals = jax.vmap(compute_res_wage_given_c)(c_vals) - -fig, ax = plt.subplots() -ax.set(xlabel='unemployment compensation', ylabel='reservation wage') -ax.plot(c_vals, w_bar_vals, label=r'$\bar w$ as a function of $c$') -ax.legend() -plt.show() - -# %% [markdown] -# Here's the second one. - -# %% -def compute_res_wage_given_beta(β): - model = Model(β=β) - w_bar = compute_reservation_wage(model) - return w_bar - -w_bar_vals = jax.vmap(compute_res_wage_given_beta)(beta_vals) - -fig, ax = plt.subplots() -ax.set(xlabel='discount factor', ylabel='reservation wage') -ax.plot(beta_vals, w_bar_vals, label=r'$\bar w$ as a function of $\beta$') -ax.legend() -plt.show() - -# %% [markdown] -# Here's the third. - -# %% - -def compute_res_wage_given_alpha(α): - model = Model(α=α) - w_bar = compute_reservation_wage(model) - return w_bar - -w_bar_vals = jax.vmap(compute_res_wage_given_alpha)(alpha_vals) - -fig, ax = plt.subplots() -ax.set(xlabel='separation rate', ylabel='reservation wage') -ax.plot(alpha_vals, w_bar_vals, label=r'$\bar w$ as a function of $\alpha$') -ax.legend() -plt.show() - -# %% [markdown] -# ```{solution-end} -# ``` From b1101ded11377de941c7d337c8703787661745c0 Mon Sep 17 00:00:00 2001 From: Humphrey Yang Date: Wed, 30 Jul 2025 21:49:15 +1000 Subject: [PATCH 3/3] minor updates to static figure and variable / searchsort logic. --- .../mccall_resw_alpha.png | Bin 11252 -> 20778 bytes .../mccall_resw_beta.png | Bin 10929 -> 25947 bytes .../mccall_resw_c.png | Bin 11742 -> 23001 bytes lectures/mccall_model_with_separation.md | 51 +++++++++--------- 4 files changed, 24 insertions(+), 27 deletions(-) diff --git a/lectures/_static/lecture_specific/mccall_model_with_separation/mccall_resw_alpha.png b/lectures/_static/lecture_specific/mccall_model_with_separation/mccall_resw_alpha.png index 7baddaa1c217972a8a1f4d6692a1958660567fb9..706fa128de0958e3edd013e2c2baa875b3d15caf 100644 GIT binary patch literal 20778 zcmeIaWmHz%`!>1&0mZ;VlvY6`1f?4cK#)#p6s1eLc}$e{K|(^5Zjf$JH-dC`sWbx8 z4eveKzc>Elea|@Od^q3E7<&)lVLfZjHRnC=xUTD-Z{ zoP9a`ebJ;t=I+H8c!`uxXKqbNMl#Tv$>!lwG_z$-9r~=KUM;IWPwZMFrF>}2m+UnI zL;D#CwpgQG_jX>dC0`T_VU$PL z{{;Mt+mR$VgkiQ^XC>e_=G*`OFaO`nfwdHAj)_LPIpC|rH7cJtd^6AqjsajYNLED{;C!y?G?NjGpeZ+=|3=9lpE^so4 zi;F++fW<3&8yx(xwY9Zzx0pK)8-6}(v%R&ssf-a|Io!=2TVeKN)0f~6fq~T*`z-kqlagi{-*fxE zd87Q2j3RpN+lPgN8#2HR;q~FYme$tzgiZt}lbyZF;Oy*7E9@kfnwq+_w8SNZpH_N9 zQ2oZ1@lf-#o~@Y00fPT(nZ2QlziZPCzdUR-b zYUddT)Q7SqfBg8-W3#d;ieIxSl9$(YX^g#r@|rfIv-7&g4_jubU401xp2Xec)4XHp zrU467S+85M_}>^V^$-b3zvOgT+s|)4Fi#m$0aO=gCGoDZd3|UEML2oW?~%9rJ-KcY zO-fIz$VS52SKA(^;%QBg3E`@m@5@Vu(c|%WMj2!uK0ZEc^F!_(_TD>-(nHQ8o@9p) zEB*ZXvg@;vG_9D2K!eda4&9W$e{CtQDoMONN~w{qk;&B)6S6v#Vo>Epb=?s6(8%cV z=lg0&au;M&-g7;+7UI&(GnNmyz$T(~Ldl61mMTN(9RD$A~ zwwk`ae(6HxcK+jrFw61cP~psVr>bzBzH-;RNPe3vLSnKMyYc$|+{b>#&C#i(^d5id zxktON;;!(leVHL!TyOtu|AVSv%o!%qR*5f4{zt0Wt3gXXox)s_Lx-;3xS@=9fIV={ zpi;N8va;0n=QBpLiN^P(`+M8!iL#+lAEMs9OSpLZm1#rRHSGfPP+eW!&H@WftxOFW z71&a4>+_j=yW18E!xdlseXHE7ilp zBj2p!O2u-sFcrUbv__Whd)Ixo?DDvx5igy~(t({HMBRCu=XELAG~`s1J0gi z=Eb{1=Ak@7=P*+HP4m*UKyB-~^<4jAq>#TG}OciN-A- zG9P?N1o9F|eZ*01O+bGC7uAJlsL_O0`-`yCA$0-n^; z$ArAa>XI_;bxc*WQ++yB6a-lF=+>#~gak&9iVuY}x4q zQ1Rw^(89)sx4nmly_x>*-Pr=mKCaqXagU9hEd7c!FeMWXduM0O3b)nV@n)Tda zVZkTAUU+TK@$YVr>^JL9{QP+_s_A=MmHR)ZB+j^3N=9_k3#B*RnB=wfdUsB2;4YoD zgA-N~k1I=G^S3bSU2hJ&^^$CQWAXPEm{?cNgWKvE_iyB3UK>Ass03_Bt;7XCsU|Cc z(RIOS&w?LL?@B|93BDFTHZzkJ%BE=!2CDt};maiXsH7f!cljtjt9o|lKCO`3@^^h?WJEmRmxAE@;|gcHimTnJs?7F% zu$k0hMTF@RYsBN_BO=oMBvswI)Nn;*P9I+PY_qLV(;mSQeZJ4Wv}Vga7B&=Ag1pzQ zThG9W;9VD=!IXDr8)Spqe^j}<=?uo-F zYHIJmeDYluf6-(wSf6E4xdZ#`y#X^LI|bP9%Cnuj0UK^C9j(P=thWX@)Xp?@Hkk{=wy=M>b`QLY?)jxgKpusb?S9W9WjM8Cf0HnG-HnK$-y zp55DC=!q7z?}T}!U{$*d-lb8+Y5rAsc(}gT=Huh^V!Cv6bmoJ_pJBVi50yF3{$P$( zgQp`0MJwv2Mtt;~nxWySJhz>vhsVl-_r4A+wkm`|*-+L*=V4drA3uJ$E&X7&U&$Nq zcC+ZtNL^WRK%UJF42ajXl_8WvPuqQc9^y(ZS4-cWwI_#KPvoa+=mzoDxx6LcH1}y{ zOgbNZ7+dOD^^+huPW7&&v86>ZoYSEDC}+9tz+_2rvFYBUzNP+m72r($dq~*i=$%%@U_Iq}Yj_O@$>gox1-wu387I^aOj^o0x zUXbWogn3t5;%%Q3X5egC!2t$(6%K0K+`k`zd^?M3(p4@ll`mhupe=Cg_HFL{lM>DM zE&D3Y(Z4@^`t;bsLiWan%jV|h`1E?I9j{(Y@_yQ`_mwoQnoC;=26`pM*I5o#50%)B z`#ya5P_58X%hlEO0xfBsy|Y`>C~`$dK+z!&C0a3NiP|H;``W zN)zN?rtsS|S4&RACpd>KbTpr#3^)$S_Mg+lt<5W`nzB~u6g^!IQ6$YqYBU&DCr0)$ z1~yJ)uc+?DJ$)fJ4z2jg#|M9*Bl}28_IIsyO#iLj=evG|`=4r*nf(LNy$%z%Ds-_? zr`){8Emc!dxd91PZHfT4?@#W9%Ns55GC3nz~s#y{J52ET4 zJ^J6F(b1N+ry0C;y)*YcU(j-0Kk`ptN$Gu_5)=7?s9XhMg@0yuL$_CD%c6tk2u6!h zx_9zq@Fu~R;o;#vx>}N6qNt{%v9U)nVxHOr1O$B_vVO5&#W`^>G8m~1<{4OaczX-R zeILI-K|0#)OUcP0^PcIX?IXDIeYWeMzYN2AwOlOY-WFbO>!DG`GcvcC+As2F)q-#K zVb<3~MfEhZ^?8Lzf=vd8h8A4LTI9BE;$fHGEFb=q##bBN^HiMEY)Vu3JlwqyhUThs z%+^l#&@YCA6>-jNRDQC*&KCa*^6X4yjP`EguS%-E8!)f|@%fIdGm9k5gcxRghrr=_ zP$y?1UzhK+d8s_ngp~=J^Wr1KtzYi5pQ{+Ec=aqhz?XV=&N}`wB%~pqFrkl_4Y~Zh zmMX`&>8Ls8e8w5_gFl^tKc#GqlUY>nQZUM7b3Q;f+Bizw`t*3QxZG;}p&1ofDl{I6 zD?Zn77Cl+&$qF&ZZ$oCqbT4dh?Q@IBvOlDPR}?=)+iWg9k4pEuvYN)SPdMNIMnO(U~kPn4O7N%F{%BU;vL4xO!G26M${P7_k3~R18J32aGQ+17>pZ_?Gz~8J`?gw8FK|*0N4100;`h)q>Cu)O{ zyCy3?Ud2mE!(xy;sV6M98sL+E&n0O;(fGFJVae=d#Zo<+Z%|N6Ijy*t2)XJ+rEHDo z>Q;gBlQZ7E=_C7wXp)=jSdNZDa_6wMViwA(E^BRVZD()a0gjEwVM-~KMRlUEWqD=g zU2LpDSX6~;z86bDmYb)V?mIjf4~FZ2=Wd{PgK*><7}#9?^2G~Ncu(z0kCL{h4NP zNy*}09lH<*KSSbCKl*5*^`q{C3R^3+K?^@`%|9iNo}Yp5>^%J3XX!zA_XHCoW8KJz z!Q$egldG7acBy)WiB)GE{!6P((3eO0q#<-+vx`N-`V71=;l6SB-TmuLX7aS$mh}}wjlqbXKMUiRm?@NSL ze^SOS%24%vN@G2{YoSJy{E848Exw8iW~BIQ+m$c&cFEShZ3ZoCwsZh;QcH)4PrhfR zT<@qmq0T4+%Z5A@Mst?Y09WbXZh?4p>~qBigIv_~*(>=GG+b?VKMuT-s<Jh z_?P9pi~T9Z7hv~f`y3cZMLhP4zJQ!uW5KOQs^;2(&8-CzzAocRGg5y^aV@3e4GUGF zEi-y@juAXLl#nhfvRfFOP0O}|Me~2`TksCSKYHn>|0MT-M~V8oD>f(g15L%BQ^Y6x zmhL}qH&z;EokI-p|AS7fAb_owQzqg~@)RA1%$9A_MJs_uG+KWtf;%5(?_a)CF=OoS z>;4vv=sYaB$Bi^q^-#`V@#1Gxcswp1+!!E{&94LBH%f@%KSI)0AKgt!pI_n zM_^{0pNi2%c3uX{C~vAQur!HodkY56dRF3mobvtP4;K3Rc%FxC3J2E*UBz8*9Mzzp z&|;N%quI`5>h-Q2&5lInN9^nM`7Dk|H*h3tu;jVE=&56*WDLhBsHQR(hhYE98+hKW zq7^f-y#)J{p7`Xe*|VqOJ~+Z(j_aSSLDRAXi<@+P>q{DIxFDw8LZ z9oXnz=Oi_9kP`Zzu&+F6FE?gG;nQK=LQVJI2jkF(aj0$avc_+7OV>zF+nJXhyo~_d z!x#K)8F`nIvVkJ4kf+SQ*Js6JUmeIOS2`0u^hnp#%xvo+3ufR~#vaH9e0#RCU<^Cb zGf$P71MLpn;4Oj|W)&L}l3mA+D}4>+IUY&hgvM=m1jao+KNDwG0mfk^>~vH0V3=7j zoX%TB6|3D4Q92Grh(21O^FOQ{B*gR>{2s^aZeldIwu)DAIY*7?GLq~hJsenn`o8l1 zhHgDiOnlPm3oO5?JH!Z`l1W9+F9(nGCp=uHT=AkxD!<`8#rpT$ihk#R=ll?SVf@W^ zet+MnhJ!1g!IgFpk50jxi+IY|upeZEeUbz(hFEl4RYQ=wC}YtOKX^q;m{|_q6Gz+g z;LR%zj5W9B!O_wF0*fxFB_MXyJ^XC?1J9&2PtR@a&#IZlPESvdN{meHf_BIg{Ezt2 zTv(Ejl+>lB;EzC7FvtrDiHwYl@9WpCP`}%_de`_;@B)kgS^T}(o@`B2^gtC8BWQmm zHsn(Bpq?I2re*?}TdCRX=cAEZ%NJ1sWJt-*$GmYz57L<$Kg#rb;T%Pta<^_h+u7Y+ z?NAg?g#ypHV0gCWO;AucL}HFaNheS0T_2LBpfEql$ZZEA-m99uXw#fA+MlbI#_}#h zB@4jCyQ-?HOP4PB2R^r)(an27m!+qoaj+no(WRKz`j9j0{hW{G<>fqP?TneaB`P;> z-YoL;kd^g?96xu^@WjEA-4yfntBMOpi(XAD=tyAM7WWb&cEN*hBn4Ij8lrA1t&mLF zY;PPna|Pn5`0_a_s>mR-C(L3WtRwr8C-)Wgp7E3aj53w#e0cKK#>Q0u%n*(T$jbP{ zL{eX#$;jGbcKMR;uiwA9ZEAz)TWa$+n7i(6%#P23uO2wC7wc~h#DAAt#5I3^4*>Ku z4$52^JfwUXHdVWPEmcJT&C1HwTP>{rCt;y(O!WTEWv-n1TBRd{N+9T9!F*H6M*S~v z^E|3MSzt4wPsypT=H~XjS(t%AB7|A7xx17@uQXw5%2ZNX`W_ytm$S6AnZ3RDnV6WS zyEF~Dpge-|>xR`xrJkbb>N|yKflog4UIO9XtYgfue9rWNO2`&Bmhr;}VVVDiIzcp_ zRitrKWFo>501tZKFx#0L4;kfS3q2^W)gL`dxODk4lMDiH;Abe}m;hFW0#6ZYS52@d zgkORINzHa=suq}c*{zz~+B?cRl`10&{>8Hd%zLjH?FQ>HV+R~{%|HJ`en_@ceNoyTLtmWi1;T`^XSRXOej zU>tG!6>b-3$(>Rh9?(~G6_kQ;cjw2FrzvlKO>2R-!-a6qv5)4NwA7myq?xwGNlBMn zGd|KE^vPhZm486-YVXKB@nhz3P+*`Pb?ocjz#|)ik*im))^(1PuRYeCG-o|<8I14$ zTpNWHQHwn+Dols{98{((V2rz4tEztIt{uBe>OS#%I?1f!a@T6SL4n75?3SHs2A!2s z|I~emV_#v01`4gx0duIUt(Cr}ov*Y!(WIVZcoP8T`;N2S>VTahIF(cN=BP_r_}`ue zt9>epqJ6cvFHqcGf0f!y-~sTadYT$b0F5A5!xI09hiYvgZ3iGxJZ>wd*K`Wyz$kdH zjvEO0RPWu-YfFFCS}p zO|@R^%F@$;jJChXCKf=+^ndRB4jTSTn5$^QnV2#+<|yROA{oSYHIcvU1>j9sa8R#z z)SqjHoWQvC=KM?=r{=Q^1{{U)hj~GLM+bLR{FkSPC{PGFg-_t*`#w`UqIdy-4cyM- zG(a|vo&RVO>!|?~qB>OS2q8G%b=eqUh;FN0noKec;ha_D#R3e%k!n}tOd>-MirVn1 zzSO_?Jrs)sj;mG>v&$HGZ6+ou#%AqquiwK1e33vvM3MrAflq)NnCMej@|?IhP}Iqj zPPf-WGAD2<+YJ!R_314;d)}^_PcR8O!+oo-grw1` z*06Mb+a@H2=9UZH~?hC14g@D&0gg#)!TZ^_G*eJBUO-R4#&*jZ}ef?NtF_Uj?|?qBBLg zAHeOl#nEaM9kds;?VJmyYKM|}ob5AEq_5*nV#Pt-tK#DF-Dl|>`+X&NEpczihB# zqpQ)xdQMq3Qk`f*YP!D50Zmr$EKEn4(;VP$8Zvl5uM*x~mQDi@&kYu~tIFH^dB>Lv z#l`nmhQFO611|))&rIfH_k)?q;$EG^to!q2s`j?h0lr@ueNIkAJ9)(;F!;B&`=~$N zepM4bVP8aB$10tYA4+6~qMUs`R{|bkeThJ;uj}rs03MDRRO_Lwd=mT(?lvrLZV~SG zty`VRiu6s3=Cb}5oPk8ZSx?{@+a zyb9!z8FFsgnX-!fJrwV0ZaJOsi&vPcAr>Bc`1YJghmvE%^-vP*&xLK9A5Bx3xASy6 zQ>Hu+ql;OQe%3tsRhCN!Jf`#nF3-C%Q%jp-qpY z0W%Z<3|AvtKNI5FY;vrZN}h3(TDi-U)jxfz`-n(>ctuZn&^#j)mHhQfc2 zPLkWvjRoLdk|5&G`f*l{UOE}^tjk=rN>C?%t@?sG>qNSZfhjwuvnDFfbD!=O{RqUQ zBqhz-6J%xvOY&e_b$z@^gp#A@B*)v^6Ym8ClGfGK#H~ZzRJuuyBFvw#)IhAXq=W?! zNMI8i$`Ak3*c4sG5Z%K`+MKcg+2+1yMq$4i%Jh1Vu8myTJ|D3>*&;mm3g>C2@%i;$ zSAMi{mT271qt2}5FT_!u;q*<-hCp@CP*LApPv$36R)DWgHQJB6U@(XNyzzN<|OPvzbiP@3vBoJopCSf}?bf>FO$am+#e?hd`Lp z@K{nu8^>1qtONt4|E#Wj;!*e6Air>4s4d=4{c?lI{4gyY2QG%!q?rbCN!et@*sw11 zCcAwwI7=n2(Poc|L0&M*(w5#}LDnqAT@_>;qhYWUNnryD+E1haR-2|@Q3@4)+gn`O zIlw4>TCth!tZ(zc>Zm8nT~ueEus~59o<;ub1Q}U7xaOp_xdCe0@vOf$@f*VFT}hR( zmI&8Ei+QC6BIG3I=HddmSmV@riNF%r(_TSPjt1<1K&jF)q%JgoDnoGodSoTXLejGW z?Rk7cim1*0h=Xip?j&c=c(V>J4 z<4nJ{zcx;+^|d!C06Z2!#hi#|sbq#KD)_DSh3wH$Ltd+XHTg&$WzZ3P@K}<8l!Tg= zyzZ@afo#gXrjv;}R#5PAa6^4$$PS|gx^ybsz^iS4Z(Urk+(j9Z$4=lk(;V=O=07korN8b-qiothk*PGrX!ALv;S^*#uym(_EJ)w8DS}(uTD8`q03a=-aqI zy-#-HVBtUVq|2Wvdzr2&iu~Rww66~v+S%p$Qm{F7EX7IsEuFjmNB@o~?o~l5qYTw@ z)sT>bP#Z!4Odh8Z0_b)-fKF6fGfVe}uG8ky;{aM=jpNjOJl8J-3xBXyQIKanG+nQr zt{*|2$fgP6g+rL_Ewr82N4zy5fIE)YQvi_%1<+L?A#I?h5rhXJz}Vp*c7YfE(E>3p zl5Rdckg3!M>rV<{rIZ};)8l>uT~G}iJve}`?aT! ziiPCry@5mVqhTC+X-;$fKZb_%pfalXZ3I;K7Y|wDv5E(<1B@C4clV^9k#N3l4_CYa zD-|q$Oq_7)*RMFB_);NJw0lyr%gX}GGCe&Z^x#7kgKc(TbV)*BM>m@wuO4SXRtn`j zLaxVn!Iu=1_5Pb)zTfvOi|VVV52miCV2OZ=yk_#J1%izvjQD zC@{(Q6eXT(R1hbMpj{KWORJ_YzJl0>4Vma52i9b3;$3ievHjz>^t z*0k{A!^_g!K4aL4?|*}ymb5{%NCPszzM(-(>|}UD-CIfpW?khn7T75Wowz|BX>sTh z)+-FNDNLGUGg9fKx`!)Q>1?^Tu=+Zfv8m5iO?+;%0~xNgQ5s>yhYwln!|sZ!GhM2S zziI#oju;Q4{ogSDN5jsmGwKzPJps=g9uyRG>(;H6jo(4DV?RPlcFqt8cEo|7aWv49 zY0r5nykhc|0;P5|Z(tRAKO3!nA*D}|4x$4%yeIhL?aoXce#F5wM%?Jr)&y?=MKW;z zD^c_J6coC_jCt+G?xGS8DuVW>M5O0=NmVa&7vdqG?|3h6Ep1GRC6uU`q2>`Z$Uh#G&+&Tq;6Q^ecNzdi~Bzwh-sYtm)Pc{T)Ae0B}idD`Y9_0`S zAVFAK*~a>mv+mwR?y{a_b4u+ig(#nUo|N}?8Amb~)hR649@0i2Nz|Y)VMLVL3n z%=HHd&)~KJDU&Py$cC^DIe);cu3qeFcJePTeIYwOnIRL)Rv^OJc$>@}L@->;jV?i) zcM*`byTEdj9X(o>e3Zx9`NU{fx@K3rG&!xH-5v4$ojfv14v*SZG;}D^muFwRIP~(> zE1^}vLv`MZKQwvWrWdqN$2{qBD>x}GKcl5e;dg`g5H?RTiA82$SD2X_1_p$Cdfd|q zT`G2HMO>7C*w=V_sZad#2g;NF`2ZT~>*U^}49Twl)+G52tYv?@zP@XG!nGg6RYCF! zHLaxIxvuyiv9$4q@CNgWqN0NTGlY3o^z!nW z0SOeH=ZZ2AQ~U$7NU5WpZ~CNTsnT=X9ITsFr|{3U*dmC{yf(u-S(T*TH>;04!%|q(H<1^uSfS!mR-09_iBbo@((@ z0bD}b=gM)0S3XbTc~@pltpp>VINCPUOY(klFZSKy(m#b+|FbucK>SzAeeF-%BMmVK;noGpqyyoVarY=qDq&w{eHg0+q*>X_PIN3dtC8j z7C8sKU z*z@YGb@jtsLR8p!U&vd@J{A=f2|4{q5%b(a$(Nn8Grv$f?IPhb(O#!N&t3tk6FhHNk7R3->JB(Am6dEus-7#@EM8fb7Z>LrNFa~_6%gws9*H9WRl5LG-TwaaF<|qc7U6fBFPTK_U5vn!TLl(9 zVL?HPVcSq&K2YMSzENCOYHFSxIdk2yqL8NIqnS8;yC1n4QbsYvzMr6xkb!WyiA#VG z(_|b{^YEuV_EdMtYK5MPM_ilZoY`>4akVPl2axVcR6aOxQa5hgkdnrtZ%sxrK?$Jc znYa4_VsSV5^GJy1-yrVbJRYVI-Y<19i@%I17+Fr5_tUxGykQcuvcxaE8Y^wVEqoq} zev!&S_%;EuVch^~ehtXRz(-z@i4<|ot=wJHc^*O#nD{X{DrwCZSUJfC=lxVpz8XYH z1uH^|Y|>P>-vS!;w^rT^oda4tGrEVPnY8y1iN%8bqFxK zSV$g$umrfyMtgpGIu#^SM5hS?TTlfZ>RJ1CX}@~=?%PQ5oCUl}n7G~M_bL&kaG<7on7*cn(I5xDyQJAlpBz#v;OQ7B-=|^L z5SAfhf6I7Hw^#|#@*d!-SNcq1%^(7!Z#EP+cd7H$Ni+Y>HvNac>`{B3B*=kby(6Nd z*^vym9TMvQBmgNlpOd^d`iYGNQA^kC7H_|sur`KFP=E|Zn3Hq;npW-|fTDXKzIOqJ zFVhZHZ_FB_eDz)aKws+hD$#y#R+NC_29Y_LcV0!94y$UCKR^h{uZ~m8)(cR%q#wD6 zE$Q!nf83Sv@Kj=g7O&y3lU@np*m9hcpmc>Sl?6nEr%s)+d-7u{If~yV45VJbJy_b7 zW)%C=H2;!&=-V%^m7Eu@vSRvN#Vzk%F#r|}wFd>lM@9-xeI)QiYCsNyN_LqvouaJi zdiqg0-wn5!=X8*jRra1wr}q|r4BS+81*DuJ&hydQg_fx>4{5MveEk|Cq_;X%70sqv zKcN}a>F||Yk?XL-Cm^gY1UaC?SgGLBY|Gh_k~Wvr$D=@zjV3CVQ=a(+trIoi}` zAFTU5R?4M3@>D^=ipt(cAqORzO4w!Zo)}Sg4G`9nFcSWCM#hwxgWQ(1k_H^9aaYd;It3hRX+o`-!E<1s;jRs9# z<7w+_fm^rnYP`LQA#UAjppPM8Cc+K;o3#OK)&-UfVn0#Qztu#tva%|mP&i9L@wjw} zRAPy9G)qR*VkTbNJQYIU+CNMw9r>$~C2Q9yUt_p8?JZ2R0_`;+ zVr?``|HI}s9;K&Uu#nG~s{dZ1V&w9zPfz({dyZmK5BII&F5^IpvbDQD0zj;PARz;( z@0Q#2?@GrNr*&Ht<(J!*&4pbvCu{;kW%im6VY)_kn*+}9hbd_7u%hSK=8s;6?mWl1Y(soIHz z?;`L?PnY8zc!$gZrm=NFU$(P%Yx*+*H&jq1MHooaUg4~lLrDn?)E2mFhR__(Poi-5gBZn#?2zDkU>xkG-yh||2D6{_m$3Rsit6(BkYSUATa6Ir?Q2c z3@+FZ=zi?at>o7yS2IFDiSzdvVymh}VGVMq8pw*(USpZGe5E_9_z}IIhy30%Wgj0S_Gyfn`yn4vCm$2Ar zP8&9m43u2C_t~{`AIXGmL*GOKpH)8)S9bxkXlrYGHFn6>hNLJhr4Dp?ZGd6n%0_dD zud}eoK+K4Q?9^((2DGkM6rv+qeqdu)oHZ%sEBIKg2Y_EjVP-=bdT8p{z_+PFc4O_n zZxkeYMMem?CNU<$U`>D{sG*+i(4bc-ZA!X%jScFY2m9ZNaqeHM0{epT__!A@Ua<3H z6Rj+l?kEmxYVbv^{G9nVv-C3?g+EB}3}w$&TSojZHoWv%W2Q__b0+p zD`R;-LpAl4p=)4b4s_b^jlcYJ-<}uj)FfS?KO1A+1-WwSdSif)*9W#21fxP^hI}q= zZuKoKoDIiun`c*7+iN{%L2>+ZY0>o^K6`nD}%)k+`+7CNHofPThP3P-`Sl<`=#0Mmm!vO10}_L`w|7l#?XuH#L(;Wa z*-pQsaRtmAzsdGEcyFT~4`^cG7r21ifnw_EQA4j$;zPZ$uoIKAgi?aKY4BZFDAt$T z%gB3_LdYcj14$TSbM~D^i*N*^8bEQZs6@$XZ!Ac$Qjf)}9?@Ls{nJFXJGW389cc}< zbsZ(_Q-xHG)LYtof5k+HbMhIdJ4OOizjZqL`c@d)a$$Au=!ymqX8@1YW3oG&S{xf5 z7%i`|et{ZFw_REJJStjpZ0Q*6i4KeZ_&^vqxa1Bmv4kx8-83R^F4+?}BiOPyMsFKu z`FV;|^6gF)qrza<+YeQ1)kOxBrI6*O&_W++Bb?*wbfYT;4P6aa%*|`js~lR zt%a*%nVC%7pVibnQ~DAHr5Sm0A=yecw;&{d|-vMT_gD~u%}q0^ya zr-?(f1}->(gA1IM(sGI>_R~MMOE-kJ z;A`+AbtI739Jf%_G7ulQ`IGPl_(%?$^&O1QGGRZ{d z{Y*hoXX-b|oJlZe^ge=Pb3c=Sq@C^9TLlRhxBa_8Qns~Ob0H{kBPgMfY+gCfS2F*h zEw^LVg*bsqxoT$v>*`@Hu0YVk>2`jW zI*3^lJyJg^O8k}WutpzvXh}vyY`EC8rsnT5V}Ja>S$qAtq>K(toj`6_M;36@4CEl} zT}?HRMf99d;!)I+^~yU>Rnfap-sH3@WC+ziz`-(*hjRRhCvM^Cd~Fdw=GDKQ+%KmO zDX0m&|8I1gAdpJ0SmrHlt-bu7raPz!nz+?JlmomkU?j)Ta(k#S^(u~3w%%{yZ8^_W z1T8!TQRNy{bYKq$jh8r&vFV94AV6kkO{mix9@xbASH($-!36)?mr2ygL7TEbx(92V z@7VtZUVIZ70m z^T}Fw-E`bGeSRVa-M1VT4m)!g#N_$IZ$a0hvPV2vFdO7j5L>FB*He34_Jjl|t_X2& zM9!azqu|`*m7Nb*SW9WCrFQ&9i0+RfYDD9zvYm}%W)|UmR=>+wdB1{wa&{4H6N!0< z6SyPLzagqpl@A2ror3HDJawUM^4{tupWa48YJXi{spGnXBtHudL6AN`|~Iau0+?Mg&M%{RM+`sHM3BF#l@gGh_QR}d8)$a@>#W3)$M(`PMwA|DD?mR8!g+f*;I13 zJ9qJ7BQA0c&aqsOsC^Xfr-Jxpn301#1 z4Z22&Q2<3m9cGKsS#w18v#E&DW%bk8>(ggJ>4zIYOZfaMOff%_j_q_1Sb?4tH-JV) zGz~QF(4~8iKz(+gjVrnXPbTHgy5|_m@+VWALm%Bi2l>0_EK}1-sTG&UC-9Jr3{Ri{ zXNX#bZ6$bRNlaY^Wbp}~_XiNysD)ys0M>-a)2?x*Bj*2Os}S$sH!9SZS?P zeM7Y`3Mtd0gR!v9%qFh8cfMovTpPHNX$UD3TEL&Y>G$vKmx{5@N5%O10jn|k2NrMi z(7(Lrj^mBZG?JG8`SAf2?hFD%d6<=G(5hn5clsFUE81QH|A)S)2I7a*ERfp?$GFr0 zq;U+*H8XdXJ#Q%RrCA^-*;-sjc}^YBqL?jLrT+X@m6xMB?B4&rryt$ShneRUqQZH= z&c>M4D(~LB=34m{sV@OgQtqTjMM*ckhy|q72fI|EzN1O~+ki$ldKuB9*XtA=-8w`cOn>p3dviEpWs?#uDO zn03(-KRPu!_X$>$H`6%*3X<7%@zb3T`rSOs=U->|2NTf{!o=C$i@9_w|5r_tx&DFN z%+0<}e|6I(UP1RRAKb@%EQi<@QZN81LT=r<1%+1rqaS$o^#Myh(2Gbx0?4ZL5r_Id zLGwj@<{T!M_8(si-h#u1T+>R#PTz_-yQ4=ZsKNNRDT84)O(AxLiHYUXrCZQlS2e!7 zP`(_96e;qtVtP7-mdZe;tR8e1zFpSEMx`K`gl>&YdJ&dqmLf#(2V z0X#PYDbgUGX$A!(d~>Ef(J#S2-Wvu+CE}8U`l@79Ko|&^K@#fdgno-gy-fa#7jN$E z?E$NTWQqDUq*%vYDE;i`PI>0oRb?d&sP)#~wsAbJIWSWb5J)lz3>!YGjllopnKSW- zoddnp`vwtFQE0>CM*5>d;_J{F!NTIbTM!i-96YH-P%Q_6dCPfu2~DfM?#WEg{^wDeU|*!%Gyu^DebFFfDs}XhfOo9Q8z3yG7a&`(82&n zB*?6X?Rzidpw+AW(`_HFs=$BqRMdeC5;Ex5zW=*6NE2Gd)c{uspcmJN2BVpdvXTZ2#d`w-ap!EH<083D0$-8SXMwnCwq)`{2Y~!)RbHN%_dnkP97#$N z4sEETR9FU1&Yl*NGsdzp*0?hz5s@fRsR6j1iwJ$_y6P<|8IfM8pwNmQWzN- z&qp5u$!zBAwv`FpD=C6<(l>A3;1gO~m7a${pT!?&=tqjxwj0O3u#dVM7HB&zjmd0o zZGn{iJZ{ z8^MB6(Gov&k2wDCGrq3X>F6FJ#Lzha5W(Od(KqwKbO2TVsy6prOA3C;0=sSce z|5ye=A9?zd-``nvi*rz`CUn|cfRJW0qI>bNiTmIbvWh>>$DtcBKS za4puQARgtUKO=ks+8QiD$8@lT-RF2EB_&g3Lav||VkmTMHaDOhmjXIN5d;nt=#pTj zece2tR+&>Koy#bJCrGJKiy|;epA=$*SXfzEV?%_K{#cWPD!StD*Q45SA!_PHZHn1d zd!^8){=Vf0t*TQ|ts`jD4)kKVj~hH>XK3t7Mb{QavWtt08+E`~msma<{WLNRHi9=q zEFupSMU9V#4bszsH!3XC9IQB!xB()7SIbyl4xgL@>xDZBmMN5Gl-Fc3hDX9gt_NVEU6{@JHpt(4BI=pWrD39qs z(~@PI4xaI=!H-)+H92)~jb%q$hag%37{V<$y+A$Rw5{BC(!nlQ6eb`UL>6X1UsK(9 z_yTp{mpLz#`%m-CJGmz$CnLcw6-XbUJ2k>!Fq^4$KDDPmkKtc4U1pj5TWo}zfc-fj7%~= zfBxJ82$mP#nru|Getzw)oLnc2ih_b7ky78~rpkAg({R`U^r@lN)cLCYJ&zyruk9@8 z+d)_6xmZJ4LfgV(dxF94pKsr81N+qtnl&EljyJ|lV8gcvdVSmSa9rD44c;{IoC9%$(J9oqq z9X?>PtKS%%tn&V#`smT432&Q$LU}ZC)9s0lD^qPd{_{DxW%7H_sLy)snmpjS z;>5eYa_*T@b{gd)*A3qy#RkZoW=-0(bkKynLvS zk91%xJ@^4Xv-v>iGH`P%9UR2mTYBPJ$A$D{>JZgM&|k3sJ_e)KD6vfLC5xT~&vCtqa7l&`T_|>|SKrb_#B=D#yqGIEhAK;kq z-}`msC*jZp^{0fyC}@L-#<=es7EMijQX=cMpC6JvBQ5dVP?;t)*ee4=;@~;B0nph> zzeVktoruaoFh<`jkS!-%(LL+I^a-)ESO7H zK0Xajp#H@7PWV7x1#K{<@OEj+@vo2$1k^+a0$Uh0(p;fH3fHTAALsy4PG|9x-)AW) z!?n1a=lT-?_DuopKav82y!#`p-t0?C{f*jVz>got?7o2T))H?CGNy|0T~N^!me@}k zYps2!w&{ho3)8$l%fg6=^HGcgASL5or~&~_CWMhf82xtP$U3BYdC>bWx;zWokbcPH zjql0Glo$=e&KO|qgE(i!7u8ec@OB} zen>|Qw`bC`;crcAaJ)h@COc zPk}P28<=7TP)5R0OKGs*w7O5x(Rp>adV~9=f_5*2@&e&^Z~%^_Wd;aY-8992gYBRO zB~X=`aInGVMv;yw9;6}l;heFXj<&Y869Y}oDj?)xH-Nrwvp>C`x8})pwl)6>)8*ql@lZJI*;f{Hs80S8UIhfrY7t)oyQWJlYfj zf&fx~4QLu#MZV(h+e>g-i#i;o0cs<+9`X3O{(-(CZLi;(&Jecv$E$|y7v8!5r*|7V zAw;32Bo#cG+teqYy&HKzs)DzUhkZQkV34YkxOamTs|7qN*aCodIPoU~gyg7)ffd&G z9H)K;(qr6tb6Uu5>@}V1*jwQ&BSfD2%h5dtdv1dTv2 zvve17P!OC`K{<#|fD~qWsx6*>e9wIX+_4#)i39qvhE+L?hKTYhR!4zO6an6$z;RZi z=KFW^wm3;hx8#g(AVWZI7EZvJ0-J}VaE@ zrj>9;m?|@vXC#@0(R_q{33HJ8?MGy)rK+IQRKW5b#_CR8(<@y`YFT50DS}C>+@2SX zfvzsdcuUPh!K#rrLuVpcKra&VPe|7ldR6%rsHd8zv*!yT8G}Ua5@aD3&@co=p5lZ~ zPY?9yOTjyL(R=TFf}JUgN45GcWOZ(Po0FhL%!Jkea|qUOyp=?j$sxno16xC<$zdkwQyM-Y`GcD*-0d@@l<{y_7Bs8K!I=We5S8*WOn&|I#%+79 zhyspKfa-l3Xnl1hrC`Qspo7)HiFf9iD0XEV7{IGE*zx>z@;%EE2kP}HP-JU>_=Oh^ zAVKM&7M*I`og+x147se*=Z7`c?lpgyV?E+v!qcIx&%8J16S$U2IIJpac&+I;BrqzU zZoLHix{UZT*b~Z-IOd8N4;DWGCMyLtWA-IU-@ACQr%$MQhVZ5aUpjl?LMp5VtAKz& z4>w_s;<aXyYtpbpJ~|+_+D4M4FEK U<6EbfP$gnAk_vaSZW%uNZ_^V=#{d8T literal 11252 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 IRhO9m0z1b!$N&HU diff --git a/lectures/_static/lecture_specific/mccall_model_with_separation/mccall_resw_c.png b/lectures/_static/lecture_specific/mccall_model_with_separation/mccall_resw_c.png index 165f872e64882799fbb11b95bbcd2c6bd92e853d..a969cf02a2d056345a4ea519807dca13d368d639 100644 GIT binary patch literal 23001 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 literal 11742 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 h. If no such w exists, then w_bar is set to np.inf. - """ + v, d = solve_model(model) h = u(model.c) + model.β * d - i = jnp.searchsorted(v, h, side='right') - w_bar = model.w[i] + i = jnp.searchsorted(v, h, side='left') + w_bar = jnp.where(i >= len(model.w), jnp.inf, model.w[i]) return w_bar ``` @@ -487,11 +486,11 @@ Reproduce all the reservation wage figures shown above. Regarding the values on the horizontal axis, use -```{code-cell} ipython +```{code-cell} ipython3 grid_size = 25 c_vals = jnp.linspace(2, 12, grid_size) # unemployment compensation -beta_vals = jnp.linspace(0.8, 0.99, grid_size) # discount factors -alpha_vals = jnp.linspace(0.05, 0.5, grid_size) # separation rate +β_vals = jnp.linspace(0.8, 0.99, grid_size) # discount factors +α_vals = jnp.linspace(0.05, 0.5, grid_size) # separation rate ``` ```{exercise-end} @@ -503,8 +502,7 @@ alpha_vals = jnp.linspace(0.05, 0.5, grid_size) # separation rate Here's the first figure. -```{code-cell} ipython - +```{code-cell} ipython3 def compute_res_wage_given_c(c): model = Model(c=c) w_bar = compute_reservation_wage(model) @@ -521,35 +519,34 @@ plt.show() Here's the second one. -```{code-cell} ipython +```{code-cell} ipython3 def compute_res_wage_given_beta(β): model = Model(β=β) w_bar = compute_reservation_wage(model) return w_bar -w_bar_vals = jax.vmap(compute_res_wage_given_beta)(beta_vals) +w_bar_vals = jax.vmap(compute_res_wage_given_beta)(β_vals) fig, ax = plt.subplots() ax.set(xlabel='discount factor', ylabel='reservation wage') -ax.plot(beta_vals, w_bar_vals, label=r'$\bar w$ as a function of $\beta$') +ax.plot(β_vals, w_bar_vals, label=r'$\bar w$ as a function of $\beta$') ax.legend() plt.show() ``` Here's the third. -```{code-cell} ipython - +```{code-cell} ipython3 def compute_res_wage_given_alpha(α): model = Model(α=α) w_bar = compute_reservation_wage(model) return w_bar -w_bar_vals = jax.vmap(compute_res_wage_given_alpha)(alpha_vals) +w_bar_vals = jax.vmap(compute_res_wage_given_alpha)(α_vals) fig, ax = plt.subplots() ax.set(xlabel='separation rate', ylabel='reservation wage') -ax.plot(alpha_vals, w_bar_vals, label=r'$\bar w$ as a function of $\alpha$') +ax.plot(α_vals, w_bar_vals, label=r'$\bar w$ as a function of $\alpha$') ax.legend() plt.show() ```