Skip to main content

Meta-generator: generating multicommodity flow instances from single-commodity flow instances.

Project description

s2mflow

CI Documentation License: MIT Python Version

A high-performance meta-generation framework for lifting single-commodity flow instances into the multicommodity space.

s2mflow is a Python library PyPI with a high-speed Rust core (via PyO3) designed to transform single-commodity minimum-cost flow (MCF) instances into minimum-cost multicommodity flow (MCMCF) instances. It is built for researchers in Operations Research, Mathematical Optimization, and Network Optimization who need to generate reproducible, scalable test data.

s2mflow implements and extends the meta-generation framework introduced in:

Felix P. Broesamle and Stefan Nickel. 2026. "On the Single-Multi-Commodity Gap: Lifting Single- to Multicommodity Flow Instances". Optimization Online. Preprint. Available at https://optimization-online.org/?p=34287.

Key Features

  • High Performance: Core logic implemented in Rust for zero-overhead data handling.
  • DIMACS Compatible: Load standard .min single-commodity files.
  • Custom MCMCF Format: Introduces the .mcfmin format for standardized multicommodity data storage.
  • Supply Partitioning Methods:
    • uniform: Equal distribution of supply and demand across commodities.
    • spread: Randomized, heterogeneous distribution of supply and demand across commodities.
  • Randomizing Capacities and Costs: Functionality for generating randomized commodity-specific capacities and costs for each arc.
  • Network Utilities: Support for identifying incoming and outgoing edges.

The Extended .mcfmin Format

The library uses a natural extension of the DIMACS .min format to support multiple commodities:

  • Problem Line: p min <num_nodes> <num_edges> <num_commodities> <randomize_caps> <randomize_costs> <is_uniform> <seed = 0>.
    • seed: relevant if is_uniform = 0 (Spread method) or if randomization of commodity-specific capacities or costs is enabled (randomize_caps = 1 or randomize_costs = 1).
  • Node Line: n <node_id> <total_demand> <demand_com_1> <demand_com_2> ... <demand_com_K>.
  • Arc Line: Depending on the randomization flags (randomize_caps, randomize_costs):
    • Default (0, 0): a <from> <to> <low> <cap_total> <cap_total> <cost>.
    • Commodity-specific capacities (1, 0): a <from> <to> <low> <cap_total> <cap_1> ... <cap_K> <cost>.
    • Commodity-specific costs (0, 1): a <from> <to> <low> <cap_total> <cap_total> <cost_1> ... <cost_K>.
    • Commodity-specific capacities and costs (1, 1): a <from> <to> <low> <cap_total> <cap_1> ... <cap_K> <cost_1> ... <cost_K>.

Installation

Standard Installation

pip install s2mflow
# or via poetry
poetry add s2mflow

Building from Source

git clone https://github.com/FelixBroesamle/s2mflow.git
cd s2mflow
poetry install -vvv
poetry run maturin develop --release

Quick Start

# .min example data:
# c  *** Minimum cost flow ***
# c
# p min 5 10
# n 1 10
# n 5 -10
# a 1 2 0 10 9
# a 1 4 0 16 2
# a 2 4 0 10 10
# a 2 3 0 10 1
# a 3 5 0 10 10
# a 3 2 0 20 2
# a 3 4 0 17 9
# a 4 3 0 10 9
# a 4 1 0 10 3
# a 4 2 0 19 2

import s2mflow

# 1. Load a single-commodity network
network = s2mflow.load_min_instance("input.min")

# 2. Generate multicommodity data for 3 commodities
mc_data = s2mflow.generate_multi_commodity_data(
    instance=network,
    num_commodities=3,
    is_uniform=False,
    seed=42,
)

# 3. Save as a multi-commodity instance
s2mflow.save_multi_commodity_instance("output.mcfmin", network, mc_data)

# c Multicommodity flow generated by s2mflow
# p min 5 10 3 0 0 0 42
# n 1 10 2 3 5
# n 5 -10 -2 -3 -5
# a 1 2 0 10 10 9
# a 1 4 0 16 16 2
# a 2 4 0 10 10 10
# a 2 3 0 10 10 1
# a 3 5 0 10 10 10
# a 3 2 0 20 20 2
# a 3 4 0 17 17 9
# a 4 3 0 10 10 9
# a 4 1 0 10 10 3
# a 4 2 0 19 19 2

Citing

If you use s2mflow in your research, please use the following preferred citation for the framework:

