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

Uploaded CPython 3.13Windows x86-64

s2mflow-0.1.18-cp313-cp313-manylinux_2_28_x86_64.whl (336.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

s2mflow-0.1.18-cp313-cp313-manylinux_2_28_aarch64.whl (331.3 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

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

Uploaded CPython 3.13macOS 11.0+ ARM64

s2mflow-0.1.18-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.18.tar.gz.

File metadata

  • Download URL: s2mflow-0.1.18.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.18.tar.gz
Algorithm Hash digest
SHA256 3f6aca24db96666fcbce89d840130d57afa97c34d1f400a2e09196c496d75e99
MD5 6b91fc1eaa355810e28138c1df11fa0a
BLAKE2b-256 bf0b86cb191472f3310c2b1e796e63271438f4b6c4890d9850997b44a5c3adb7

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: s2mflow-0.1.18-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.18-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 8e204cd78b61d6ddad2f7f70506edec6b9821643f9705d7c38b739435c79de3f
MD5 4509ec9d0e2828018ae1c18d1256dd23
BLAKE2b-256 a26326ce2ea1dc84ef8c3225d399504e8c3ec6d7c993371f9c22924dc3818ac2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for s2mflow-0.1.18-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b29c807b6a8ac685061306ac2e53d6bd01a4421d71b65e72f72410429465252a
MD5 689fe652757a6093b64f644fae089eec
BLAKE2b-256 9e6a52bd412b282dfd1b337835a831cfffea900c5acfc71542ae621ff38533e6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for s2mflow-0.1.18-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b525f76c459f9a441b4e66859e980d565671a83b97d025b11549caee83cc1bdc
MD5 c846ee715cae6ddc233b5e53a483e76a
BLAKE2b-256 7aa570ae1092cc0974c9f5fa5a488a5ff4ba326a5df2d68d31d30a712e29599a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for s2mflow-0.1.18-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ea691ed5c46962a971e7f07c8fd6ca539a2b750dc120e8d7bec1861c5aa1bbbc
MD5 1cdfdd22feafd53bf9f8a8f65653299f
BLAKE2b-256 a0f118d0176459cdfea3d226c870b94eccfb7d5f5382896e4905c2a7a5c094d0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for s2mflow-0.1.18-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 95994fe8433d4bfaecfa15a29d49151e0e4c41bf44f66cb6a7a4ddb2ebd99549
MD5 5f8cf92dafef8d143d746ce06f10e16a
BLAKE2b-256 eb9d331ed44ce1b9ec67548abd29fd947d06a87a124001767d7b56f28cbab2ce

See more details on using hashes here.

Provenance

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