# your code hereMcCall Model
Pablo Winant
Job-Search Model
- When unemployed in date, a job-seeker
- consumes unemployment benefit \(c_t = \underline{c}\)
- receives in every date \(t\) a job offer \(w_t\)
- \(w_t\) is i.i.d.,
- takes values \(w_1, w_2, w_3\) with probabilities \(p_1, p_2, p_3\)
- if job-seeker accepts, becomes employed at rate \(w_t\) in the next period
- else he stays unemployed
- When employed at rate \(w\)
- worker consumes salary \(c_t = w\)
- with small probability \(\lambda>0\) looses his job:
- starts next period unemployed
- otherwise stays employed at same rate
- Objective: \(\max E_0 \left\{ \sum \beta^t \log(c_t) \right\}\)
- What are the states, the controls, the reward of this problem ? Write down the Bellman equation.
- Define a named tuple for the model.
model = (;
λ=0.05,
β=0.9, # yearly discount
w=[0.9, 1.0, 1.1],
p=ones(3)/3,
cbar=0.5,
)(λ = 0.05, β = 0.9, w = [0.9, 1.0, 1.1], p = [0.3333333333333333, 0.3333333333333333, 0.3333333333333333], cbar = 0.5)
- Define a function
value_update(V_U::Vector{Float64}, V_E::Vector{Float64}, x::Vector{Bool}, p::Parameters)::Tuple{Vector, Vector}, which takes in value functions tomorrow and a policy vector and return updated values for today.
V_U_0 = zeros(3)
V_E_0 = zeros(3)
x_0 = [false, false, false]
function value_update(V_U, V_E, x, model)
(;cbar, λ, β, w, p) = model
new_V_U = zeros(3)
new_V_E = zeros(3)
# expected value of being unemployed without knowing the future offer
EVU = sum(p[i]*V_U[i] for i=1:3)
# unemployed
for i=1:3
# EVU = p'*V_U
if x[i]
# if reject
new_V_U[i] = log(cbar) + β*EVU
else
# if accept
new_V_U[i] = log(cbar) + β*V_E[i]
end
end
# employed
for i=1:3
new_V_E[i] = log(w[i]) + (1-λ)*β*V_E[i] + λ*β*EVU
end
return new_V_U, new_V_E
end
value_update(V_U_0, V_E_0, x_0, model)([-0.6931471805599453, -0.6931471805599453, -0.6931471805599453], [-0.10536051565782628, 0.0, 0.09531017980432493])
- Define a function
policy_eval(x::Vector{Bool}, p::Parameter)::Tuple{Vector, Vector}which takes in a policy vector and returns the value(s) of following this policies forever. You can add relevant arguments to the function.
using LinearAlgebra: normfunction policy_eval(x, model; T=1000, τ=1e-8)
V_U_0 = zeros(3)
V_E_0 = zeros(3)
η_0 = NaN
for t=1:T
V_U_1, V_E_1 = value_update(V_U_0, V_E_0, x, model)
η = norm( [V_U_1, V_E_1] .- [V_U_0, V_E_0])
λ = η/η_0
η_0 = η
# @show (t, η, λ)
if η<τ
break
end
V_U_0, V_E_0 = V_U_1, V_E_1
end
return V_U_0, V_E_0
end
policy_eval(x_0, model)([-1.623803790848331, -0.9698419695587606, -0.3782615432186312], [-1.0340629047854952, -0.3074386589025771, 0.34987292592487074])
- Define a function
bellman_step(V_E::Vector, V_U::Vector, p::Parameters)::Tuple{Vector, Vector, Vector}which returns updated values, together with improved policy rules.
zeros(Bool, 3)3-element Vector{Bool}:
0
0
0
function bellman_step(V_U, V_E, model)
(;cbar, λ, β, w, p) = model
new_V_U = zeros(3)
new_V_E = zeros(3)
new_x = zeros(Bool, 3)
# expected value of being unemployed without knowing the future offer
EVU = sum(p[i]*V_U[i] for i=1:3)
# unemployed
for i=1:3
# EVU = p'*V_U
# test both choices
# if reject
V_reject = log(cbar) + β*EVU
V_accept = log(cbar) + β*V_E[i]
if V_accept > V_reject
new_V_U[i] = V_accept
new_x[i] = true
else # V_accept <= V_reject
new_V_U[i] = V_reject
new_x[i] = false
end
end
# employed
for i=1:3
new_V_E[i] = log(w[i]) + (1-λ)*β*V_E[i] + λ*β*EVU
end
return new_V_U, new_V_E, new_x
end
bellman_step(V_U_0, V_E_0, model)([-0.6931471805599453, -0.6931471805599453, -0.6931471805599453], [-0.10536051565782628, 0.0, 0.09531017980432493], Bool[0, 0, 0])
- Implement Value Function Iteration
# we want to iterate on bellman_step to find a fixed
# We can reuse the code from value_update
# DIFF: policy_eval becomes vfi : no need for x argument
function vfi(model; T=1000, τ=1e-10)
V_U_0 = zeros(3)
V_E_0 = zeros(3)
local x # to access x outside of the loop
η_0 = NaN
for t=1:T
# value_update becomes bellman_step: returns x
V_U_1, V_E_1, x = bellman_step(V_U_0, V_E_0, model)
η = norm( [V_U_1, V_E_1] .- [V_U_0, V_E_0])
λ = η/η_0
η_0 = η
# @show (t, η, λ, x)
if η<τ
break
end
V_U_0, V_E_0 = V_U_1, V_E_1
end
return V_U_0, V_E_0, x
endvfi (generic function with 1 method)
result = vfi(model)
result[3](t, η, λ, x) = (1, 1.208943303215093, NaN, Bool[0, 0, 0])
(t, η, λ, x) = (2, 0.18590374068089768, 0.1537737462017456, Bool[1, 1, 1])
(t, η, λ, x) = (3, 0.16759036136579744, 0.9014899902066252, Bool[1, 1, 1])
(t, η, λ, x) = (4, 0.14409682402816418, 0.8598157009378707, Bool[1, 1, 1])
(t, η, λ, x) = (5, 0.12456251750964775, 0.8644362452103845, Bool[1, 1, 1])
(t, η, λ, x) = (6, 0.10774709002397113, 0.8650041134214054, Bool[1, 1, 1])
(t, η, λ, x) = (7, 0.09329138586429168, 0.8658367093119322, Bool[1, 1, 1])
(t, η, λ, x) = (8, 0.08085585077337948, 0.8667022150469302, Bool[1, 1, 1])
(t, η, λ, x) = (9, 0.07015150893870908, 0.8676120313832053, Bool[1, 1, 1])
(t, η, λ, x) = (10, 0.060931055972414, 0.8685637257731558, Bool[1, 1, 1])
(t, η, λ, x) = (11, 0.05298290181068721, 0.8695549578965898, Bool[1, 1, 1])
(t, η, λ, x) = (12, 0.04612599856416276, 0.8705827160802782, Bool[1, 1, 1])
(t, η, λ, x) = (13, 0.04020542076978306, 0.8716433686276952, Bool[1, 1, 1])
(t, η, λ, x) = (14, 0.035088585123295185, 0.8727326925444465, Bool[1, 1, 1])
(t, η, λ, x) = (15, 0.03066201714702989, 0.8738459256561328, Bool[1, 1, 1])
(t, η, λ, x) = (16, 0.02682858550713838, 0.8749778391451052, Bool[1, 1, 1])
(t, η, λ, x) = (17, 0.02350513622827459, 0.8761228288394293, Bool[1, 1, 1])
(t, η, λ, x) = (18, 0.020620468906519977, 0.8772750222019724, Bool[1, 1, 1])
(t, η, λ, x) = (19, 0.017270875833434222, 0.8375598009787911, Bool[0, 1, 1])
(t, η, λ, x) = (20, 0.012884293924819408, 0.7460127702312034, Bool[0, 1, 1])
(t, η, λ, x) = (21, 0.010885781082806259, 0.8448876707039915, Bool[0, 1, 1])
(t, η, λ, x) = (22, 0.009418989205449042, 0.8652561661676288, Bool[0, 1, 1])
(t, η, λ, x) = (23, 0.00819391251241007, 0.8699354393218495, Bool[0, 1, 1])
(t, η, λ, x) = (24, 0.0071428399902937235, 0.8717251959275318, Bool[0, 1, 1])
(t, η, λ, x) = (25, 0.006234435765422858, 0.8728231031207083, Bool[0, 1, 1])
(t, η, λ, x) = (26, 0.005447244380140326, 0.8737349433210273, Bool[0, 1, 1])
(t, η, λ, x) = (27, 0.004764153931626459, 0.8745988979300632, Bool[0, 1, 1])
(t, η, λ, x) = (28, 0.004170797624310516, 0.875454001732187, Bool[0, 1, 1])
(t, η, λ, x) = (29, 0.003654912252253696, 0.8763101405232765, Bool[0, 1, 1])
(t, η, λ, x) = (30, 0.0032059734746141344, 0.8771683841759166, Bool[0, 1, 1])
(t, η, λ, x) = (31, 0.0028149316304308357, 0.878027111802488, Bool[0, 1, 1])
(t, η, λ, x) = (32, 0.0024739980643820173, 0.8788838910461789, Bool[0, 1, 1])
(t, η, λ, x) = (33, 0.002176465343231272, 0.8797360735910411, Bool[0, 1, 1])
(t, η, λ, x) = (34, 0.0019165540305492675, 0.8805810009838572, Bool[0, 1, 1])
(t, η, λ, x) = (35, 0.0016892815616776616, 0.8814160909377172, Bool[0, 1, 1])
(t, η, λ, x) = (36, 0.0014903498818809164, 0.8822388852695568, Bool[0, 1, 1])
(t, η, λ, x) = (37, 0.0013160491165099537, 0.8830470834466173, Bool[0, 1, 1])
(t, η, λ, x) = (38, 0.0011631749672868302, 0.8838385685569758, Bool[0, 1, 1])
(t, η, λ, x) = (39, 0.0010289578682209104, 0.8846114274802624, Bool[0, 1, 1])
(t, η, λ, x) = (40, 0.0009110022187093137, 0.8853639656640709, Bool[0, 1, 1])
(t, η, λ, x) = (41, 0.0008072342528612961, 0.8860947166571849, Bool[0, 1, 1])
(t, η, λ, x) = (42, 0.0007158573103971952, 0.8868024465758122, Bool[0, 1, 1])
(t, η, λ, x) = (43, 0.0006353134510969796, 0.8874861538320735, Bool[0, 1, 1])
(t, η, λ, x) = (44, 0.0005642505060389109, 0.8881450645577138, Bool[0, 1, 1])
(t, η, λ, x) = (45, 0.0005014937884990328, 0.8887786242666649, Bool[0, 1, 1])
(t, η, λ, x) = (46, 0.0004460217984818055, 0.8893864863545876, Bool[0, 1, 1])
(t, η, λ, x) = (47, 0.00039694535010575466, 0.8899684980799144, Bool[0, 1, 1])
(t, η, λ, x) = (48, 0.0003534896327259612, 0.8905246846493707, Bool[0, 1, 1])
(t, η, λ, x) = (49, 0.0003149787867114732, 0.891055232037475, Bool[0, 1, 1])
(t, η, λ, x) = (50, 0.0002808226348305722, 0.8915604690794979, Bool[0, 1, 1])
(t, η, λ, x) = (51, 0.0002505052616968053, 0.8920408493707848, Bool[0, 1, 1])
(t, η, λ, x) = (52, 0.00022357517786046111, 0.8924969333820278, Bool[0, 1, 1])
(t, η, λ, x) = (53, 0.00019963684297218446, 0.8929293711522074, Bool[0, 1, 1])
(t, η, λ, x) = (54, 0.00017834335487937705, 0.8933388858700082, Bool[0, 1, 1])
(t, η, λ, x) = (55, 0.00015939013928790912, 0.8937262585180873, Bool[0, 1, 1])
(t, η, λ, x) = (56, 0.00014250949842570305, 0.8940923137552802, Bool[0, 1, 1])
(t, η, λ, x) = (57, 0.00012746589751478347, 0.8944379071072057, Bool[0, 1, 1])
(t, η, λ, x) = (58, 0.00011405188530486061, 0.8947639135529006, Bool[0, 1, 1])
(t, η, λ, x) = (59, 0.00010208455982658721, 0.895071217400004, Bool[0, 1, 1])
(t, η, λ, x) = (60, 9.140250330976317e-5, 0.8953607035680046, Bool[0, 1, 1])
(t, η, λ, x) = (61, 8.186312110373301e-5, 0.8956332500686421, Bool[0, 1, 1])
(t, η, λ, x) = (62, 7.33403287819916e-5, 0.8958897216862555, Bool[0, 1, 1])
(t, η, λ, x) = (63, 6.572253958952334e-5, 0.8961309647913827, Bool[0, 1, 1])
(t, η, λ, x) = (64, 5.89109111998203e-5, 0.896357803087864, Bool[0, 1, 1])
(t, η, λ, x) = (65, 5.281781658642279e-5, 0.8965710343075444, Bool[0, 1, 1])
(t, η, λ, x) = (66, 4.736550878618238e-5, 0.8967714276617416, Bool[0, 1, 1])
(t, η, λ, x) = (67, 4.2484953594519214e-5, 0.8969597220269502, Bool[0, 1, 1])
(t, η, λ, x) = (68, 3.811480786828639e-5, 0.8971366246991359, Bool[0, 1, 1])
(t, η, λ, x) = (69, 3.420052422935741e-5, 0.8973028106961579, Bool[0, 1, 1])
(t, η, λ, x) = (70, 3.069356562284897e-5, 0.897458922471776, Bool[0, 1, 1])
(t, η, λ, x) = (71, 2.7550715466423874e-5, 0.8976055700063243, Bool[0, 1, 1])
(t, η, λ, x) = (72, 2.4733471080580328e-5, 0.8977433312293858, Bool[0, 1, 1])
(t, η, λ, x) = (73, 2.2207509760694406e-5, 0.8978727526089454, Bool[0, 1, 1])
(t, η, λ, x) = (74, 1.9942218293667264e-5, 0.8979943500447523, Bool[0, 1, 1])
(t, η, λ, x) = (75, 1.7910277947624822e-5, 0.8981086097784973, Bool[0, 1, 1])
(t, η, λ, x) = (76, 1.6087298029146785e-5, 0.8982159895112185, Bool[0, 1, 1])
(t, η, λ, x) = (77, 1.4451492010725856e-5, 0.8983169196308047, Bool[0, 1, 1])
(t, η, λ, x) = (78, 1.2983391012013096e-5, 0.8984118042882258, Bool[0, 1, 1])
(t, η, λ, x) = (79, 1.1665590104379513e-5, 0.8985010228518677, Bool[0, 1, 1])
(t, η, λ, x) = (80, 1.0482523478393217e-5, 0.8985849309464297, Bool[0, 1, 1])
(t, η, λ, x) = (81, 9.420265030608289e-6, 0.898663861810138, Bool[0, 1, 1])
(t, η, λ, x) = (82, 8.466351355174962e-6, 0.8987381276074639, Bool[0, 1, 1])
(t, η, λ, x) = (83, 7.6096245024206816e-6, 0.8988080205021711, Bool[0, 1, 1])
(t, η, λ, x) = (84, 6.840092197987819e-6, 0.898873813788306, Bool[0, 1, 1])
(t, η, λ, x) = (85, 6.148803501188889e-6, 0.8989357633216861, Bool[0, 1, 1])
(t, η, λ, x) = (86, 5.527738119394225e-6, 0.8989941080936186, Bool[0, 1, 1])
(t, η, λ, x) = (87, 4.969707825721918e-6, 0.8990490718591675, Bool[0, 1, 1])
(t, η, λ, x) = (88, 4.4682685979236636e-6, 0.8991008635954543, Bool[0, 1, 1])
(t, η, λ, x) = (89, 4.017642274338246e-6, 0.8991496787380201, Bool[0, 1, 1])
(t, η, λ, x) = (90, 3.612646657908332e-6, 0.8991957001705381, Bool[0, 1, 1])
(t, η, λ, x) = (91, 3.248633123792774e-6, 0.899239098482353, Bool[0, 1, 1])
(t, η, λ, x) = (92, 2.9214309044314802e-6, 0.899280033511668, Bool[0, 1, 1])
(t, η, λ, x) = (93, 2.6272973104026558e-6, 0.8993186545734636, Bool[0, 1, 1])
(t, η, λ, x) = (94, 2.3628732389864177e-6, 0.8993551013928786, Bool[0, 1, 1])
(t, η, λ, x) = (95, 2.1251433919325263e-6, 0.8993895046372151, Bool[0, 1, 1])
(t, η, λ, x) = (96, 1.911400690588448e-6, 0.8994219862266759, Bool[0, 1, 1])
(t, η, λ, x) = (97, 1.719214437514534e-6, 0.8994526610667137, Bool[0, 1, 1])
(t, η, λ, x) = (98, 1.546401814675393e-6, 0.8994816358749431, Bool[0, 1, 1])
(t, η, λ, x) = (99, 1.3910023666258909e-6, 0.8995090108051106, Bool[0, 1, 1])
(t, η, λ, x) = (100, 1.2512551472045525e-6, 0.8995348801883647, Bool[0, 1, 1])
(t, η, λ, x) = (101, 1.125578243696548e-6, 0.8995593314530764, Bool[0, 1, 1])
(t, η, λ, x) = (102, 1.0125504310783384e-6, 0.8995824472877058, Bool[0, 1, 1])
(t, η, λ, x) = (103, 9.108947267038113e-7, 0.8996043048776676, Bool[0, 1, 1])
(t, η, λ, x) = (104, 8.194636473887703e-7, 0.8996249768116499, Bool[0, 1, 1])
(t, η, λ, x) = (105, 7.372259885945101e-7, 0.8996445308387854, Bool[0, 1, 1])
(t, η, λ, x) = (106, 6.632549675674283e-7, 0.8996630311851805, Bool[0, 1, 1])
(t, η, λ, x) = (107, 5.967175852009782e-7, 0.8996805367165446, Bool[0, 1, 1])
(t, η, λ, x) = (108, 5.36865083791614e-7, 0.8996971048051055, Bool[0, 1, 1])
(t, η, λ, x) = (109, 4.830243810160599e-7, 0.8997127874375742, Bool[0, 1, 1])
(t, η, λ, x) = (110, 4.345903838802645e-7, 0.8997276347957578, Bool[0, 1, 1])
(t, η, λ, x) = (111, 3.9101908806700527e-7, 0.8997416937203477, Bool[0, 1, 1])
(t, η, λ, x) = (112, 3.518213821564744e-7, 0.899755006579592, Bool[0, 1, 1])
(t, η, λ, x) = (113, 3.165574862840755e-7, 0.8997676160094354, Bool[0, 1, 1])
(t, η, λ, x) = (114, 2.8483195590408325e-7, 0.8997795605708024, Bool[0, 1, 1])
(t, η, λ, x) = (115, 2.5628919521513045e-7, 0.8997908763489848, Bool[0, 1, 1])
(t, η, λ, x) = (116, 2.30609427598751e-7, 0.8998015987571238, Bool[0, 1, 1])
(t, η, λ, x) = (117, 2.0750507476801712e-7, 0.8998117593399767, Bool[0, 1, 1])
(t, η, λ, x) = (118, 1.867175043011134e-7, 0.8998213875485048, Bool[0, 1, 1])
(t, η, λ, x) = (119, 1.6801410819255447e-7, 0.8998305157378467, Bool[0, 1, 1])
(t, η, λ, x) = (120, 1.5118567503263372e-7, 0.8998391662405258, Bool[0, 1, 1])
(t, η, λ, x) = (121, 1.3604403188309186e-7, 0.89984736883125, Bool[0, 1, 1])
(t, η, λ, x) = (122, 1.2241992185235918e-7, 0.8998551436461364, Bool[0, 1, 1])
(t, η, λ, x) = (123, 1.1016109942817084e-7, 0.899862520423982, Bool[0, 1, 1])
(t, η, λ, x) = (124, 9.913061452943667e-8, 0.8998695096908826, Bool[0, 1, 1])
(t, η, λ, x) = (125, 8.920527486552291e-8, 0.8998761410788345, Bool[0, 1, 1])
(t, η, λ, x) = (126, 8.027425975589907e-8, 0.8998824327026921, Bool[0, 1, 1])
(t, η, λ, x) = (127, 7.223787502749915e-8, 0.8998883981884448, Bool[0, 1, 1])
(t, η, λ, x) = (128, 6.500643421952519e-8, 0.8998940541202087, Bool[0, 1, 1])
(t, η, λ, x) = (129, 5.8499252653384375e-8, 0.8998994231222371, Bool[0, 1, 1])
(t, η, λ, x) = (130, 5.2643741752926884e-8, 0.8999045178379944, Bool[0, 1, 1])
(t, η, λ, x) = (131, 4.737459543407698e-8, 0.8999093502209701, Bool[0, 1, 1])
(t, η, λ, x) = (132, 4.263305859122131e-8, 0.8999139348967391, Bool[0, 1, 1])
(t, η, λ, x) = (133, 3.836626887362867e-8, 0.8999182826992567, Bool[0, 1, 1])
(t, η, λ, x) = (134, 3.452666536006114e-8, 0.899922415541254, Bool[0, 1, 1])
(t, η, λ, x) = (135, 3.107145522216428e-8, 0.8999263293496716, Bool[0, 1, 1])
(t, η, λ, x) = (136, 2.79621362688457e-8, 0.8999300505532615, Bool[0, 1, 1])
(t, η, λ, x) = (137, 2.51640653815748e-8, 0.8999335794529977, Bool[0, 1, 1])
(t, η, λ, x) = (138, 2.2646071542292952e-8, 0.8999369219122467, Bool[0, 1, 1])
(t, η, λ, x) = (139, 2.038010828548996e-8, 0.8999401175355661, Bool[0, 1, 1])
(t, η, λ, x) = (140, 1.8340938140613602e-8, 0.8999431153009041, Bool[0, 1, 1])
(t, η, λ, x) = (141, 1.65058537950567e-8, 0.8999459934116812, Bool[0, 1, 1])
(t, η, λ, x) = (142, 1.4854421672221292e-8, 0.8999487004222713, Bool[0, 1, 1])
(t, η, λ, x) = (143, 1.3368256088350987e-8, 0.8999512995750263, Bool[0, 1, 1])
(t, η, λ, x) = (144, 1.203081211358917e-8, 0.8999537437102766, Bool[0, 1, 1])
(t, η, λ, x) = (145, 1.0827202303874519e-8, 0.8999560629531288, Bool[0, 1, 1])
(t, η, λ, x) = (146, 9.744030361202752e-9, 0.8999582798703084, Bool[0, 1, 1])
(t, η, λ, x) = (147, 8.769241188105215e-9, 0.8999603719443652, Bool[0, 1, 1])
(t, η, λ, x) = (148, 7.891987119041668e-9, 0.8999623741386571, Bool[0, 1, 1])
(t, η, λ, x) = (149, 7.102506215618674e-9, 0.8999642432869479, Bool[0, 1, 1])
(t, η, λ, x) = (150, 6.392014657995406e-9, 0.8999660773177683, Bool[0, 1, 1])
(t, η, λ, x) = (151, 5.752606932156785e-9, 0.8999677316073075, Bool[0, 1, 1])
(t, η, λ, x) = (152, 5.177170207804122e-9, 0.8999693997627405, Bool[0, 1, 1])
(t, η, λ, x) = (153, 4.659302522883407e-9, 0.899970898360638, Bool[0, 1, 1])
(t, η, λ, x) = (154, 4.193243568683187e-9, 0.8999723774296159, Bool[0, 1, 1])
(t, η, λ, x) = (155, 3.773809125162774e-9, 0.8999737466592886, Bool[0, 1, 1])
(t, η, λ, x) = (156, 3.396334198748251e-9, 0.8999750877972024, Bool[0, 1, 1])
(t, η, λ, x) = (157, 3.0566203533866907e-9, 0.8999763199137574, Bool[0, 1, 1])
(t, η, λ, x) = (158, 2.7508895007111417e-9, 0.8999774858082052, Bool[0, 1, 1])
(t, η, λ, x) = (159, 2.4757417923561597e-9, 0.8999786402602312, Bool[0, 1, 1])
(t, η, λ, x) = (160, 2.2281174996317412e-9, 0.8999797581924911, Bool[0, 1, 1])
(t, η, λ, x) = (161, 2.0052627941514338e-9, 0.8999807211616351, Bool[0, 1, 1])
(t, η, λ, x) = (162, 1.804699650779068e-9, 0.8999816163959508, Bool[0, 1, 1])
(t, η, λ, x) = (163, 1.624198471480393e-9, 0.8999827039248582, Bool[0, 1, 1])
(t, η, λ, x) = (164, 1.461751750370431e-9, 0.8999834540159994, Bool[0, 1, 1])
(t, η, λ, x) = (165, 1.3155535652306779e-9, 0.8999842585427353, Bool[0, 1, 1])
(t, η, λ, x) = (166, 1.1839787037968147e-9, 0.8999851736095656, Bool[0, 1, 1])
(t, η, λ, x) = (167, 1.0655641271312262e-9, 0.8999858897074301, Bool[0, 1, 1])
(t, η, λ, x) = (168, 9.589932407438448e-10, 0.8999864168904619, Bool[0, 1, 1])
(t, η, λ, x) = (169, 8.630819122830559e-10, 0.8999874823034257, Bool[0, 1, 1])
(t, η, λ, x) = (170, 7.767631512766277e-10, 0.8999877534473006, Bool[0, 1, 1])
(t, η, λ, x) = (171, 6.990778180591958e-10, 0.8999883901678982, Bool[0, 1, 1])
(t, η, λ, x) = (172, 6.291623628993668e-10, 0.8999890236055111, Bool[0, 1, 1])
(t, η, λ, x) = (173, 5.66239670530316e-10, 0.8999897386120105, Bool[0, 1, 1])
(t, η, λ, x) = (174, 5.096100629909202e-10, 0.8999900386944649, Bool[0, 1, 1])
(t, η, λ, x) = (175, 4.5864431975510164e-10, 0.8999907047818115, Bool[0, 1, 1])
(t, η, λ, x) = (176, 4.1277581402879645e-10, 0.8999911178431312, Bool[0, 1, 1])
(t, η, λ, x) = (177, 3.714946880368441e-10, 0.8999914127985404, Bool[0, 1, 1])
(t, η, λ, x) = (178, 3.343420969827624e-10, 0.8999915954373028, Bool[0, 1, 1])
(t, η, λ, x) = (179, 3.009055409175282e-10, 0.8999929821372208, Bool[0, 1, 1])
(t, η, λ, x) = (180, 2.7081276787039353e-10, 0.8999926257410379, Bool[0, 1, 1])
(t, η, λ, x) = (181, 2.4372955359415736e-10, 0.8999928456504763, Bool[0, 1, 1])
(t, η, λ, x) = (182, 2.1935501023653052e-10, 0.899993484589014, Bool[0, 1, 1])
(t, η, λ, x) = (183, 1.9741818665165739e-10, 0.8999939706815054, Bool[0, 1, 1])
(t, η, λ, x) = (184, 1.7767514529148822e-10, 0.8999938065736285, Bool[0, 1, 1])
(t, η, λ, x) = (185, 1.5990671892737527e-10, 0.8999948679655636, Bool[0, 1, 1])
(t, η, λ, x) = (186, 1.4391508762525982e-10, 0.8999940001934605, Bool[0, 1, 1])
(t, η, λ, x) = (187, 1.2952278282523834e-10, 0.8999944687001993, Bool[0, 1, 1])
(t, η, λ, x) = (188, 1.165700802853462e-10, 0.8999967244575893, Bool[0, 1, 1])
(t, η, λ, x) = (189, 1.0491230362949172e-10, 0.8999934063070216, Bool[0, 1, 1])
(t, η, λ, x) = (190, 9.442073070831556e-11, 0.8999967348136002, Bool[0, 1, 1])
3-element Vector{Bool}:
0
1
1
- Implement Policy Iteration and compare rates of convergence.
# we want to iterate on bellman_step to find a fixed
# We can recycle the code from vfi
function policy_iteration(model; T=1000, τ=1e-8)
V_U_0 = zeros(3)
V_E_0 = zeros(3)
local x # to access x outside of the loop
η_0 = NaN
for t=1:T
# DIFF: change the output names (we don't reuse the values)
V_U_1_t, V_E_1_t, x = bellman_step(V_U_0, V_E_0, model)
V_U_1, V_E_1 = policy_eval(x, model)
η = norm( [V_U_1, V_E_1] .- [V_U_0, V_E_0])
λ = η/η_0
η_0 = η
# @show (t, η, λ, x)
if η<τ
break
end
V_U_0, V_E_0 = V_U_1, V_E_1
end
return V_U_0, V_E_0, x
endpolicy_iteration (generic function with 1 method)
policy_iteration(model) ## bug ([-6.931471765376201, -6.931471765376201, -6.931471765376201], [-2.8777706281225095, -2.151146382206878, -1.4938347973498374], Bool[1, 1, 1])
- Discuss the Effects of the Parameters
vfi(model)[3]
# what could make me reject the middle offer ?3-element Vector{Bool}:
0
1
1
# increase unemployment benefits
model.w3-element Vector{Float64}:
0.9
1.0
1.1
using Plotsvec = range(start=0.2, stop=1.1; length=100)
accepts = [
sum(
vfi(
merge(
model,
(;cbar=cbar)
)
)[3]
) for cbar in vec]
plot(vec, accepts)
vline!([0.9, 1.0, 1.1])vec = range(start=0.8, stop=0.990; length=100)
accepts = [
sum(
vfi(
merge(
model,
(;β=β)
)
)[3]
) for β in vec]
plot(vec, accepts)
# vline!([0.9, 1.0, 1.1])
vec = range(start=0.001, stop=0.2; length=100)
accepts = [
sum(
vfi(
merge(
model,
(;λ)
)
)[3]
) for λ in vec]
plot(vec, accepts)
vec = range(start=0.001, stop=0.2; length=100)
accepts = [
sum(
vfi(
merge(
model,
(;λ=λ, cbar=0.8)
)
)[3]
) for λ in vec]
plot!(vec, accepts)
# vline!([0.9, 1.0, 1.1])