Skip to content

Commit dc2d068

Browse files
committed
clean
1 parent e8ef1ce commit dc2d068

File tree

2 files changed

+248
-43
lines changed

2 files changed

+248
-43
lines changed

EvaluateFnOnAgentDist/EvalFnOnAgentDist_AggVars_Case1.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@
290290

291291
AggVars=zeros(length(FnsToEvaluate),1,'gpuArray');
292292

293-
PolicyValues=PolicyInd2Val_Case1(PolicyIndexes,n_d,n_a,n_z,d_grid,a_grid);
293+
PolicyValues=PolicyInd2Val_Case1(PolicyIndexes,n_d,n_a,n_z,d_grid,a_grid,simoptions);
294294
% permuteindexes=[1+(1:1:(l_a+l_z)),1];
295295
% if N_z==0
296296
% PolicyValuesPermute=permute(reshape(PolicyValues,[size(PolicyValues,1),N_a]),[2,1]); %[N_a,l_d+l_a]

PolicyInd2Val/PolicyInd2Val_Case1.m

Lines changed: 247 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
function PolicyValues=PolicyInd2Val_Case1(PolicyIndexes,n_d,n_a,n_z,d_grid,a_grid)
1+
function PolicyValues=PolicyInd2Val_Case1(PolicyIndexes,n_d,n_a,n_z,d_grid,a_grid,simoptions,outputkron)
2+
3+
if ~exist('outputkron','var')
4+
outputkron=0; % outputkron=1 is just for internal use
5+
end
26

37
if isgpuarray(PolicyIndexes)
48
Parallel=2;
@@ -10,67 +14,268 @@
1014
l_d=0;
1115
else
1216
l_d=length(n_d);
13-
cumsum_n_d=cumsum(n_d);
1417
end
1518
l_a=length(n_a);
1619

17-
cumsum_n_a=cumsum(n_a);
18-
1920
N_a=prod(n_a);
2021
N_z=prod(n_z);
2122

23+
if ~exist('simoptions','var')
24+
l_aprime=l_a;
25+
aprime_grid=a_grid;
26+
n_aprime=n_a;
27+
else
28+
ordinary=1;
29+
% If using a specific asset type, then remove from aprime
30+
if isfield(simoptions,'experienceasset')
31+
if simoptions.experienceasset>0
32+
l_aprime=l_a-1;
33+
aprime_grid=a_grid(1:sum(n_a(1:end-1)));
34+
n_aprime=n_a(1:end-1);
35+
ordinary=0;
36+
end
37+
elseif isfield(simoptions,'experienceassetu')
38+
if simoptions.experienceassetu>0
39+
l_aprime=l_a-1;
40+
aprime_grid=a_grid(1:sum(n_a(1:end-1)));
41+
n_aprime=n_a(1:end-1);
42+
ordinary=0;
43+
end
44+
elseif isfield(simoptions,'riskyasset')
45+
if simoptions.riskyasset>0
46+
l_aprime=l_a-1;
47+
aprime_grid=a_grid(1:sum(n_a(1:end-1)));
48+
n_aprime=n_a(1:end-1);
49+
ordinary=0;
50+
end
51+
elseif isfield(simoptions,'residualasset')
52+
if simoptions.residualasset>0
53+
l_aprime=l_a-1;
54+
aprime_grid=a_grid(1:sum(n_a(1:end-1)));
55+
n_aprime=n_a(1:end-1);
56+
ordinary=0;
57+
end
58+
end
59+
if ordinary==1 % not using any specific asset type
60+
l_aprime=l_a;
61+
aprime_grid=a_grid;
62+
n_aprime=n_a;
63+
end
64+
end
65+
66+
cumsum_n_aprime=cumsum(n_aprime);
67+
cumsum_n_d=cumsum(n_d);
68+
69+
% When there is an e or semiz variable, can just pretend it is a z for
70+
% current purposes
71+
if isfield(simoptions,'n_e')
72+
if prod(simoptions.n_e)==0
73+
% do nothing
74+
else
75+
if N_z==0
76+
n_z=simoptions.n_e;
77+
else
78+
n_z=[n_z,simoptions.n_e];
79+
end
80+
N_z=prod(n_z);
81+
end
82+
end
83+
if isfield(simoptions,'n_semiz')
84+
if prod(simoptions.n_semiz)==0
85+
% do nothing
86+
else
87+
if N_z==0
88+
n_z=simoptions.n_semiz;
89+
else
90+
n_z=[simoptions.n_semiz,n_z];
91+
end
92+
N_z=prod(n_z);
93+
end
94+
end
95+
96+
% cumsum_n_a=cumsum(n_a);
97+
98+
99+
%%
22100
if Parallel==2
23-
if l_d==0
24-
PolicyIndexes=reshape(PolicyIndexes,[l_a,N_a*N_z]);
25-
PolicyValues=zeros(l_a,N_a*N_z,'gpuArray');
101+
if N_z==0
102+
if l_d==0
103+
PolicyIndexes=reshape(PolicyIndexes,[l_aprime,N_a]);
104+
PolicyValues=zeros(l_aprime,N_a,'gpuArray');
26105

