Simulating data¶
The micropurc.simulation package draws synthetic trips from the
microPURC model at a known parameter vector, which is useful for testing
estimator recovery. The
DGP combines a network, a forward solver, a
route sampler, and an origin-destination demand.
import numpy as np
from micropurc import (
Network, PIQPFlowSolver, DGP, DGPConfig,
MarkovSampler, od_uniform_all_pairs,
)
net = Network.grid(rows=4, cols=4, K=3)
net.attribute_names = ["length", "time", "toll"]
rng = np.random.default_rng(0)
beta_true = np.array([1.0, 0.5, 0.8])
# The quadratic-perturbation scale must be strictly positive on every link;
# any positive per-link vector works.
scale_m = rng.uniform(0.5, 1.5, net.num_links)
solver = PIQPFlowSolver(net, scale_m)
dgp = DGP(
network=net,
beta_true=beta_true,
forward_solver=solver,
route_sampler=MarkovSampler(net),
od_dist=od_uniform_all_pairs(net),
rng=rng,
config=DGPConfig(),
)
data = dgp.sample_dataset(n_trips=500)
data holds the sampled route indicators, the design Z, node imbalances,
and the origin/destination arrays – exactly the inputs
fit() expects, so a recovery
experiment is a simulate-then-estimate round trip.