Reproducible discrete-time testbed for the paper QoS-Aware Task Placement and Conditional Deferral in Edge–Fog–Cloud Industrial Monitoring under Intermittent Connectivity.
The model represents task placement across edge, fog and cloud nodes under a three-state Markov communication channel (good, degraded, outage). It compares four policies on the same paired workloads and channel traces:
static_edge;static_offload;reactive_threshold;adaptive_opt(the proposed method).
All data in this repository are synthetic and generated by the included code. No proprietary or field telemetry is used.
Each task is described by arrival time, input size, required compute, memory, deadline and priority. The simulator advances in fixed steps of 1 s and accounts for compute queues, a shared communication queue, transmission time, link loss, RTT, task deferral and deadline violations.
Deferral of non-critical work is conditioned on the observed link state (policy.buffer_gate: "reactive"). Two further gate variants are provided for the ablation study only and are not part of the proposed method:
predictive— additionally requires an estimated probability of a good next state above a threshold. This variant is inert under every declared scenario, because the trueP(good | degraded)is at most 0.300 while the threshold is 0.65; the rule fires on 0.010 % of opportunities.oblivious— no channel condition at all.
The controller maintains a Laplace-smoothed first-order estimate of the channel transition matrix. It never reads the true matrix used by the generator, and under the default configuration the estimate does not gate any decision; it is retained as a subject of the ablations.
- Python 3.11 or newer;
- NumPy;
- Matplotlib (only for figures).
Create an isolated environment and install the project:
python -m venv .venv
source .venv/bin/activate
python -m pip install -e .On Windows PowerShell, activate with .venv\Scripts\Activate.ps1.
From the project root:
python reproduce.pyThis command runs unit tests, executes 1080 runs (3 connectivity regimes × 3 loads × 4 policies × 30 seeds), aggregates the metrics, creates the article table and builds 300-dpi PNG and vector PDF figures.
python -m phenma_sim.cli run-grid --config configs/base.json --output results/raw/runs.csv --seeds 30
python -m phenma_sim.cli aggregate --input results/raw/runs.csv --output results/aggregated/summary.csv
python -m phenma_sim.cli figures --input results/aggregated/summary.csv --output-dir results/figures --load medium
python -m unittest discover -s tests -vIf the package has not been installed, prefix commands with PYTHONPATH=src on Linux/macOS or $env:PYTHONPATH="src" in PowerShell.
results/raw/runs.csv— one record per run;results/aggregated/summary.csv— means and deterministic percentile-bootstrap 95% confidence intervals across seeds;results/aggregated/article_table2.csv— compact medium-load table for the paper; critical delivery means completion within the application deadline;results/figures/figure2_latency_cost.*— latency/cost figure;results/figures/figure3_qos.*— QoS/critical-delivery figure.
The same numeric seed creates the same workload and connectivity path for every policy. Policies therefore receive paired experimental inputs. All parameters are explicit in configs/base.json; generated results are never embedded in source code.
This is a controlled synthetic model, not a calibrated digital twin. CPU execution and shared-link service are modeled deterministically conditional on sampled task attributes and channel observations. Findings must be reported as simulation evidence and not as field validation.