McCall Model

Author

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(w_t) \right\}\)

What are the states, the controls, the reward of this problem ? Write down the Bellman equation.

The states are: - unemployed, \(w=w_1\) - unemployed, \(w=w_2\) - unemployed, \(w=w_3\) - employed, \(w=w_1\) - employed, \(w=w_2\) - employed, \(w=w_3\)

The state-space can also be represented as \((employed,unemployed)\times (w_1, w_2, w_3)\)

The controls are \(accept/reject\) when unemployed, the empty set otherwise.

The reward is \(U(\underbar{c})\) if unemployed, \(U(\underbar{w})\) if employed at wage \(w\).

Define a parameter structure for the model.

m = (;
    wages=[0.9, 1.0, 1.1],
    probas=[1/3, 1/3, 1/3],
    β = 0.9,
    λ = 0.01,
    cbar = 0.8,
    punishment=0.0
)
U(x) = log(x)
U (generic function with 1 method)
V_U_0 = [0.0,0.0,0.0]
V_E_0 = [0.0,0.0,0.0]
x_0 = [false, false, false]
3-element Vector{Bool}:
 0
 0
 0

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.

function value_update(V_U, V_E, x, m)

    # compute the continuation value of being unemployed tomorrow
    
    (;λ, β, cbar, wages, probas, punishment) = m

    cont_V_U = sum(   probas[i]*V_U[i]  for i=1:3   )

    n_V_E = zeros(3)
    for i=1:3
        n_V_E[i] = U(wages[i]) + β*(1-λ)*V_E[i] + β*λ*cont_V_U
    end

    n_V_U = zeros(3)
    for i=1:3
        if x[i] # if accept
            n_V_U[i] = U(cbar) + β*V_E[i]
        else # if reject
            n_V_U[i] = U(cbar) + β*cont_V_U - punishment
        end

    end

    # vector version
    # n_V_E = U.(wages) + β*(1-λ)*V_E

    return n_V_U, n_V_E

end

