"""
This module contains a regression test for the simulation, discounting and some
estimation functions. The test first draws a random dictionary with some constraints
to ensure enough observations. It then simulates a dataset and the compares the
discounted utility average over all buses, with the theoretical expected value
calculated by the NFXP.
"""
import numpy as np
from numpy.testing import assert_allclose
from ruspy.estimation.estimation_transitions import create_transition_matrix
from ruspy.model_code.cost_functions import calc_obs_costs
from ruspy.model_code.cost_functions import quadratic_costs
from ruspy.model_code.fix_point_alg import calc_fixp
from ruspy.simulation.simulation import simulate
from ruspy.test.ranodm_init import random_init
from ruspy.test.regression_sim_tests.regression_aux import discount_utility
[docs]def test_regression_simulation(inputs):
init_dict = random_init(inputs)
# Draw parameter
param_1 = np.random.normal(11.5, 0.2)
param_2 = np.random.normal(47, 0.5)
param_3 = np.random.normal(0.2, 0.02)
params = np.array([param_1, param_2, param_3])
disc_fac = init_dict["simulation"]["discount_factor"]
probs = np.array(init_dict["simulation"]["known_trans"])
num_states = 500
trans_mat = create_transition_matrix(num_states, probs)
costs = calc_obs_costs(num_states, quadratic_costs, params, 0.0001)
ev = calc_fixp(trans_mat, costs, disc_fac)[0]
df = simulate(init_dict["simulation"], ev, costs, trans_mat)
v_disc = discount_utility(df, disc_fac)
assert_allclose(v_disc / ev[0], 1, rtol=1e-02)