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 neighboring nodes.

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.19.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.19-cp313-cp313-win_amd64.whl (193.3 kB view details)

Uploaded CPython 3.13Windows x86-64

s2mflow-0.1.19-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.19-cp313-cp313-manylinux_2_28_aarch64.whl (331.3 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.13macOS 11.0+ ARM64

s2mflow-0.1.19-cp313-cp313-macosx_10_12_x86_64.whl (301.4 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: s2mflow-0.1.19.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.19.tar.gz
Algorithm Hash digest
SHA256 6d7e30fa6c98605838da93cc23ba36cbdc3aff731f75fe13adee95790d72aa6c
MD5 53a5b6be7c08539a083c3d31a4f49d6a
BLAKE2b-256 6bf5ebd86debdb7ce8c6579773917c893284c2cdae27d5c1d190c8bed5f786d0

See more details on using hashes here.

Provenance

The following attestation bundles were made for s2mflow-0.1.19.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.19-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: s2mflow-0.1.19-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.19-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 2ca357573777cf6f4da75e0616f4e9f83eb6d450610eeada3d59d66b81078edb
MD5 f9981e175fa3d19476a6fd1ed7fbb4d0
BLAKE2b-256 b151650a8c6da933f75866d61e314e4534804297535750a9df9317780cf198ed

See more details on using hashes here.

Provenance

The following attestation bundles were made for s2mflow-0.1.19-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.19-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for s2mflow-0.1.19-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4e1690a3a54210b03c371b152b2e401a9f07c51ff1aa42326ccfb07cd925ba1a
MD5 8dd61ef36ddae632b705689e6169af63
BLAKE2b-256 6544785c2715d5a2fbef7d0f74923a2ca42652738359bfcb138f84ee23a74a95

See more details on using hashes here.

Provenance

The following attestation bundles were made for s2mflow-0.1.19-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.19-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for s2mflow-0.1.19-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1fb3a9c0d0e41b185d68356f6f785ba8cdf4d4e6db68deb0889a2d12b5f61750
MD5 74afddbd9235d5b25d07b315a727403e
BLAKE2b-256 23692302ccecab0d563ee6dce023fd653dbb85a408e055e3dea8c4c83c748933

See more details on using hashes here.

Provenance

The following attestation bundles were made for s2mflow-0.1.19-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.19-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for s2mflow-0.1.19-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5d3cfe530fa045ce93cedf04a4c3d053cb549ad80a9babdf001a27ae3a54595e
MD5 8bf0dcb0ca3580ab4b9c447d00ceff49
BLAKE2b-256 92cec7d79c74d1c7cb1648f2caf91cefe0bb27864e23cf23fdf48156c491ca6f

See more details on using hashes here.

Provenance

The following attestation bundles were made for s2mflow-0.1.19-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.19-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for s2mflow-0.1.19-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e4f10f3baededf5f5b8cc8ea5222c9e5ca44aaaaf6cf2f700b372fdbb493050c
MD5 7912ae374598621382264af3d094883d
BLAKE2b-256 d563a8a79fcf293d91224ab63db86a151dfb036430f1e44d7725e50ce6a041a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for s2mflow-0.1.19-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