|
8 | 8 | N_e=0;
|
9 | 9 | end
|
10 | 10 |
|
| 11 | +if ~isfield(vfoptions,'pard2') |
| 12 | + vfoptions.pard2=0; |
| 13 | +end |
| 14 | +if ~isfield(vfoptions,'gridinterplayer') |
| 15 | + vfoptions.interpgridlayer=0; |
| 16 | +end |
| 17 | + |
11 | 18 | if vfoptions.divideandconquer==1
|
12 | 19 | if ~isfield(vfoptions,'level1n')
|
13 | 20 | vfoptions.level1n=max(ceil(n_a(1)/50),5); % minimum of 5
|
|
21 | 28 | end
|
22 | 29 | end
|
23 | 30 |
|
24 |
| -if N_d1==0 |
25 |
| - if N_e==0 |
26 |
| - if vfoptions.divideandconquer==0 |
27 |
| - if N_z==0 |
28 |
| - [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_nod1_noz_raw(n_d2,n_a,n_semiz, N_j, d2_grid, a_grid, semiz_gridvals_J, pi_semiz_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
29 |
| - else |
30 |
| - [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_nod1_raw(n_d2,n_a,n_z,n_semiz, N_j, d2_grid, a_grid, z_gridvals_J, semiz_gridvals_J, pi_z_J, pi_semiz_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
| 31 | +if vfoptions.pard2==0 |
| 32 | + if N_d1==0 |
| 33 | + if N_e==0 |
| 34 | + if vfoptions.divideandconquer==0 |
| 35 | + if N_z==0 |
| 36 | + [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_nod1_noz_raw(n_d2,n_a,n_semiz, N_j, d2_grid, a_grid, semiz_gridvals_J, pi_semiz_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
| 37 | + else |
| 38 | + [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_nod1_raw(n_d2,n_a,n_z,n_semiz, N_j, d2_grid, a_grid, z_gridvals_J, semiz_gridvals_J, pi_z_J, pi_semiz_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
| 39 | + end |
| 40 | + elseif vfoptions.divideandconquer==1 |
| 41 | + if N_z==0 |
| 42 | + [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_DC1_nod1_noz_raw(n_d2,n_a,n_semiz, N_j, d2_grid, a_grid, semiz_gridvals_J, pi_semiz_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
| 43 | + else |
| 44 | + [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_DC1_nod1_raw(n_d2,n_a,n_z,n_semiz, N_j, d2_grid, a_grid, z_gridvals_J, semiz_gridvals_J, pi_z_J, pi_semiz_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
| 45 | + end |
31 | 46 | end
|
32 |
| - elseif vfoptions.divideandconquer==1 |
33 |
| - if N_z==0 |
34 |
| - [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_DC1_nod1_noz_raw(n_d2,n_a,n_semiz, N_j, d2_grid, a_grid, semiz_gridvals_J, pi_semiz_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
35 |
| - else |
36 |
| - [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_DC1_nod1_raw(n_d2,n_a,n_z,n_semiz, N_j, d2_grid, a_grid, z_gridvals_J, semiz_gridvals_J, pi_z_J, pi_semiz_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
| 47 | + else |
| 48 | + if vfoptions.divideandconquer==0 |
| 49 | + if N_z==0 |
| 50 | + [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_nod1_noz_e_raw(n_d2,n_a,n_semiz, vfoptions.n_e, N_j, d2_grid, a_grid, semiz_gridvals_J, vfoptions.e_gridvals_J, pi_semiz_J, vfoptions.pi_e_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
| 51 | + else |
| 52 | + [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_nod1_e_raw(n_d2,n_a,n_z,n_semiz, vfoptions.n_e, N_j, d2_grid, a_grid, z_gridvals_J, semiz_gridvals_J, vfoptions.e_gridvals_J, pi_z_J, pi_semiz_J, vfoptions.pi_e_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
| 53 | + end |
| 54 | + elseif vfoptions.divideandconquer==1 |
| 55 | + if N_z==0 |
| 56 | + [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_DC1_nod1_noz_e_raw(n_d2,n_a,n_semiz, vfoptions.n_e, N_j, d2_grid, a_grid, semiz_gridvals_J, vfoptions.e_gridvals_J, pi_semiz_J, vfoptions.pi_e_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
| 57 | + else |
| 58 | + [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_DC1_nod1_e_raw(n_d2,n_a,n_z,n_semiz, vfoptions.n_e, N_j, d2_grid, a_grid, z_gridvals_J, semiz_gridvals_J, vfoptions.e_gridvals_J, pi_z_J, pi_semiz_J, vfoptions.pi_e_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
| 59 | + end |
37 | 60 | end
|
38 | 61 | end
|
39 | 62 | else
|
40 |
| - if vfoptions.divideandconquer==0 |
41 |
| - if N_z==0 |
42 |
| - [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_nod1_noz_e_raw(n_d2,n_a,n_semiz, vfoptions.n_e, N_j, d2_grid, a_grid, semiz_gridvals_J, vfoptions.e_gridvals_J, pi_semiz_J, vfoptions.pi_e_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
43 |
| - else |
44 |
| - [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_nod1_e_raw(n_d2,n_a,n_z,n_semiz, vfoptions.n_e, N_j, d2_grid, a_grid, z_gridvals_J, semiz_gridvals_J, vfoptions.e_gridvals_J, pi_z_J, pi_semiz_J, vfoptions.pi_e_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
| 63 | + if N_e==0 |
| 64 | + if vfoptions.divideandconquer==0 |
| 65 | + if N_z==0 |
| 66 | + [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_noz_raw(n_d1,n_d2,n_a,n_semiz, N_j, d1_grid, d2_grid, a_grid, semiz_gridvals_J, pi_semiz_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
| 67 | + else |
| 68 | + [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_raw(n_d1,n_d2,n_a,n_z,n_semiz, N_j, d1_grid, d2_grid, a_grid, z_gridvals_J, semiz_gridvals_J, pi_z_J, pi_semiz_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
| 69 | + end |
| 70 | + elseif vfoptions.divideandconquer==1 |
| 71 | + if N_z==0 |
| 72 | + [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_DC1_noz_raw(n_d1, n_d2,n_a,n_semiz, N_j, d1_grid, d2_grid, a_grid, semiz_gridvals_J, pi_semiz_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
| 73 | + else |
| 74 | + [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_DC1_raw(n_d1, n_d2,n_a,n_z,n_semiz, N_j, d1_grid, d2_grid, a_grid, z_gridvals_J, semiz_gridvals_J, pi_z_J, pi_semiz_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
| 75 | + end |
45 | 76 | end
|
46 |
| - elseif vfoptions.divideandconquer==1 |
47 |
| - if N_z==0 |
48 |
| - [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_DC1_nod1_noz_e_raw(n_d2,n_a,n_semiz, vfoptions.n_e, N_j, d2_grid, a_grid, semiz_gridvals_J, vfoptions.e_gridvals_J, pi_semiz_J, vfoptions.pi_e_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
49 |
| - else |
50 |
| - [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_DC1_nod1_e_raw(n_d2,n_a,n_z,n_semiz, vfoptions.n_e, N_j, d2_grid, a_grid, z_gridvals_J, semiz_gridvals_J, vfoptions.e_gridvals_J, pi_z_J, pi_semiz_J, vfoptions.pi_e_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
| 77 | + else |
| 78 | + if vfoptions.divideandconquer==0 |
| 79 | + if N_z==0 |
| 80 | + [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_noz_e_raw(n_d1,n_d2,n_a,vfoptions.n_semiz, vfoptions.n_e, N_j, d1_grid, d2_grid, a_grid, semiz_gridvals_J, vfoptions.e_gridvals_J, pi_semiz_J, vfoptions.pi_e_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
| 81 | + else |
| 82 | + if vfoptions.gridinterplayer==0 |
| 83 | + [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_e_raw(n_d1,n_d2,n_a,n_z,vfoptions.n_semiz, vfoptions.n_e, N_j, d1_grid, d2_grid, a_grid, z_gridvals_J, semiz_gridvals_J, vfoptions.e_gridvals_J, pi_z_J, pi_semiz_J, vfoptions.pi_e_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
| 84 | + elseif vfoptions.gridinterplayer==1 |
| 85 | + [VKron, Policy]=ValueFnIter_Case1_FHorz_SemiExo_GI_e_raw(n_d1,n_d2,n_a,n_z,vfoptions.n_semiz, vfoptions.n_e, N_j, d1_grid, d2_grid, a_grid, z_gridvals_J, semiz_gridvals_J, vfoptions.e_gridvals_J, pi_z_J, pi_semiz_J, vfoptions.pi_e_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
| 86 | + end |
| 87 | + end |
| 88 | + elseif vfoptions.divideandconquer==1 |
| 89 | + if N_z==0 |
| 90 | + [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_DC1_noz_e_raw(n_d1,n_d2,n_a,vfoptions.n_semiz, vfoptions.n_e, N_j, d1_grid, d2_grid, a_grid, semiz_gridvals_J, vfoptions.e_gridvals_J, pi_semiz_J, vfoptions.pi_e_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
| 91 | + else |
| 92 | + [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_DC1_e_raw(n_d1,n_d2,n_a,n_z,vfoptions.n_semiz, vfoptions.n_e, N_j, d1_grid, d2_grid, a_grid, z_gridvals_J, semiz_gridvals_J, vfoptions.e_gridvals_J, pi_z_J, pi_semiz_J, vfoptions.pi_e_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
| 93 | + end |
51 | 94 | end
|
52 | 95 | end
|
53 | 96 | end
|
54 |
| -else |
55 |
| - if N_e==0 |
56 |
| - if vfoptions.divideandconquer==0 |
57 |
| - if N_z==0 |
58 |
| - [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_noz_raw(n_d1,n_d2,n_a,n_semiz, N_j, d1_grid, d2_grid, a_grid, semiz_gridvals_J, pi_semiz_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
59 |
| - else |
60 |
| - [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_raw(n_d1,n_d2,n_a,n_z,n_semiz, N_j, d1_grid, d2_grid, a_grid, z_gridvals_J, semiz_gridvals_J, pi_z_J, pi_semiz_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
61 |
| - end |
62 |
| - elseif vfoptions.divideandconquer==1 |
63 |
| - if N_z==0 |
64 |
| - [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_DC1_noz_raw(n_d1, n_d2,n_a,n_semiz, N_j, d1_grid, d2_grid, a_grid, semiz_gridvals_J, pi_semiz_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
65 |
| - else |
66 |
| - [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_DC1_raw(n_d1, n_d2,n_a,n_z,n_semiz, N_j, d1_grid, d2_grid, a_grid, z_gridvals_J, semiz_gridvals_J, pi_z_J, pi_semiz_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
67 |
| - end |
68 |
| - end |
| 97 | + |
| 98 | +elseif vfoptions.pard2==1 |
| 99 | + if N_d1==0 |
| 100 | + |
69 | 101 | else
|
70 |
| - if vfoptions.divideandconquer==0 |
71 |
| - if N_z==0 |
72 |
| - [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_noz_e_raw(n_d1,n_d2,n_a,vfoptions.n_semiz, vfoptions.n_e, N_j, d1_grid, d2_grid, a_grid, semiz_gridvals_J, vfoptions.e_gridvals_J, pi_semiz_J, vfoptions.pi_e_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
73 |
| - else |
74 |
| - [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_e_raw(n_d1,n_d2,n_a,n_z,vfoptions.n_semiz, vfoptions.n_e, N_j, d1_grid, d2_grid, a_grid, z_gridvals_J, semiz_gridvals_J, vfoptions.e_gridvals_J, pi_z_J, pi_semiz_J, vfoptions.pi_e_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
75 |
| - end |
76 |
| - elseif vfoptions.divideandconquer==1 |
77 |
| - if N_z==0 |
78 |
| - [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_DC1_noz_e_raw(n_d1,n_d2,n_a,vfoptions.n_semiz, vfoptions.n_e, N_j, d1_grid, d2_grid, a_grid, semiz_gridvals_J, vfoptions.e_gridvals_J, pi_semiz_J, vfoptions.pi_e_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
79 |
| - else |
80 |
| - [VKron, Policy3]=ValueFnIter_Case1_FHorz_SemiExo_DC1_e_raw(n_d1,n_d2,n_a,n_z,vfoptions.n_semiz, vfoptions.n_e, N_j, d1_grid, d2_grid, a_grid, z_gridvals_J, semiz_gridvals_J, vfoptions.e_gridvals_J, pi_z_J, pi_semiz_J, vfoptions.pi_e_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
| 102 | + if N_e==0 |
| 103 | + |
| 104 | + else |
| 105 | + if vfoptions.divideandconquer==0 |
| 106 | + if N_z==0 |
| 107 | + |
| 108 | + else |
| 109 | + [VKron, Policy]=ValueFnIter_Case1_FHorz_SemiExo_pard2_e_raw(n_d1,n_d2,n_a,n_z,vfoptions.n_semiz, vfoptions.n_e, N_j, d1_grid, d2_grid, a_grid, z_gridvals_J, semiz_gridvals_J, vfoptions.e_gridvals_J, pi_z_J, pi_semiz_J, vfoptions.pi_e_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
| 110 | + end |
| 111 | + elseif vfoptions.divideandconquer==1 |
| 112 | + if N_z==0 |
| 113 | + |
| 114 | + else |
| 115 | + [VKron, Policy]=ValueFnIter_Case1_FHorz_SemiExo_DC1_pard2_e_raw(n_d1,n_d2,n_a,n_z,vfoptions.n_semiz, vfoptions.n_e, N_j, d1_grid, d2_grid, a_grid, z_gridvals_J, semiz_gridvals_J, vfoptions.e_gridvals_J, pi_z_J, pi_semiz_J, vfoptions.pi_e_J, ReturnFn, Parameters, DiscountFactorParamNames, ReturnFnParamNames, vfoptions); |
| 116 | + end |
81 | 117 | end
|
82 | 118 | end
|
83 | 119 | end
|
84 | 120 | end
|
85 | 121 |
|
86 |
| - |
87 |
| -%Transforming Value Fn and Optimal Policy Indexes matrices back out of Kronecker Form |
| 122 | +% Transforming Value Fn and Optimal Policy Indexes matrices back out of Kronecker Form |
| 123 | +n_d=[n_d1,n_d2]; |
| 124 | +if vfoptions.pard2==1 |
| 125 | + N_a=prod(n_a); |
| 126 | + N_semiz=prod(n_semiz); |
| 127 | +end |
88 | 128 | if vfoptions.outputkron==0
|
89 | 129 | if isfield(vfoptions,'n_e')
|
90 | 130 | if N_z==0
|
91 | 131 | V=reshape(VKron,[n_a,vfoptions.n_semiz, vfoptions.n_e,N_j]);
|
92 |
| - Policy=UnKronPolicyIndexes_Case1_FHorz_semiz_e(Policy3, n_d1,n_d2, n_a, vfoptions.n_semiz, vfoptions.n_e, N_j, vfoptions); |
| 132 | + if vfoptions.pard2==0 |
| 133 | + Policy=UnKronPolicyIndexes_Case1_FHorz_semiz_e(Policy3, n_d1,n_d2, n_a, vfoptions.n_semiz, vfoptions.n_e, N_j, vfoptions); |
| 134 | + elseif vfoptions.pard2==1 |
| 135 | + Policy=UnKronPolicyIndexes_Case1_FHorz_e(Policy, n_d, n_a, vfoptions.n_semiz, vfoptions.n_e, N_j, vfoptions); |
| 136 | + end |
93 | 137 | else
|
94 | 138 | V=reshape(VKron,[n_a,vfoptions.n_semiz,n_z,vfoptions.n_e,N_j]);
|
95 |
| - Policy=UnKronPolicyIndexes_Case1_FHorz_semiz_e(Policy3, n_d1,n_d2, n_a, [vfoptions.n_semiz,n_z], vfoptions.n_e, N_j, vfoptions); |
| 139 | + if vfoptions.pard2==0 |
| 140 | + if vfoptions.gridinterplayer==0 |
| 141 | + Policy=UnKronPolicyIndexes_Case1_FHorz_semiz_e(Policy3, n_d1,n_d2, n_a, [vfoptions.n_semiz,n_z], vfoptions.n_e, N_j, vfoptions); |
| 142 | + elseif vfoptions.gridinterplayer==1 |
| 143 | + Policy=UnKronPolicyIndexes_Case2_FHorz_e(Policy, [n_d,n_a,vfoptions.ngridinterp], n_a, [vfoptions.n_semiz,n_z], vfoptions.n_e, N_j, vfoptions); |
| 144 | + end |
| 145 | + elseif vfoptions.pard2==1 |
| 146 | + Policy=UnKronPolicyIndexes_Case2_FHorz_e(reshape(Policy,[N_a,N_semiz*N_z,N_e,N_j]), [n_d,n_a], n_a, [vfoptions.n_semiz,n_z], vfoptions.n_e, N_j, vfoptions); |
| 147 | + end |
96 | 148 | end
|
97 | 149 | else
|
98 | 150 | if N_z==0
|
99 | 151 | V=reshape(VKron,[n_a,vfoptions.n_semiz,N_j]);
|
100 |
| - Policy=UnKronPolicyIndexes_Case1_FHorz_semiz(Policy3, n_d1, n_d2, n_a, vfoptions.n_semiz, N_j, vfoptions); |
| 152 | + if vfoptions.pard2==0 |
| 153 | + Policy=UnKronPolicyIndexes_Case1_FHorz_semiz(Policy3, n_d1, n_d2, n_a, vfoptions.n_semiz, N_j, vfoptions); |
| 154 | + elseif vfoptions.pard2==1 |
| 155 | + Policy=UnKronPolicyIndexes_Case1_FHorz(Policy, n_d, n_a, vfoptions.n_semiz, N_j, vfoptions); |
| 156 | + end |
101 | 157 | else
|
102 | 158 | V=reshape(VKron,[n_a,vfoptions.n_semiz,n_z,N_j]);
|
103 |
| - Policy=UnKronPolicyIndexes_Case1_FHorz_semiz(Policy3, n_d1, n_d2, n_a, [vfoptions.n_semiz,n_z], N_j, vfoptions); |
| 159 | + if vfoptions.pard2==0 |
| 160 | + Policy=UnKronPolicyIndexes_Case1_FHorz_semiz(Policy3, n_d1, n_d2, n_a, [vfoptions.n_semiz,n_z], N_j, vfoptions); |
| 161 | + elseif vfoptions.pard2==1 |
| 162 | + Policy=UnKronPolicyIndexes_Case2_FHorz(reshape(Policy,[N_a,N_semiz*N_z,N_e,N_j]), [n_d,n_a], n_a, [vfoptions.n_semiz,n_z], N_j, vfoptions); |
| 163 | + end |
104 | 164 | end
|
105 | 165 | end
|
106 | 166 | else
|
|
0 commit comments