Perfect foresight
Consider a series for the exogenous process (m_t)_{0 \leq t \leq T} given exogenously.
The perfect foresight problem consists in finding the path of optimal controls (x_t)_{0 \leq t \leq T} and corresponding states (s_t)_{0 \leq t \leq T} such that:
Special conditions apply for the initial state and controls. Initial state ({m_0}, {s_0}) is given exogenously. Final states and controls are determined by assuming the exogenous process satisfies m_t=m_T for all t\geq T and optimality conditions are satisfied in the last period:
We assume that \underline{u} and \overline{u} are constants. This is not a big restriction since the model can always be reformulated in order to meet that constraint, by adding more equations.
The stacked system of equations satisfied by the solution is:
Transitions | Arbitrage |
---|---|
s_0 exogenous | f(m_0, s_0, x_0, m_1, s_1, x_1) \perp \underline{u} <= x_0 <= \overline{u} |
s_1 = g(m_0, s_0, x_0, m_1) | f(s_1, x_1, s_2, x_2) \perp \underline{u} <= x_1 <= \overline{u} |
.... | ... |
s_T = g(m_{T-1}, s_{T-1}, x_{T-1}, m_T) | f(m_T, s_T, x_T, m_T, s_T, x_T) \perp \underline{u} <= x_T <= \overline{u} |
The system is solved using a nonlinear solver.
dolo.algos.perfect_foresight.
deterministic_solve
(
model
, verbose=True
, ignore_constraints=False
, exogenous=None
, s0=None
, m0=None
, T=100
, maxit=100
, initial_guess=None
, solver='ncpsolve'
, keep_steady_state=False
, s1=None
, shocks=None
, tol=1e-06
)
Computes a perfect foresight simulation using a stacked-time algorithm.
Typical simulation exercises are:
- start from an out-of-equilibrium exogenous and/or endogenous state: specify s0
and or m0
. Missing values are taken from the calibration (model.calibration
).
- specify an exogenous path for shocks exogenous
. Initial exogenous state m0
is then first value of exogenous values. Economy is supposed to have been at the equilibrium for t<0, which pins
down initial endogenous state s0
. x0
is a jump variable.
If s0 is not specified it is then set equal to the steady-state consistent with the first value
The initial state is specified either by providing a series of exogenous shocks and assuming the model is initially in equilibrium with the first value of the shock, or by specifying an initial value for the states.
model
(Model) — Model to be solvedverbose
(boolean) — if True, the solver displays iterationsignore_constraints
(bool) — if True, complementarity constraints are ignored.exogenous
(array-like, dict, or pandas.DataFrame) — A specification for the path of exogenous variables (aka shocks). Can be any of the following (note by "declaration order" below we mean the order ofmodel.symbols["exogenous"]
):
- A 1d numpy array-like specifying a time series for a single exogenous variable, or all exogenous variables stacked into a single array.
- A 2d numpy array where each column specifies the time series
for one of the shocks in declaration order. This must be an
N
by number of shocks 2d array. - A dict where keys are strings found in
model.symbols["exogenous"]
and values are a time series of values for that shock. For exogenous variables that do not appear in this dict, the shock is set to the calibrated value. Note that this interface is the most flexible as it allows the user to pass values for only a subset of the model shocks and it allows the passed time series to be of different lengths. - A DataFrame where columns map shock names into time series. The same assumptions and behavior that are used in the dict case apply here
exogenous
is set equal to the calibrated values found inmodel.calibration["exogenous"]
for all periods.
If the length of any time-series in shocks is less thanT
(see below) it is assumed that that particular shock will remain at the final given value for the duration of the simulation.s0
(None or ndarray or dict) — If vector with the value of initial states If an exogenous timeseries is given for exogenous shocks,s0
will be computed as the steady-state value that is consistent with its first value.T
(int) — horizon for the perfect foresight simulationmaxit
(int) — maximum number of iteration for the nonlinear solverkeep_steady_state
(bool) — if True, initial steady-states and steady-controls are appended to the simulation with date -1.tol
(float) — stopping criterium for the nonlinear solver
a dataframe with T+1 observations of the model variables along the simulation (states, controls, auxiliaries). The simulation should return to a steady-state consistent with the last specified value of the exogenous shocks.