A self-contained environment for the FROST project: a platform for service-oriented manufacturing systems, evaluated on the ICE laboratory production line.
Every component is a local folder in this archive and is built from these sources. Nothing is cloned or downloaded from the project's own repositories, and no build outputs are shipped — everything is compiled on your machine.
| Folder | Role |
|---|---|
machine-data-model/ |
Library. Machine data models and the Frost message protocol. |
frost-planner/ |
Library. Flexible Job-Shop scheduling and execution. |
frost-bench/ |
The project. Benchmarks and experiments; this is what you run. |
frost-bench/ice-frost/ |
The ICE laboratory case study, built on the Frost platform. |
frost-bench/ice-frost/frost/ |
The Frost platform itself (Lingua Franca sources). |
frost-bench/benchmarks/pallet-selection/ |
The pallet-selection benchmark: sources, configs, and result data. |
frost-bench/python-utils/ |
Standalone helpers (data-model validation, OPC UA node export). |
The two libraries are installed once into a single shared virtual environment and linked in editable mode, so the folders above stay the single source of truth.
There is a single requirements.txt at the root covering the whole project.
frost-bench, ice-frost and frost carry no requirements.txt or
pyproject.toml of their own — they are plain folders, not separately
installable projects.
| File | Purpose |
|---|---|
setup.sh |
Creates the shared environment, builds and links both libraries, installs dependencies. |
env.sh |
Activates the environment and exports every project path, derived from PROJECT_ROOT. Source it, don't execute it. |
requirements.txt |
All third-party dependencies for the whole project. |
frost-bench/run-pallet-selection.sh |
Builds and runs the pallet-selection benchmark in simulation. |
- Python 3.13.
setup.shenforces it and finds apyenv-managed 3.13 automatically. The simulations are compiled against the interpreter that built the environment, so the version must stay consistent. - The Lingua Franca compiler (
lfc) onPATH— see https://www.lf-lang.org. Required to build the simulations from source. - A C toolchain (
cc,cmake), used bylfcand by a few native wheels. - Optional: Docker, only for the MQTT and OPC UA integration tests.
./setup.sh # build the environment (once)
source env.sh # activate it in each new shellsetup.sh selects a Python 3.13 interpreter (override with PYTHON=...),
creates the environment at ./.venv (override with VENV=...), builds and links
both libraries from these sources, installs the remaining dependencies, and
verifies that each library imports from its local folder.
Prefer source env.sh over activating the virtualenv directly: besides putting
the environment on PATH, it exports the project paths and the PYTHONPATH
entry that the generated simulations need.
source env.sh
cd frost-bench
./run-pallet-selection.sh # every benchmark, every metric
./run-pallet-selection.sh lego # one benchmark, its default metrics
./run-pallet-selection.sh lego ID # one benchmark, one metric
./run-pallet-selection.sh --list # show what is availableThe script creates the environment if it is missing and invokes lfc to build
each simulation on first use. All paths come from env.sh; nothing is
hard-coded. Results are written to
frost-bench/benchmarks/pallet-selection/results/<benchmark>/sim-<metric>/.
| Benchmark | Simulation target | Metrics |
|---|---|---|
distance |
DistanceSim |
DISTANCE, RANDOM, ID |
lego |
LegoSim |
DISTANCE, ID |
movements |
LegoMovementsSim |
DISTANCE, ID |
recipes |
LegoRecipesSim |
DISTANCE, ID |
The metric selects the pallet-selection strategy. For the distance benchmark
the resulting makespans order as DISTANCE < RANDOM < ID, the expected result.
Only simulation mode runs from this archive. The opcua mode
(ice-frost/script/run_ua.sh) drives the physical ICE laboratory plant over
OPC UA and needs that hardware, so it cannot be exercised here.
frost-bench/benchmarks/pallet-selection/ also carries the experimental
material behind the reported results:
| Path | Contents |
|---|---|
results/ |
Raw data from the published runs, in timestamped *-sim-* and *-opcua-* directories. |
results/*.ipynb, results/{base,core}.py |
Notebooks and helpers that turn that raw data into the reported figures. |
python_utils/ |
Scripts that regenerate the figures and derived tables — see python_utils/COMMANDS.md. |
Figures are not shipped as PDFs; they are regenerated from results/ by the
notebooks and by python_utils/gen_figure7_variants.py and
python_utils/gen_figure7_yaxis.py.
Runs you start yourself go to results/<benchmark>/sim-<metric>/ and will not
overwrite the published data.
The complete plant model, as opposed to the pallet-selection benchmark:
source env.sh
cd frost-bench/ice-frost
lfc src/Main.lf # build
./script/run_sim.sh # run in simulationsource env.sh
(cd machine-data-model && python -m pytest tests -q)
(cd frost-planner && python -m pytest tests -q)Expected: 703 passed for machine-data-model, 124 passed for
frost-planner.
Two environment-dependent results, unrelated to the code itself:
- The MQTT integration tests start a Mosquitto broker in Docker and error out when no Docker daemon is available.
- Run the
machine-data-modelsuite from inside its own directory: a few tests resolve fixture paths relative to the current directory.
The Frost reactors have their own Lingua Franca test suite, which lfc builds
and runs:
source env.sh
cd frost-bench/ice-frost/frost/test
./run_all.sh # builds, then runs, each testExpected: 16 builds and 16 runs pass.
- Source only.
src-gen/,include/,bin/andbuild/are build outputs and are generated on your machine bylfcand the.shscripts. No prebuilt binaries are shipped, so nothing is tied to the machine that produced this archive. - Self-signed OPC UA client certificates are likewise not shipped: they are regenerated on connect and embed the hostname of the machine that created them.
- Copyright notices,
SPDX-FileCopyrightTextheaders, author metadata and documentation titles attribute the work to "the Frost Platform contributors". References to the original hosting repositories now point at the folders in this archive. - "ICE" / "ICE laboratory" is the publicly documented case study this work evaluates and is named as such throughout.
FrostReactor.lfexposes aconnected_to_linklogical action, signalled once target discovery completes, which the benchmark schedulers use to start working only after the bus is usable.