27-
temp_a_grid=a_grid(1:n_a(1));
28-
PolicyValues(1,:)=temp_a_grid(PolicyIndexes(1,:));
29-
if l_a>1
30-
if l_a>2
31-
for ii=2:l_a-1
32-
temp_a_grid=a_grid((1+cumsum_n_a(ii-1)):cumsum_n_a(ii));
33-
PolicyValues(ii,:)=temp_a_grid(PolicyIndexes(ii,:));
106+
temp_aprime_grid=aprime_grid(1:cumsum_n_aprime(1));
107+
PolicyValues(1,:)=temp_aprime_grid(PolicyIndexes(1,:));
108+
if l_aprime>1
109+
if l_aprime>2
110+
for ii=2:(l_aprime-1)
111+
temp_aprime_grid=aprime_grid(1+cumsum_n_aprime(ii-1):cumsum_n_aprime(ii));
112+
PolicyValues(ii,:)=temp_aprime_grid(PolicyIndexes(ii,:));
113+
end
34114
end
115+
temp_aprime_grid=aprime_grid(cumsum_n_aprime(end-1)+1:end);
116+
PolicyValues(end,:)=temp_aprime_grid(PolicyIndexes(end,:));
35117
end
36-
temp_a_grid=a_grid((1+cumsum_n_a(end-1)):end);
37-
PolicyValues(end,:)=temp_a_grid(PolicyIndexes(end,:));
38-
end
39-
PolicyValues=reshape(PolicyValues,[l_a,n_a,n_z]);
40-
else
41-
PolicyIndexes=reshape(PolicyIndexes,[l_d+l_a,N_a*N_z]);
42-
PolicyValues=zeros(l_d+l_a,N_a*N_z,'gpuArray');
43118

