Isomorph2026/isomorph-supply-chain-sample
ISOMORPH Sample A single-rollout subset of the ISOMORPH release, intended for users who want to inspect file formats and run loaders before pulling the full dataset. We release multivariate logistics time-series data generated by a digital-twin (DT) simulator of a multi-echelon supply chain with an explicit routing network, with the underlying dynamics formulated as a Markov chain. Overview The simulator advances a directed routing graph of factories, intermediate… See the full description on the dataset page: https://huggingface.co/datasets/Isomorph2026/isomorph-supply-chain-sample.
ISOMORPH Sample
A single-rollout subset of the ISOMORPH release, intended for users who want to inspect file formats and run loaders before pulling the full dataset. We release multivariate logistics time-series data generated by a digital-twin (DT) simulator of a multi-echelon supply chain with an explicit routing network, with the underlying dynamics formulated as a Markov chain.
Overview
The simulator advances a directed routing graph of factories, intermediate warehouses, and a customer-facing destination forward in discrete time. At each step, random Poisson customer demand arrives at the destination, is served from on-hand stock, and triggers replenishment along the network. The network is a directed graph $G=(\mathcal{N},\mathcal{E})$ with three node roles (factories, warehouses, destination), integer per-edge transit times $\taue$, and per-step volume capacities $Ke Ve$; Dijkstra's algorithm routes every shipment. The dynamics form a Markov chain $\xi{t+1} = \Psi(\xit, yt, Lt)$, where $\Psi$ is a deterministic transition map and $(yt, Lt)$ are the only random inputs (Poisson customer demand and Gaussian source lead times). The demand intensity is a five-component sum: yearly seasonality, weekly seasonality, AR(1) drift, per-item bursts, and a shared macro shock that lifts every item's intensity simultaneously. The state vector $\xit$ records on-hand stock, backlog, outstanding orders, in-transit shipments, and a smoothed demand estimate at every location for every item. The released rollout runs on a 13-node US topology (3 sources, 9 warehouses across 5 tiers, NYC destination).
Contents
Rollout summary
- Family:
baseline - Catalogue size C = 50 items
- Horizon T = 52,560 days
- Seed: 2025
- All knobs at simulator defaults; see
manifest.csvfor exact values - Approximate on-disk size: ~1.9 GB
Manifest schema
manifest.csv has one row per rollout (just one in this sample) and the following columns:
Three additional simulator knobs are held fixed and therefore omitted from the manifest: seasonal_scale = 1.0, base_lambda_lo = 80.0, base_lambda_hi = 250.0. The exact values are still recorded in output_item50/scenario.json.
File schema
Directory layout:
isomorph_sample/
├── manifest.csv
├── README.md
├── LICENSE
└── output_item50/
├── daily_records.parquet
├── shipments.parquet
├── service_summary.parquet
├── inventory_history.parquet
├── backlog_history.parquet
├── intransit_history.parquet
├── demand_signals.npy
├── demand_signals_cols.txt
├── scenario.json
├── edge_list.parquet
├── edge_utilisation.npy
└── edge_saturation.npyT is the run horizon (52,560 for the released rollout), C is the catalogue size (50), and E is the number of edges in the network.
Quick load
import pandas as pd
import numpy as np
manifest = pd.read_csv("manifest.csv")
row = manifest.iloc[0]
X = np.load(f"{row.path}/demand_signals.npy") # T x C
cols = open(f"{row.path}/demand_signals_cols.txt").read().strip().split(",")
records = pd.read_parquet(f"{row.path}/daily_records.parquet")Next step
For the full benchmark (49 rollouts including mixture sweeps and 20 LHS UQ perturbations), see ../isomorph_full/.
Licence
CC-BY-4.0 (see LICENSE).
