2022-03-16 14:58:27 +01:00
|
|
|
|
/*
|
|
|
|
|
The model in this file is used to test all combinations of algorithms with
|
|
|
|
|
block and bytecode options.
|
|
|
|
|
|
|
|
|
|
It is designed is such a way that it includes the 8 possible types of blocks:
|
|
|
|
|
– Solve {forward, backward, two boundaries} {simple, complete}
|
|
|
|
|
– Evaluate {forward, backward}
|
|
|
|
|
|
|
|
|
|
All the “Solve” blocks are also present in both linear and nonlinear forms
|
|
|
|
|
(since the codepaths are typically different depending on the linearity of
|
|
|
|
|
the block).
|
|
|
|
|
|
|
|
|
|
Note that there is no such thing as a nonlinear “Evaluate” block, since the
|
|
|
|
|
endogenous variables of the block always enter linearly (on the LHS).
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
var y y_s R pie dq pie_s de A;
|
|
|
|
|
var eb sfc1 sfc2 sbc1 sbc2 sbc3 stbs sfs sbs;
|
|
|
|
|
var nsfc1 nsfc2 nsbc1 nsbc2 nsbc3 nstbs nsfs nsbs;
|
|
|
|
|
var nstbc_c nstbc_y nstbc_k nstbc_h;
|
|
|
|
|
|
|
|
|
|
varexo e_R e_q e_ys e_pies e_A;
|
|
|
|
|
varexo e_eb e_sfc1 e_sfc2 e_sbc e_stbs e_sbs e_sfs;
|
|
|
|
|
varexo e_nsfc1 e_nsfc2 e_nsbc e_nstbs e_nsbs e_nsfs;
|
|
|
|
|
varexo e_nstbc;
|
2009-12-16 18:25:06 +01:00
|
|
|
|
|
|
|
|
|
parameters psi1 psi2 psi3 rho_R tau alpha rr k rho_q rho_A rho_ys rho_pies;
|
2022-03-16 14:58:27 +01:00
|
|
|
|
parameters nstbc_beta nstbc_alpha nstbc_delta nstbc_theta nstbc_psi;
|
2009-12-16 18:25:06 +01:00
|
|
|
|
|
|
|
|
|
psi1 = 1.54;
|
|
|
|
|
psi2 = 0.25;
|
|
|
|
|
psi3 = 0.25;
|
|
|
|
|
rho_R = 0.5;
|
|
|
|
|
alpha = 0.3;
|
|
|
|
|
rr = 2.51;
|
|
|
|
|
k = 0.5;
|
|
|
|
|
tau = 0.5;
|
|
|
|
|
rho_q = 0.4;
|
|
|
|
|
rho_A = 0.2;
|
|
|
|
|
rho_ys = 0.9;
|
|
|
|
|
rho_pies = 0.7;
|
|
|
|
|
|
2022-03-16 14:58:27 +01:00
|
|
|
|
nstbc_alpha = 0.36;
|
|
|
|
|
nstbc_beta = 0.99;
|
|
|
|
|
nstbc_delta = 0.025;
|
|
|
|
|
nstbc_psi = 0;
|
|
|
|
|
nstbc_theta = 2.95;
|
|
|
|
|
|
|
|
|
|
|
2020-06-23 15:49:27 +02:00
|
|
|
|
@#if !block && !bytecode && !use_dll
|
2010-10-22 15:50:54 +02:00
|
|
|
|
model;
|
2020-06-23 15:49:27 +02:00
|
|
|
|
@#elseif block && !bytecode && !use_dll
|
2010-10-22 15:50:54 +02:00
|
|
|
|
model(block, cutoff=0);
|
2020-06-23 15:49:27 +02:00
|
|
|
|
@#elseif !block && bytecode
|
2010-10-22 15:50:54 +02:00
|
|
|
|
model(bytecode);
|
2020-06-23 15:49:27 +02:00
|
|
|
|
@#elseif block && bytecode
|
2009-12-16 18:25:06 +01:00
|
|
|
|
model(block, bytecode, cutoff=0);
|
2020-06-23 15:49:27 +02:00
|
|
|
|
@#elseif !block && use_dll
|
|
|
|
|
model(use_dll);
|
|
|
|
|
@#else
|
|
|
|
|
model(block, use_dll, cutoff=0);
|
2010-10-22 15:50:54 +02:00
|
|
|
|
@#endif
|
2022-03-16 14:58:27 +01:00
|
|
|
|
|
|
|
|
|
// Block of type “Solve two boundaries complete” (linear)
|
|
|
|
|
y = y(+1) - (tau +alpha*(2-alpha)*(1-tau))*(R-pie(+1))-alpha*(tau +alpha*(2-alpha)*(1-tau))*dq(+1) + alpha*(2-alpha)*((1-tau)/tau)*(y_s-y_s(+1))-A(+1);
|
|
|
|
|
pie = exp(-rr/400)*pie(+1)+alpha*exp(-rr/400)*dq(+1)-alpha*dq+(k/(tau+alpha*(2-alpha)*(1-tau)))*y+alpha*(2-alpha)*(1-tau)/(tau*(tau+alpha*(2-alpha)*(1-tau)))*y_s;
|
|
|
|
|
pie = de+(1-alpha)*dq+pie_s;
|
|
|
|
|
R = rho_R*R(-1)+(1-rho_R)*(psi1*pie+psi2*(y+alpha*(2-alpha)*((1-tau)/tau)*y_s)+psi3*de)+e_R;
|
|
|
|
|
|
|
|
|
|
// Block of type “Evaluate forward”
|
|
|
|
|
dq = rho_q*dq(-1)+e_q;
|
|
|
|
|
y_s = rho_ys*y_s(-1)+e_ys;
|
|
|
|
|
pie_s = rho_pies*pie_s(-1)+e_pies;
|
|
|
|
|
A = rho_A*A(-1)+e_A;
|
|
|
|
|
|
|
|
|
|
// Block of type “Solve forward complete” (linear)
|
|
|
|
|
sfc1 = 0.2*sfc2+0.5*sfc1(-1)+e_sfc1;
|
|
|
|
|
sfc2 = 0.1*sfc1+0.5*sfc2(-1)+e_sfc2;
|
|
|
|
|
|
|
|
|
|
// Block of type “Solve backward complete” (linear)
|
|
|
|
|
sbc1 = sbc1(1)-0.5*(sbc3-sbc2(1))+e_sbc;
|
|
|
|
|
sbc2 = 0.1*sbc1 + 0.9*sbc2(1);
|
|
|
|
|
sbc3 = 1.5*sbc2+0.5*sbc1;
|
|
|
|
|
|
|
|
|
|
// Block of type “Evaluate backward”, see #1727
|
|
|
|
|
eb = 0.9*eb(+1) + e_eb;
|
|
|
|
|
|
|
|
|
|
// Block of type “Solve two boundaries simple” (linear)
|
|
|
|
|
stbs - 0.8*stbs(-1) = 0.9*(stbs(+1)-0.8*stbs) + e_stbs;
|
|
|
|
|
|
|
|
|
|
// Block of type “Solve backward simple” (linear)
|
|
|
|
|
// NB: The LHS is deliberately not a single variable, otherwise is would be classified as “Evaluate backward”
|
|
|
|
|
sbs - 0.8*sbs(1) = e_sbs;
|
|
|
|
|
|
|
|
|
|
// Block of type “Solve forward simple” (linear)
|
|
|
|
|
// NB: The LHS is deliberately not a single variable, otherwise is would be classified as “Evaluate forward”
|
|
|
|
|
sfs - 0.8*sfs(-1) = e_sfs;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Block of type “Solve forward complete” (nonlinear)
|
|
|
|
|
log(nsfc1) = 0.2*log(nsfc2)+0.5*log(nsfc1(-1))+e_nsfc1;
|
|
|
|
|
log(nsfc2) = 0.1*log(nsfc1)+0.5*log(nsfc2(-1))+e_nsfc2;
|
|
|
|
|
|
|
|
|
|
// Block of type “Solve backward complete” (nonlinear)
|
|
|
|
|
log(nsbc1) = log(nsbc1(1))-0.5*(log(nsbc3)-log(nsbc2(1)))+e_nsbc;
|
|
|
|
|
log(nsbc2) = 0.1*log(nsbc1) + 0.9*log(nsbc2(1));
|
|
|
|
|
log(nsbc3) = 1.5*log(nsbc2)+0.5*log(nsbc1);
|
|
|
|
|
|
|
|
|
|
// Block of type “Solve two boundaries simple” (nonlinear)
|
|
|
|
|
log(nstbs) - 0.8*log(nstbs(-1)) = 0.9*(log(nstbs(+1))-0.8*log(nstbs)) + e_nstbs;
|
|
|
|
|
|
|
|
|
|
// Block of type “Solve backward simple” (nonlinear)
|
|
|
|
|
log(nsbs) = 0.8*log(nsbs(1)) + e_nsbs;
|
|
|
|
|
|
|
|
|
|
// Block of type “Solve forward simple” (nonlinear)
|
|
|
|
|
log(nsfs) = 0.8*log(nsfs(-1)) + e_nsfs;
|
|
|
|
|
|
|
|
|
|
// Block of type “Solve two boundaries complete” (nonlinear)
|
|
|
|
|
// NB: This is a variation of example1.mod
|
|
|
|
|
nstbc_c*nstbc_theta*nstbc_h^(1+nstbc_psi)=(1-nstbc_alpha)*nstbc_y;
|
|
|
|
|
nstbc_k = nstbc_beta*(((exp(e_nstbc)*nstbc_c)/(exp(e_nstbc(+1))*nstbc_c(+1)))*(exp(e_nstbc(+1))*nstbc_alpha*nstbc_y(+1)+(1-nstbc_delta)*nstbc_k));
|
|
|
|
|
nstbc_y = (nstbc_k(-1)^nstbc_alpha)*(nstbc_h^(1-nstbc_alpha));
|
|
|
|
|
nstbc_k = exp(e_nstbc)*(nstbc_y-nstbc_c)+(1-nstbc_delta)*nstbc_k(-1);
|
2009-12-16 18:25:06 +01:00
|
|
|
|
end;
|
|
|
|
|
|
2022-03-16 14:58:27 +01:00
|
|
|
|
initval;
|
|
|
|
|
nsfc1=1;
|
|
|
|
|
nsfc2=1;
|
|
|
|
|
nsbc1=1;
|
|
|
|
|
nsbc2=1;
|
|
|
|
|
nsbc3=1;
|
|
|
|
|
nstbs=1;
|
|
|
|
|
nsfs=1;
|
|
|
|
|
nsbs=1;
|
|
|
|
|
nstbc_y = 1.08068253095672;
|
|
|
|
|
nstbc_c = 0.80359242014163;
|
|
|
|
|
nstbc_h = 0.29175631001732;
|
|
|
|
|
nstbc_k = 11.08360443260358;
|
2009-12-16 18:25:06 +01:00
|
|
|
|
end;
|
|
|
|
|
|
2010-10-22 15:50:54 +02:00
|
|
|
|
steady(solve_algo = @{solve_algo});
|
2009-12-16 18:25:06 +01:00
|
|
|
|
|
2010-10-22 15:50:54 +02:00
|
|
|
|
@#if block
|
2009-12-16 18:25:06 +01:00
|
|
|
|
model_info;
|
2010-10-22 15:50:54 +02:00
|
|
|
|
@#endif
|
|
|
|
|
|
|
|
|
|
check;
|
2009-12-16 18:25:06 +01:00
|
|
|
|
|
|
|
|
|
shocks;
|
2022-03-16 14:58:27 +01:00
|
|
|
|
var e_R;
|
|
|
|
|
periods 3;
|
|
|
|
|
values 0.01;
|
2009-12-16 18:25:06 +01:00
|
|
|
|
|
2022-03-16 14:58:27 +01:00
|
|
|
|
var e_q;
|
|
|
|
|
periods 1;
|
|
|
|
|
values 0.5;
|
|
|
|
|
|
|
|
|
|
var e_eb;
|
|
|
|
|
periods 19;
|
|
|
|
|
values 1;
|
|
|
|
|
|
|
|
|
|
var e_sfc1;
|
|
|
|
|
periods 9;
|
|
|
|
|
values 0.2;
|
|
|
|
|
|
|
|
|
|
var e_sfc2;
|
|
|
|
|
periods 12;
|
|
|
|
|
values -0.4;
|
|
|
|
|
|
|
|
|
|
var e_sbc;
|
|
|
|
|
periods 17 18;
|
|
|
|
|
values 0.3 -0.1;
|
|
|
|
|
|
|
|
|
|
var e_stbs;
|
|
|
|
|
periods 15;
|
|
|
|
|
values -0.15;
|
|
|
|
|
|
|
|
|
|
var e_sbs;
|
|
|
|
|
periods 5;
|
|
|
|
|
values 0.2;
|
|
|
|
|
|
|
|
|
|
var e_sfs;
|
|
|
|
|
periods 7;
|
|
|
|
|
values -0.2;
|
|
|
|
|
|
|
|
|
|
var e_nsfc1;
|
|
|
|
|
periods 9;
|
|
|
|
|
values 0.2;
|
|
|
|
|
|
|
|
|
|
var e_nsfc2;
|
|
|
|
|
periods 12;
|
|
|
|
|
values -0.4;
|
|
|
|
|
|
|
|
|
|
var e_nsbc;
|
|
|
|
|
periods 17 18;
|
|
|
|
|
values 0.3 -0.1;
|
|
|
|
|
|
|
|
|
|
var e_nstbs;
|
|
|
|
|
periods 15;
|
|
|
|
|
values -0.15;
|
|
|
|
|
|
|
|
|
|
var e_nsbs;
|
|
|
|
|
periods 5;
|
|
|
|
|
values 0.2;
|
|
|
|
|
|
|
|
|
|
var e_nsfs;
|
|
|
|
|
periods 7;
|
|
|
|
|
values -0.2;
|
|
|
|
|
|
|
|
|
|
var e_nstbc;
|
|
|
|
|
periods 3;
|
|
|
|
|
values 0.009;
|
|
|
|
|
end;
|
2009-12-16 18:25:06 +01:00
|
|
|
|
|
2022-03-16 14:58:27 +01:00
|
|
|
|
perfect_foresight_setup(periods=20);
|
|
|
|
|
perfect_foresight_solver(no_homotopy, markowitz=0, stack_solve_algo = @{stack_solve_algo});
|