@misc{BroesamleNickel:SMCG,
    author = {Broesamle, Felix P. and Nickel, Stefan},
    title = {On the Single-Multi-Commodity Gap: Lifting Single- to Multicommodity Flow Instances},
    year = {2026},
    howpublished = {Optimization Online},
    note = {Preprint. Available at \url{https://optimization-online.org/?p=34287}},
    url = {https://optimization-online.org/?p=34287},
}

To cite s2mflow specifically in your research, please cite the software:

@software{s2mflow2026,
  author = {Broesamle, Felix P. and Nickel, Stefan},
  title = {s2mflow: A Meta-generator for Multicommodity Flow Instances},
  year = {2026},
  url = {https://github.com/FelixBroesamle/s2mflow}
}

Resources

License

Distributed under the MIT License. See LICENSE for more information.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

s2mflow-0.1.15.tar.gz (8.1 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

s2mflow-0.1.15-cp313-cp313-win_amd64.whl (193.3 kB view details)

Uploaded CPython 3.13Windows x86-64

s2mflow-0.1.15-cp313-cp313-manylinux_2_28_x86_64.whl (336.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

s2mflow-0.1.15-cp313-cp313-manylinux_2_28_aarch64.whl (331.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

s2mflow-0.1.15-cp313-cp313-macosx_11_0_arm64.whl (293.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

s2mflow-0.1.15-cp313-cp313-macosx_10_12_x86_64.whl (301.5 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

File details

Details for the file s2mflow-0.1.15.tar.gz.

File metadata

  • Download URL: s2mflow-0.1.15.tar.gz
  • Upload date:
  • Size: 8.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for s2mflow-0.1.15.tar.gz
Algorithm Hash digest
SHA256 a39c1be2415e8ef4ba05a3e7e8bca62322bc638c578fc73b724a49a894b402c8
MD5 251ba8f57fc4cd3536d50ca00f960f12
BLAKE2b-256 d6ccff8debb765ee6686f712d20a92958c4f1bd2b5ff6929f44ce4dcf2f4f273

See more details on using hashes here.

Provenance

The following attestation bundles were made for s2mflow-0.1.15.tar.gz:

Publisher: release.yml on FelixBroesamle/s2mflow

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file s2mflow-0.1.15-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: s2mflow-0.1.15-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 193.3 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for s2mflow-0.1.15-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 5a653591d8c5e2b2341d8b80df855c7d52c5f91ea1852beea194286c4af77de0
MD5 85ae08c6b15024dbd5ff8a7551369a71
BLAKE2b-256 946bd77c71c2b3b8fb85b6f622567e93b27d21573cbc5208720392cbfc619c66

See more details on using hashes here.

Provenance

The following attestation bundles were made for s2mflow-0.1.15-cp313-cp313-win_amd64.whl:

Publisher: release.yml on FelixBroesamle/s2mflow

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file s2mflow-0.1.15-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for s2mflow-0.1.15-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0f7f8e06b2449ffb3f8cc707af3b15acb44771d5f71c4cf7cbbe0db4c644f92b
MD5 0e4e4255ce227645d917046fe5f9d304
BLAKE2b-256 3432c1c5c678c4217d43453b979ef06049834aefed748e2530081292da811c95

See more details on using hashes here.

Provenance

The following attestation bundles were made for s2mflow-0.1.15-cp313-cp313-manylinux_2_28_x86_64.whl:

Publisher: release.yml on FelixBroesamle/s2mflow

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file s2mflow-0.1.15-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for s2mflow-0.1.15-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b21a86922be1f01b082288a11bb79317f776c97a70900a498ed5f1d8bbbbb079
MD5 6eecd626c1b52cbd83563423b257aa50
BLAKE2b-256 2f843d5be7560e6fd055c57d70b34b317b33d74fbc2e51812c9b3bf4ebf1cce8

See more details on using hashes here.

Provenance

The following attestation bundles were made for s2mflow-0.1.15-cp313-cp313-manylinux_2_28_aarch64.whl:

Publisher: release.yml on FelixBroesamle/s2mflow

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file s2mflow-0.1.15-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for s2mflow-0.1.15-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e9dc2c567e60b0d6cea6a342546e836f9eed8c45f290bfc8a2f202631d23ad37
MD5 1fa6f42f3454503f8426c0a90e09b494
BLAKE2b-256 8d3eb20bedd05eb684161eafc6a8ea419b1b2241234612c97e69be831586998b

See more details on using hashes here.

Provenance

The following attestation bundles were made for s2mflow-0.1.15-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: release.yml on FelixBroesamle/s2mflow

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file s2mflow-0.1.15-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for s2mflow-0.1.15-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 914d0c36fa0d956b5099a6182105200c89234b1f79747256c2cada26493e7774
MD5 b28b8b184c8e9b0062e2445a05f1681e
BLAKE2b-256 0268a32b7c3d8581dfb2c53402b605e6f9ea16fbeab18da6677813d9d36306b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for s2mflow-0.1.15-cp313-cp313-macosx_10_12_x86_64.whl:

Publisher: release.yml on FelixBroesamle/s2mflow

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page