44-
temp_d_grid=d_grid(1:n_d(1));
45-
PolicyValues(1,:)=temp_d_grid(PolicyIndexes(1,:));
46-
if l_d>1
47-
if l_d>2
48-
for ii=2:l_d-1
49-
temp_d_grid=d_grid((1+cumsum_n_d(ii-1)):cumsum_n_d(ii));
50-
PolicyValues(ii,:)=temp_d_grid(PolicyIndexes(ii,:));
119+
if outputkron==0
120+
PolicyValues=reshape(PolicyValues,[l_aprime,n_a]);
121+
else
122+
PolicyValues=reshape(PolicyValues,[l_aprime,N_a]);
123+
end
124+
else
125+
PolicyIndexes=reshape(PolicyIndexes,[l_d+l_aprime,N_a]);
126+
PolicyValues=zeros(l_d+l_aprime,N_a,'gpuArray');
127+
128+
temp_d_grid=d_grid(1:cumsum_n_d(1));
129+
PolicyValues(1,:)=temp_d_grid(PolicyIndexes(1,:));
130+
if l_d>1
131+
if l_d>2
132+
for ii=2:(l_d-1)
133+
temp_d_grid=d_grid(1+cumsum_n_d(ii-1):cumsum_n_d(ii));
134+
PolicyValues(ii,:)=temp_d_grid(PolicyIndexes(ii,:));
135+
end
51136
end
137+
temp_d_grid=d_grid(cumsum_n_d(end-1)+1:end);
138+
PolicyValues(l_d,:)=temp_d_grid(PolicyIndexes(l_d,:));
139+
end
140+
141+
if l_aprime>0
142+
temp_aprime_grid=aprime_grid(1:cumsum_n_aprime(1));
143+
PolicyValues(l_d+1,:)=temp_aprime_grid(PolicyIndexes(l_d+1,:));
144+
if l_aprime>1
145+
if l_aprime>2
146+
for ii=2:(l_aprime-1)
147+
temp_aprime_grid=aprime_grid(1+cumsum_n_aprime(ii-1):cumsum_n_aprime(ii));
148+
PolicyValues(l_d+ii,:)=temp_aprime_grid(PolicyIndexes(l_d+ii,:));
149+
end
150+
end
151+
temp_aprime_grid=aprime_grid(cumsum_n_aprime(end-1)+1:end);
152+
PolicyValues(l_d+l_aprime,:)=temp_aprime_grid(PolicyIndexes(l_d+l_aprime,:));
153+
end
154+
end
155+
156+
if outputkron==0
157+
PolicyValues=reshape(PolicyValues,[l_d+l_aprime,n_a]);
158+
else
159+
PolicyValues=reshape(PolicyValues,[l_d+l_aprime,N_a]);
52160
end
53-
temp_d_grid=d_grid((1+cumsum_n_d(l_d-1)):end);
54-
PolicyValues(l_d,:)=temp_d_grid(PolicyIndexes(l_d,:));
55161
end
56-
57-
temp_a_grid=a_grid(1:n_a(1));
58-
PolicyValues(l_d+1,:)=temp_a_grid(PolicyIndexes(l_d+1,:));
59-
if l_a>1
60-
if l_a>2
61-
for ii=2:l_a-1
62-
temp_a_grid=a_grid((1+cumsum_n_a(ii-1)):cumsum_n_a(ii));
63-
PolicyValues(l_d+ii,:)=temp_a_grid(PolicyIndexes(l_d+ii,:));
162+
else % N_z>0
163+
if l_d==0
164+
PolicyIndexes=reshape(PolicyIndexes,[l_aprime,N_a*N_z]);
165+
PolicyValues=zeros(l_aprime,N_a*N_z,'gpuArray');
166+
167+
temp_aprime_grid=aprime_grid(1:cumsum_n_aprime(1));
168+
PolicyValues(1,:)=temp_aprime_grid(PolicyIndexes(1,:));
169+
if l_aprime>1
170+
if l_aprime>2
171+
for ii=2:(l_aprime-1)
172+
temp_aprime_grid=aprime_grid(1+cumsum_n_aprime(ii-1):cumsum_n_aprime(ii));
173+
PolicyValues(ii,:)=temp_aprime_grid(PolicyIndexes(ii,:));
174+
end
64175
end
176+
temp_aprime_grid=aprime_grid(cumsum_n_aprime(end-1)+1:end);
177+
PolicyValues(end,:)=temp_aprime_grid(PolicyIndexes(end,:));
178+
end
179+
180+
if outputkron==0
181+
PolicyValues=reshape(PolicyValues,[l_aprime,n_a,n_z]);
182+
else
183+
PolicyValues=reshape(PolicyValues,[l_aprime,N_a,N_z]);
184+
end
185+
else
186+
PolicyIndexes=reshape(PolicyIndexes,[l_d+l_aprime,N_a*N_z]);
187+
PolicyValues=zeros(l_d+l_aprime,N_a*N_z,'gpuArray');
188+
189+
temp_d_grid=d_grid(1:cumsum_n_d(1));
190+
PolicyValues(1,:)=temp_d_grid(PolicyIndexes(1,:));
191+
if l_d>1
192+
if l_d>2
193+
for ii=2:(l_d-1)
194+
temp_d_grid=d_grid(1+cumsum_n_d(ii-1):cumsum_n_d(ii));
195+
PolicyValues(ii,:)=temp_d_grid(PolicyIndexes(ii,:));
196+
end
197+
end
198+
temp_d_grid=d_grid(cumsum_n_d(end-1)+1:end);
199+
PolicyValues(l_d,:)=temp_d_grid(PolicyIndexes(l_d,:));
200+
end
201+
202+
if l_aprime>0
203+
temp_aprime_grid=aprime_grid(1:cumsum_n_aprime(1));
204+
PolicyValues(l_d+1,:)=temp_aprime_grid(PolicyIndexes(l_d+1,:));
205+
if l_aprime>1
206+
if l_aprime>2
207+
for ii=2:(l_aprime-1)
208+
temp_aprime_grid=aprime_grid(1+cumsum_n_aprime(ii-1):cumsum_n_aprime(ii));
209+
PolicyValues(l_d+ii,:)=temp_aprime_grid(PolicyIndexes(l_d+ii,:));
210+
end
211+
end
212+
temp_aprime_grid=aprime_grid(cumsum_n_aprime(end-1)+1:end);
213+
PolicyValues(l_d+l_aprime,:)=temp_aprime_grid(PolicyIndexes(l_d+l_aprime,:));
214+
end
215+
end
216+
217+
if outputkron==0
218+
PolicyValues=reshape(PolicyValues,[l_d+l_aprime,n_a,n_z]);
219+
else
220+
PolicyValues=reshape(PolicyValues,[l_d+l_aprime,N_a,N_z]);
65221
end
66-
temp_a_grid=a_grid((1+cumsum_n_a(l_a-1)):end);
67-
PolicyValues(end,:)=temp_a_grid(PolicyIndexes(end,:));
68222
end
69-
70-
PolicyValues=reshape(PolicyValues,[l_d+l_a,n_a,n_z]);
71223
end
224+
225+
% if l_d==0
226+
% PolicyIndexes=reshape(PolicyIndexes,[l_a,N_a*N_z]);
227+
% PolicyValues=zeros(l_a,N_a*N_z,'gpuArray');
228+
%
229+
% temp_a_grid=a_grid(1:n_a(1));
230+
% PolicyValues(1,:)=temp_a_grid(PolicyIndexes(1,:));
231+
% if l_a>1
232+
% if l_a>2
233+
% for ii=2:l_a-1
234+
% temp_a_grid=a_grid((1+cumsum_n_a(ii-1)):cumsum_n_a(ii));
235+
% PolicyValues(ii,:)=temp_a_grid(PolicyIndexes(ii,:));
236+
% end
237+
% end
238+
% temp_a_grid=a_grid((1+cumsum_n_a(end-1)):end);
239+
% PolicyValues(end,:)=temp_a_grid(PolicyIndexes(end,:));
240+
% end
241+
% PolicyValues=reshape(PolicyValues,[l_a,n_a,n_z]);
242+
% else
243+
% PolicyIndexes=reshape(PolicyIndexes,[l_d+l_a,N_a*N_z]);
244+
% PolicyValues=zeros(l_d+l_a,N_a*N_z,'gpuArray');
245+
%
246+
% temp_d_grid=d_grid(1:n_d(1));
247+
% PolicyValues(1,:)=temp_d_grid(PolicyIndexes(1,:));
248+
% if l_d>1
249+
% if l_d>2
250+
% for ii=2:l_d-1
251+
% temp_d_grid=d_grid((1+cumsum_n_d(ii-1)):cumsum_n_d(ii));
252+
% PolicyValues(ii,:)=temp_d_grid(PolicyIndexes(ii,:));
253+
% end
254+
% end
255+
% temp_d_grid=d_grid((1+cumsum_n_d(l_d-1)):end);
256+
% PolicyValues(l_d,:)=temp_d_grid(PolicyIndexes(l_d,:));
257+
% end
258+
%
259+
% temp_a_grid=a_grid(1:n_a(1));
260+
% PolicyValues(l_d+1,:)=temp_a_grid(PolicyIndexes(l_d+1,:));
261+
% if l_a>1
262+
% if l_a>2
263+
% for ii=2:l_a-1
264+
% temp_a_grid=a_grid((1+cumsum_n_a(ii-1)):cumsum_n_a(ii));
265+
% PolicyValues(l_d+ii,:)=temp_a_grid(PolicyIndexes(l_d+ii,:));
266+
% end
267+
% end
268+
% temp_a_grid=a_grid((1+cumsum_n_a(l_a-1)):end);
269+
% PolicyValues(end,:)=temp_a_grid(PolicyIndexes(end,:));
270+
% end
271+
%
272+
% PolicyValues=reshape(PolicyValues,[l_d+l_a,n_a,n_z]);
273+
% end
274+
72275
end
73276

277+
278+
%% On cpu, limited to just the most basic setup (cannot handle no z)
74279
if Parallel~=2
75280
if l_d==0
76281
PolicyIndexes=reshape(PolicyIndexes,[l_a,N_a*N_z]);

0 commit comments

Comments
 (0)