% Imperfect information and optimal monetary policy

close all;

var lambda p c infl G;

varexo v PSI;
% v is markup shock term
% PSI is noise of signal of markup shock

parameters beta gamma psi alpha LAMBDA rho_lambda phi_c phi_a phi_lambda delta;

beta = 0.99; % subjective time preference
gamma = 1; % inverse of the intertemporal elasticity of substitution
psi = 1; % inverse of the Frisch elasticity of labor supply
alpha = 0.67; % elasticity of output with repect to labor input
LAMBDA = 0.25; % desired mark-up
rho_lambda=0; % persistent parameter of desired mark-up process

% Simplifying Parameter
phi_c = (psi/alpha+gamma+(1-alpha)/alpha)/(1+(1-alpha)/alpha*(1+LAMBDA)/LAMBDA);
phi_a = (psi/alpha+1/alpha)/(1+(1-alpha)/alpha*(1+LAMBDA)/LAMBDA);
phi_lambda = (LAMBDA/(1+LAMBDA))/(1+(1-alpha)/alpha*(1+LAMBDA)/LAMBDA);
delta = (((1+LAMBDA-alpha) / ((1+LAMBDA)*alpha))*((1+1/LAMBDA)^2)) / (gamma-1+1/alpha*(1+psi));

model(linear); % Optimal monetary policy response to markup shock
lambda = rho_lambda*lambda(-1) + v;
p = ((phi_c*G+phi_lambda)/(phi_c+PSI/(v/(1-rho_lambda^2))))*lambda;
c = ((PSI/(v/(1-rho_lambda^2))*G-phi_lambda)/(phi_c+PSI/(v/(1-rho_lambda^2))))*lambda;
infl = ((phi_c*G+phi_lambda)/(phi_c+PSI/(v/(1-rho_lambda^2))))*PSI;
G = ((1-delta*phi_c)*phi_lambda) / (PSI/(v/(1-rho_lambda^2))+(delta*phi_c^2));
end;

shocks;
var v;
stderr 0.2;
var PSI;
stderr 0.4;
end;

planner_objective c^2 + delta*infl^2;

ramsey_policy(planner_discount=0.99);