Пример #1
0
def test_lorenz() -> None:
    error = math.inf
    window = 0
    prior_mu: Union[Tuple[float, float, float],
                    Tuple[numpy_types, numpy_types,
                          numpy_types]] = (3., 3., 3.)

    model = LorenzModel(sigma, beta, rho, time_step)
    observed = list(model.run_model(window_size * max_windows))

    while error > converged_error and window < max_windows:
        xt0 = Gaussian(prior_mu[0], 1.0)
        yt0 = Gaussian(prior_mu[1], 1.0)
        zt0 = Gaussian(prior_mu[2], 1.0)
        graph_time_steps = list(build_graph((xt0, yt0, zt0)))
        xt0.set_and_cascade(prior_mu[0])
        yt0.set_and_cascade(prior_mu[1])
        zt0.set_and_cascade(prior_mu[2])
        apply_observations(graph_time_steps, window, observed)

        optimizer = GradientOptimizer(xt0)
        optimizer.max_a_posteriori()
        posterior = get_time_slice_values(graph_time_steps, window_size - 1)

        post_t = (window + 1) * (window_size - 1)
        actual_at_post_t = observed[post_t]

        error = math.sqrt((actual_at_post_t.x - posterior[0])**2 +
                          (actual_at_post_t.y - posterior[1])**2 +
                          (actual_at_post_t.z - posterior[2])**2)
        prior_mu = (posterior[0], posterior[1], posterior[2])
        window += 1

    assert error <= converged_error
Пример #2
0
    return list(map(lambda v: v.get_value(), time_slice))


error = math.inf
window = 0
prior_mu = (3., 3., 3.)

model = LorenzModel(sigma, beta, rho, time_step)
observed = list(model.run_model(window_size * max_windows))

while error > converged_error and window < max_windows:
    xt0 = Gaussian(prior_mu[0], 1.0)
    yt0 = Gaussian(prior_mu[1], 1.0)
    zt0 = Gaussian(prior_mu[2], 1.0)
    graph_time_steps = list(build_graph((xt0, yt0, zt0)))
    xt0.set_and_cascade(prior_mu[0])
    yt0.set_and_cascade(prior_mu[1])
    zt0.set_and_cascade(prior_mu[2])
    apply_observations(graph_time_steps, window, observed)

    optimizer = GradientOptimizer(xt0)
    optimizer.max_a_posteriori()
    posterior = get_time_slice_values(graph_time_steps, window_size - 1)

    post_t = (window + 1) * (window_size - 1)
    actual_at_post_t = observed[post_t]

    error = math.sqrt((actual_at_post_t.x - posterior[0])**2 +
                      (actual_at_post_t.y - posterior[1])**2 +
                      (actual_at_post_t.z - posterior[2])**2)
    prior_mu = (posterior[0], posterior[1], posterior[2])