value_update(V_U_0, V_E_0, x_0, m)
([-0.2231435513142097, -0.2231435513142097, -0.2231435513142097], [-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.

distance(v1::Vector, v2::Vector) = maximum(abs.(v2-v1))
distance (generic function with 1 method)
function policy_eval(x, m; T=1000, τ_η=1e-10, verbose=false)

    V_U_0 = [0.0,0.0,0.0]
    V_E_0 = [0.0,0.0,0.0]

    for t=1:T
        V_U_1, V_E_1 = value_update(V_U_0, V_E_0, x, m)
        η = distance( [V_U_0; V_E_0], [V_U_1; V_E_1] )

        V_U_0, V_E_0 = V_U_1, V_E_1

        if verbose

            println("Iteration $(t): $(η)")
        end

        if η<τ_η
            return V_U_0, V_E_0
        end

    end

    error("No convergence")

    
end
policy_eval (generic function with 1 method)
policy_eval(x, m; T=1000, verbose=true);
Iteration 1: 0.2231435513142097
Iteration 2: 0.20082919618278872
Iteration 3: 0.18074627656450992
Iteration 4: 0.16267164890805885
Iteration 5: 0.14640448401725292
Iteration 6: 0.13176403561552763
Iteration 7: 0.11858763205397493
Iteration 8: 0.10672886884857746
Iteration 9: 0.09605598196371967
Iteration 10: 0.08645038376734782
Iteration 11: 0.0778053453906129
Iteration 12: 0.07002481085155154
Iteration 13: 0.06302232976639632
Iteration 14: 0.05672009678975676
Iteration 15: 0.051048087110781015
Iteration 16: 0.045943278399702914
Iteration 17: 0.041348950559732645
Iteration 18: 0.03721405550375967
Iteration 19: 0.033492649953383635
Iteration 20: 0.03014338495804525
Iteration 21: 0.02712904646224068
Iteration 22: 0.0244161418160167
Iteration 23: 0.021974527634414542
Iteration 24: 0.019777074870973355
Iteration 25: 0.01779936738387633
Iteration 26: 0.016019430645488608
Iteration 27: 0.014417487580939525
Iteration 28: 0.012975738822845528
Iteration 29: 0.011678164940561508
Iteration 30: 0.010510348446505002
Iteration 31: 0.009459313601854813
Iteration 32: 0.008513382241669198
Iteration 33: 0.007662044017502367
Iteration 34: 0.006895839615752131
Iteration 35: 0.006206255654176651
Iteration 36: 0.005585630088758897
Iteration 37: 0.005027067079883096
Iteration 38: 0.004524360371894964
Iteration 39: 0.004071924334705379
Iteration 40: 0.003664731901234841
Iteration 41: 0.0032982587111107797
Iteration 42: 0.002968432840000368
Iteration 43: 0.002671589555999887
Iteration 44: 0.002404430600400076
Iteration 45: 0.0021639875403600684
Iteration 46: 0.0019475887863240615
Iteration 47: 0.0017528299076916554
Iteration 48: 0.0015775469169225786
Iteration 49: 0.0014197922252305872
Iteration 50: 0.0012778130027073509
Iteration 51: 0.001150031702436216
Iteration 52: 0.0010350285321925057
Iteration 53: 0.0009315256789736992
Iteration 54: 0.0008383731110761516
Iteration 55: 0.0007545357999685365
Iteration 56: 0.0006790822199720381
Iteration 57: 0.0006111739979743902
Iteration 58: 0.0005500565981773065
Iteration 59: 0.0004950509383596646
Iteration 60: 0.0004455458445233873
Iteration 61: 0.000400991260071315
Iteration 62: 0.0003608921340640947
Iteration 63: 0.0003248029206575076
Iteration 64: 0.00029232262859180125
Iteration 65: 0.0002630903657325767
Iteration 66: 0.00023678132915927463
Iteration 67: 0.00021310319624356922
Iteration 68: 0.00019179287661863498
Iteration 69: 0.00017261358895748202
Iteration 70: 0.00015535223006102328
Iteration 71: 0.0001398170070556759
Iteration 72: 0.0001258353063500195
Iteration 73: 0.00011325177571475109
Iteration 74: 0.00010192659814345362
Iteration 75: 9.173393832861976e-5
Iteration 76: 8.256054449606864e-5
Iteration 77: 7.430449004663942e-5
Iteration 78: 6.687404104166461e-5
Iteration 79: 6.018663693785342e-5
Iteration 80: 5.4167973244201306e-5
Iteration 81: 4.875117591973677e-5
Iteration 82: 4.387605832745223e-5
Iteration 83: 3.948845249501787e-5
Iteration 84: 3.553960724556049e-5
Iteration 85: 3.198564652073799e-5
Iteration 86: 2.8787081868930642e-5
Iteration 87: 2.590837368199317e-5
Iteration 88: 2.3317536313349763e-5
Iteration 89: 2.098578268228124e-5
Iteration 90: 1.888720441423075e-5
Iteration 91: 1.6998483972852085e-5
Iteration 92: 1.5298635575256014e-5
Iteration 93: 1.3768772017641595e-5
Iteration 94: 1.2391894816055071e-5
Iteration 95: 1.1152705334360746e-5
Iteration 96: 1.0037434800658218e-5
Iteration 97: 9.033691320770032e-6
Iteration 98: 8.130322188826256e-6
Iteration 99: 7.31728996994363e-6
Iteration 100: 6.585560972993676e-6
Iteration 101: 5.927004875783126e-6
Iteration 102: 5.334304387982769e-6
Iteration 103: 4.8008739494953545e-6
Iteration 104: 4.3207865543237745e-6
Iteration 105: 3.888707898802579e-6
Iteration 106: 3.499837109011139e-6
Iteration 107: 3.149853398110025e-6
Iteration 108: 2.8348680585210673e-6
Iteration 109: 2.5513812520472356e-6
Iteration 110: 2.2962431271977835e-6
Iteration 111: 2.0666188143003694e-6
Iteration 112: 1.8599569333588306e-6
Iteration 113: 1.6739612398453119e-6
Iteration 114: 1.5065651157719628e-6
Iteration 115: 1.3559086040615398e-6
Iteration 116: 1.2203177437442037e-6
Iteration 117: 1.0982859692809654e-6
Iteration 118: 9.884573723972778e-7
Iteration 119: 8.896116354684125e-7
Iteration 120: 8.006504716995266e-7
Iteration 121: 7.205854246628007e-7
Iteration 122: 6.485268819744761e-7
Iteration 123: 5.836741938658463e-7
Iteration 124: 5.253067745236706e-7
Iteration 125: 4.7277609693807676e-7
Iteration 126: 4.2549848755513153e-7
Iteration 127: 3.829486385775738e-7
Iteration 128: 3.4465377485304316e-7
Iteration 129: 3.1018839719010316e-7
Iteration 130: 2.7916955769313745e-7
Iteration 131: 2.5125260183500586e-7
Iteration 132: 2.2612734174032312e-7
Iteration 133: 2.0351460738865512e-7
Iteration 134: 1.8316314687183421e-7
Iteration 135: 1.6484683174056158e-7
Iteration 136: 1.4836214878855003e-7
Iteration 137: 1.335259338652861e-7
Iteration 138: 1.2017334061198426e-7
Iteration 139: 1.0815600637315015e-7
Iteration 140: 9.734040595787974e-8
Iteration 141: 8.760636527327392e-8
Iteration 142: 7.884572861271977e-8
Iteration 143: 7.096115606231024e-8
Iteration 144: 6.386503992317216e-8
Iteration 145: 5.747853615289955e-8
Iteration 146: 5.173068284847204e-8
Iteration 147: 4.655761420835347e-8
Iteration 148: 4.190185309838057e-8
Iteration 149: 3.771166756649791e-8
Iteration 150: 3.3940500632212434e-8
Iteration 151: 3.054645070221795e-8
Iteration 152: 2.7491805720814e-8
Iteration 153: 2.4742625281959363e-8
Iteration 154: 2.2268362709354506e-8
Iteration 155: 2.004152621637445e-8
Iteration 156: 1.803737381678161e-8
Iteration 157: 1.6233636213058844e-8
Iteration 158: 1.4610272991433249e-8
Iteration 159: 1.3149245692289924e-8
Iteration 160: 1.183432107865201e-8
Iteration 161: 1.0650888615515441e-8
Iteration 162: 9.585800153644186e-9
Iteration 163: 8.62721982741732e-9
Iteration 164: 7.76449748940422e-9
Iteration 165: 6.988048362188692e-9
Iteration 166: 6.289242904244929e-9
Iteration 167: 5.660318880273962e-9
Iteration 168: 5.094287214291171e-9
Iteration 169: 4.584858270817449e-9
Iteration 170: 4.126372576962467e-9
Iteration 171: 3.7137355413108253e-9
Iteration 172: 3.3423619427708218e-9
Iteration 173: 3.0081257484937396e-9
Iteration 174: 2.7073130404176027e-9
Iteration 175: 2.4365816031490795e-9
Iteration 176: 2.1929236204698555e-9
Iteration 177: 1.973631036378265e-9
Iteration 178: 1.7762680215582805e-9
Iteration 179: 1.5986407753132426e-9
Iteration 180: 1.4387770974622072e-9
Iteration 181: 1.2948997429873543e-9
Iteration 182: 1.165409546644014e-9
Iteration 183: 1.0488685475706916e-9
Iteration 184: 9.439817816314644e-10
Iteration 185: 8.49583514650476e-10
Iteration 186: 7.646252520032704e-10
Iteration 187: 6.881624159404964e-10
Iteration 188: 6.193463519821307e-10
Iteration 189: 5.574114503303917e-10
Iteration 190: 5.016707049776414e-10
Iteration 191: 4.5150372329771926e-10
Iteration 192: 4.063531733322634e-10
Iteration 193: 3.6571812245256297e-10
Iteration 194: 3.2914604375378076e-10
Iteration 195: 2.9623148378732367e-10
Iteration 196: 2.6660851304427524e-10
Iteration 197: 2.3994761733092673e-10
Iteration 198: 2.1595258914430815e-10
Iteration 199: 1.943574190477193e-10
Iteration 200: 1.7492185477863131e-10
Iteration 201: 1.574296248918472e-10
Iteration 202: 1.4168666240266248e-10
Iteration 203: 1.2751799616239623e-10
Iteration 204: 1.1476597450155168e-10
Iteration 205: 1.0328937705139651e-10
Iteration 206: 9.296075020870376e-11

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.

[true, false]
2-element Vector{Bool}:
 1
 0
zeros(Bool, 3)
3-element Vector{Bool}:
 0
 0
 0
function bellman_step(V_U, V_E, m;)

    # compute the continuation value of being unemployed tomorrow
    
    (;λ, β, cbar, wages, probas, punishment) = m

    cont_V_U = sum(   probas[i]*V_U[i]  for i=1:3   )

    n_V_E = zeros(3)
    for i=1:3
        n_V_E[i] = U(wages[i]) + β*(1-λ)*V_E[i] + β*λ*cont_V_U
    end

    n_V_U = zeros(3)
    x = zeros(Bool, 3)
    for i=1:3
        v_accept = U(cbar) + β*V_E[i]
        v_reject = U(cbar) + β*cont_V_U
        if v_accept>v_reject
            n_V_U[i] = v_accept
            x[i] = true
        else v_accept>v_reject
            n_V_U[i] = v_reject - punishment
            x[i] = false
        end
    end

    # vector version
    # n_V_E = U.(wages) + β*(1-λ)*V_E

    return n_V_U, n_V_E, x

end
bellman_step (generic function with 1 method)
bellman_step(V_U_0, V_E_0, m);

Implement Value Function

function value_function_iteration(m; T=1000, τ_η=1e-10, verbose=false)

    V_U_0 = [0.0,0.0,0.0]
    V_E_0 = [0.0,0.0,0.0]

    for t=1:T

        V_U_1, V_E_1, x = bellman_step(V_U_0, V_E_0, m)
        η = distance( [V_U_0; V_E_0], [V_U_1; V_E_1] )

        V_U_0, V_E_0 = V_U_1, V_E_1

        if verbose
            

            println("Iteration $(t): $(η) : $(x)")
        end

        if η<τ_η
            return V_U_0, V_E_0, x
        end

    end

    error("No convergence")

    
end
value_function_iteration (generic function with 1 method)
value_function_iteration(m, verbose=true)
Iteration 1: 0.2231435513142097 : Bool[0, 0, 0]
Iteration 2: 0.09588451141295112 : Bool[1, 1, 1]
Iteration 3: 0.08629606027165598 : Bool[1, 1, 1]
Iteration 4: 0.07618551515584138 : Bool[0, 1, 1]
Iteration 5: 0.06776620825824747 : Bool[0, 1, 1]
Iteration 6: 0.06017209711438726 : Bool[0, 1, 1]
Iteration 7: 0.05339623450323355 : Bool[0, 1, 1]
Iteration 8: 0.04737184303259734 : Bool[0, 1, 1]
Iteration 9: 0.042021967211819056 : Bool[0, 1, 1]
Iteration 10: 0.037273116454005106 : Bool[0, 1, 1]
Iteration 11: 0.033058519006658904 : Bool[0, 1, 1]
Iteration 12: 0.029318432293365393 : Bool[0, 1, 1]
Iteration 13: 0.025999667465517406 : Bool[0, 1, 1]
Iteration 14: 0.023054948225977645 : Bool[0, 1, 1]
Iteration 15: 0.020442277375651963 : Bool[0, 1, 1]
Iteration 16: 0.018124355344447007 : Bool[0, 1, 1]
Iteration 17: 0.01606805806256495 : Bool[0, 1, 1]
Iteration 18: 0.014243971400986988 : Bool[0, 1, 1]
Iteration 19: 0.01262597700763557 : Bool[0, 0, 1]
Iteration 20: 0.011258315445731748 : Bool[0, 0, 1]
Iteration 21: 0.010085339325077824 : Bool[0, 0, 1]
Iteration 22: 0.009048942948106098 : Bool[0, 0, 1]
Iteration 23: 0.008127581948617513 : Bool[0, 0, 1]
Iteration 24: 0.007305091931290697 : Bool[0, 0, 1]
Iteration 25: 0.006568831231085204 : Bool[0, 0, 1]
Iteration 26: 0.005908548967294203 : Bool[0, 0, 1]
Iteration 27: 0.005315685178421625 : Bool[0, 0, 1]
Iteration 28: 0.004782929405322878 : Bool[0, 0, 1]
Iteration 29: 0.004303934796933695 : Bool[0, 0, 1]
Iteration 30: 0.0038731266315371604 : Bool[0, 0, 1]
Iteration 31: 0.003485568889132873 : Bool[0, 0, 1]
Iteration 32: 0.0031368671583823504 : Bool[0, 0, 1]
Iteration 33: 0.002823094841018392 : Bool[0, 0, 1]
Iteration 34: 0.0025407347664148094 : Bool[0, 0, 1]
Iteration 35: 0.0022866313907867752 : Bool[0, 0, 1]
Iteration 36: 0.0020579505814068977 : Bool[0, 0, 1]
Iteration 37: 0.0018521450801185502 : Bool[0, 0, 1]
Iteration 38: 0.0016669244002061046 : Bool[0, 0, 1]
Iteration 39: 0.0015002283125924443 : Bool[0, 0, 1]
Iteration 40: 0.0013502033256055368 : Bool[0, 0, 1]
Iteration 41: 0.0012151817190101388 : Bool[0, 0, 1]
Iteration 42: 0.0010936627941545707 : Bool[0, 0, 1]
Iteration 43: 0.0009842960697428182 : Bool[0, 0, 1]
Iteration 44: 0.0008858661997758199 : Bool[0, 0, 1]
Iteration 45: 0.0007972794243694681 : Bool[0, 0, 1]
Iteration 46: 0.0007175513900742336 : Bool[0, 0, 1]
Iteration 47: 0.0006457961967782921 : Bool[0, 0, 1]
Iteration 48: 0.0005812165450161944 : Bool[0, 0, 1]
Iteration 49: 0.0005230948715527761 : Bool[0, 0, 1]
Iteration 50: 0.0004707853731908962 : Bool[0, 0, 1]
Iteration 51: 0.0004237068292487489 : Bool[0, 0, 1]
Iteration 52: 0.00038133614240976055 : Bool[0, 0, 1]
Iteration 53: 0.0003432025258554017 : Bool[0, 0, 1]
Iteration 54: 0.0003088822719028439 : Bool[0, 0, 1]
Iteration 55: 0.0002779940439044948 : Bool[0, 0, 1]
Iteration 56: 0.00025019463903641626 : Bool[0, 0, 1]
Iteration 57: 0.0002251751748508779 : Bool[0, 0, 1]
Iteration 58: 0.00020265765719873485 : Bool[0, 0, 1]
Iteration 59: 0.00018239189138036238 : Bool[0, 0, 1]
Iteration 60: 0.00016415270218417266 : Bool[0, 0, 1]
Iteration 61: 0.00014773743193119415 : Bool[0, 0, 1]
Iteration 62: 0.00013296368871773545 : Bool[0, 0, 1]
Iteration 63: 0.00011966731983381607 : Bool[0, 0, 1]
Iteration 64: 0.00010770058784359549 : Bool[0, 0, 1]
Iteration 65: 9.693052905479504e-5 : Bool[0, 0, 1]
Iteration 66: 8.723747614691746e-5 : Bool[0, 0, 1]
Iteration 67: 7.851372853084904e-5 : Bool[0, 0, 1]
Iteration 68: 7.066235567687595e-5 : Bool[0, 0, 1]
Iteration 69: 6.359612010864435e-5 : Bool[0, 0, 1]
Iteration 70: 5.723650809752456e-5 : Bool[0, 0, 1]
Iteration 71: 5.151285728743904e-5 : Bool[0, 0, 1]
Iteration 72: 4.6361571558684034e-5 : Bool[0, 0, 1]
Iteration 73: 4.1725414402837835e-5 : Bool[0, 0, 1]
Iteration 74: 3.755287296258736e-5 : Bool[0, 0, 1]
Iteration 75: 3.3797585666239804e-5 : Bool[0, 0, 1]
Iteration 76: 3.0417827099560313e-5 : Bool[0, 0, 1]
Iteration 77: 2.7376044389626486e-5 : Bool[0, 0, 1]
Iteration 78: 2.4638439950708246e-5 : Bool[0, 0, 1]
Iteration 79: 2.2174595955659626e-5 : Bool[0, 0, 1]
Iteration 80: 1.9957136359938232e-5 : Bool[0, 0, 1]
Iteration 81: 1.7961422724033227e-5 : Bool[0, 0, 1]
Iteration 82: 1.6165280451674313e-5 : Bool[0, 0, 1]
Iteration 83: 1.4548752406418064e-5 : Bool[0, 0, 1]
Iteration 84: 1.3093877165748502e-5 : Bool[0, 0, 1]
Iteration 85: 1.178448944921806e-5 : Bool[0, 0, 1]
Iteration 86: 1.0606040504401726e-5 : Bool[0, 0, 1]
Iteration 87: 9.545436453928247e-6 : Bool[0, 0, 1]
Iteration 88: 8.59089280857983e-6 : Bool[0, 0, 1]
Iteration 89: 7.731803527755154e-6 : Bool[0, 0, 1]
Iteration 90: 6.958623174901923e-6 : Bool[0, 0, 1]
Iteration 91: 6.262760857467242e-6 : Bool[0, 0, 1]
Iteration 92: 5.6364847716983135e-6 : Bool[0, 0, 1]
Iteration 93: 5.072836294500727e-6 : Bool[0, 0, 1]
Iteration 94: 4.565552665036776e-6 : Bool[0, 0, 1]
Iteration 95: 4.108997398666325e-6 : Bool[0, 0, 1]
Iteration 96: 3.6980976588774084e-6 : Bool[0, 0, 1]
Iteration 97: 3.3282878928453385e-6 : Bool[0, 0, 1]
Iteration 98: 2.9954591036496225e-6 : Bool[0, 0, 1]
Iteration 99: 2.6959131932402514e-6 : Bool[0, 0, 1]
Iteration 100: 2.4263218739717374e-6 : Bool[0, 0, 1]
Iteration 101: 2.1836896865190525e-6 : Bool[0, 0, 1]
Iteration 102: 1.9653207178338405e-6 : Bool[0, 0, 1]
Iteration 103: 1.7687886460504565e-6 : Bool[0, 0, 1]
Iteration 104: 1.5919097814398597e-6 : Bool[0, 0, 1]
Iteration 105: 1.4327188033735894e-6 : Bool[0, 0, 1]
Iteration 106: 1.289446923014026e-6 : Bool[0, 0, 1]
Iteration 107: 1.16050223064601e-6 : Bool[0, 0, 1]
Iteration 108: 1.0444520076591246e-6 : Bool[0, 0, 1]
Iteration 109: 9.400068069487233e-7 : Bool[0, 0, 1]
Iteration 110: 8.460061262649532e-7 : Bool[0, 0, 1]
Iteration 111: 7.614055136384579e-7 : Bool[0, 0, 1]
Iteration 112: 6.852649622191009e-7 : Bool[0, 0, 1]
Iteration 113: 6.167384659638842e-7 : Bool[0, 0, 1]
Iteration 114: 5.55064619378598e-7 : Bool[0, 0, 1]
Iteration 115: 4.995581575073516e-7 : Bool[0, 0, 1]
Iteration 116: 4.496023418010253e-7 : Bool[0, 0, 1]
Iteration 117: 4.046421075432072e-7 : Bool[0, 0, 1]
Iteration 118: 3.641778968388465e-7 : Bool[0, 0, 1]
Iteration 119: 3.277601071660641e-7 : Bool[0, 0, 1]
Iteration 120: 2.949840964272532e-7 : Bool[0, 0, 1]
Iteration 121: 2.6548568676787454e-7 : Bool[0, 0, 1]
Iteration 122: 2.389371180910871e-7 : Bool[0, 0, 1]
Iteration 123: 2.1504340630418284e-7 : Bool[0, 0, 1]
Iteration 124: 1.9353906566266232e-7 : Bool[0, 0, 1]
Iteration 125: 1.7418515918521393e-7 : Bool[0, 0, 1]
Iteration 126: 1.5676664322228362e-7 : Bool[0, 0, 1]
Iteration 127: 1.4108997892225972e-7 : Bool[0, 0, 1]
Iteration 128: 1.2698098100782929e-7 : Bool[0, 0, 1]
Iteration 129: 1.142828828515352e-7 : Bool[0, 0, 1]
Iteration 130: 1.0285459473013958e-7 : Bool[0, 0, 1]
Iteration 131: 9.256913524602339e-8 : Bool[0, 0, 1]
Iteration 132: 8.331222162150098e-8 : Bool[0, 0, 1]
Iteration 133: 7.498099940939085e-8 : Bool[0, 0, 1]
Iteration 134: 6.748289960167853e-8 : Bool[0, 0, 1]
Iteration 135: 6.073460967481736e-8 : Bool[0, 0, 1]
Iteration 136: 5.4661148607415555e-8 : Bool[0, 0, 1]
Iteration 137: 4.9195033741122884e-8 : Bool[0, 0, 1]
Iteration 138: 4.427553046415511e-8 : Bool[0, 0, 1]
Iteration 139: 3.984797747325075e-8 : Bool[0, 0, 1]
Iteration 140: 3.5863179648210064e-8 : Bool[0, 0, 1]
Iteration 141: 3.227686173890021e-8 : Bool[0, 0, 1]
Iteration 142: 2.904917562052134e-8 : Bool[0, 0, 1]
Iteration 143: 2.6144257980753594e-8 : Bool[0, 0, 1]
Iteration 144: 2.3529832193780464e-8 : Bool[0, 0, 1]
Iteration 145: 2.117684905211803e-8 : Bool[0, 0, 1]
Iteration 146: 1.905916405253727e-8 : Bool[0, 0, 1]
Iteration 147: 1.7153247600099064e-8 : Bool[0, 0, 1]
Iteration 148: 1.5437922828986927e-8 : Bool[0, 0, 1]
Iteration 149: 1.3894130623803846e-8 : Bool[0, 0, 1]
Iteration 150: 1.2504717594730153e-8 : Bool[0, 0, 1]
Iteration 151: 1.1254245868563828e-8 : Bool[0, 0, 1]
Iteration 152: 1.0128821226196294e-8 : Bool[0, 0, 1]
Iteration 153: 9.115939114678895e-9 : Bool[0, 0, 1]
Iteration 154: 8.204345203211005e-9 : Bool[0, 0, 1]
Iteration 155: 7.383910705094365e-9 : Bool[0, 0, 1]
Iteration 156: 6.645519606829353e-9 : Bool[0, 0, 1]
Iteration 157: 5.980967721086472e-9 : Bool[0, 0, 1]
Iteration 158: 5.382870926773364e-9 : Bool[0, 0, 1]
Iteration 159: 4.844583789687107e-9 : Bool[0, 0, 1]
Iteration 160: 4.360125399616166e-9 : Bool[0, 0, 1]
Iteration 161: 3.924112923492373e-9 : Bool[0, 0, 1]
Iteration 162: 3.5317015978364452e-9 : Bool[0, 0, 1]
Iteration 163: 3.1785314380528007e-9 : Bool[0, 0, 1]
Iteration 164: 2.8606782775941753e-9 : Bool[0, 0, 1]
Iteration 165: 2.574610524774812e-9 : Bool[0, 0, 1]
Iteration 166: 2.3171494722973307e-9 : Bool[0, 0, 1]
Iteration 167: 2.0854346027832094e-9 : Bool[0, 0, 1]
Iteration 168: 1.8768910592381616e-9 : Bool[0, 0, 1]
Iteration 169: 1.6892018894765215e-9 : Bool[0, 0, 1]
Iteration 170: 1.5202817893467113e-9 : Bool[0, 0, 1]
Iteration 171: 1.3682536215142704e-9 : Bool[0, 0, 1]
Iteration 172: 1.2314282926695341e-9 : Bool[0, 0, 1]
Iteration 173: 1.1082854634025807e-9 : Bool[0, 0, 1]
Iteration 174: 9.974568948578622e-10 : Bool[0, 0, 1]
Iteration 175: 8.977112386787667e-10 : Bool[0, 0, 1]
Iteration 176: 8.079400759530841e-10 : Bool[0, 0, 1]
Iteration 177: 7.271461210933694e-10 : Bool[0, 0, 1]
Iteration 178: 6.544315089840325e-10 : Bool[0, 0, 1]
Iteration 179: 5.88988302574478e-10 : Bool[0, 0, 1]
Iteration 180: 5.300895278281814e-10 : Bool[0, 0, 1]
Iteration 181: 4.770805972498238e-10 : Bool[0, 0, 1]
Iteration 182: 4.293725375248414e-10 : Bool[0, 0, 1]
Iteration 183: 3.8643532818127824e-10 : Bool[0, 0, 1]
Iteration 184: 3.477917398519992e-10 : Bool[0, 0, 1]
Iteration 185: 3.1301256031568414e-10 : Bool[0, 0, 1]
Iteration 186: 2.817113209374611e-10 : Bool[0, 0, 1]
Iteration 187: 2.53540188843715e-10 : Bool[0, 0, 1]
Iteration 188: 2.281862476749552e-10 : Bool[0, 0, 1]
Iteration 189: 2.053675285385026e-10 : Bool[0, 0, 1]
Iteration 190: 1.8483081731801576e-10 : Bool[0, 0, 1]
Iteration 191: 1.6634782440405615e-10 : Bool[0, 0, 1]
Iteration 192: 1.4971301975919005e-10 : Bool[0, 0, 1]
Iteration 193: 1.347416622721198e-10 : Bool[0, 0, 1]
Iteration 194: 1.2126755155605906e-10 : Bool[0, 0, 1]
Iteration 195: 1.091408075026834e-10 : Bool[0, 0, 1]
Iteration 196: 9.822664903680334e-11 : Bool[0, 0, 1]
([-0.12917371935610356, -0.12917371935610356, 0.5715802122005743], [-0.9579891504189799, 0.00862108482895072, 0.883026404003542], Bool[0, 0, 1])

Implement Policy Iteration and compare rates of convergence.

function policy_iteration(m; T=1000, τ_η=1e-10, verbose=false)

    V_U_0 = [0.0,0.0,0.0]
    V_E_0 = [0.0,0.0,0.0]

    x0 = [false, false, false]

    for t=1:T

        V_U_0, V_E_0 = policy_eval(x0, m)    
    
        V_U_1, V_E_1, x = bellman_step(V_U_0, V_E_0, m)

        η = maximum(abs.(x-x0))

        x0 = x

        if verbose
            
            println("Iteration $(t): $(η) : $(x)")
        end

        if η<τ_η
            return V_U_0, V_E_0, x
        end

    end

    error("No convergence")

    
end
policy_iteration (generic function with 1 method)
policy_iteration(m; verbose=true)
Iteration 1: 1 : Bool[1, 1, 1]
Iteration 2: 1 : Bool[0, 1, 1]
Iteration 3: 1 : Bool[0, 0, 1]
Iteration 4: 0 : Bool[0, 0, 1]
([-0.12917371930468718, -0.12917371930468718, 0.5715802122519905], [-0.95798915039766, 0.008621084866072553, 0.8830264040549584], Bool[0, 0, 1])

Discuss the Effects of the Parameters

With the baseline calibration workers accept only the highest offer. What can make them accept more offer?

policy_iteration(merge(m, (;cbar=0.5)))[3]
3-element Vector{Bool}:
 0
 1
 1
policy_iteration(merge(m, (;punishment=0.2)))[3]
3-element Vector{Bool}:
 0
 1
 1
# higher unemployment risk
policy_iteration(merge(m, (;λ=0.1)))[3]
3-element Vector{Bool}:
 0
 1
 1
# higher unemployment risk
policy_iteration(merge(m, (;β=0.8)))[3]
3-element Vector{Bool}:
 0
 1
 1