Skip to main content

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

Project description

s2mflow

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

pip install s2mflow

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

Uploaded CPython 3.13Windows x86-64

s2mflow-0.1.13-cp313-cp313-manylinux_2_28_x86_64.whl (336.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

s2mflow-0.1.13-cp313-cp313-manylinux_2_28_aarch64.whl (331.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

s2mflow-0.1.13-cp313-cp313-macosx_11_0_arm64.whl (292.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

s2mflow-0.1.13-cp313-cp313-macosx_10_12_x86_64.whl (301.1 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: s2mflow-0.1.13.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.13.tar.gz
Algorithm Hash digest
SHA256 9cc52079d10c00f6f4b2c78408de88a3ca92b70520728cf996399f93529e117f
MD5 f4b987f8e411b4735ac9f9fd1f9c470c
BLAKE2b-256 9a89cb0b89472ab1d513913e06d9ff256b0a55aff61dd63726706261d198661a

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: s2mflow-0.1.13-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 193.0 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.13-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f7f4535e11b83e5906a0927d88e68c6b041fab327618d47304203656694b911e
MD5 2f58e6af1c52b0d88545e7dcab17266d
BLAKE2b-256 ae940aa24808cc66934f252ed48a93f23643ec421962c29cb815fdf1f9f737a6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for s2mflow-0.1.13-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 19f02f5ef5ce8c21cfc19c11acce5aced4565e7997252bb7650a225bff4f8cc8
MD5 ff5a2b2356ef6fedf58f1a17e8cdab0f
BLAKE2b-256 885537f6e7ff0787abad3620417175b65e41de82dad62e34b44a1640089752cf

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for s2mflow-0.1.13-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 8a0015240f58cda08985b998838c5ecee67907e0621c173a3daa68e9ae7eb7fc
MD5 5cc84f144941ed1cd41653e14d89d416
BLAKE2b-256 43e4cfc1fad2d87b593c525599a512f172265870e5ddd64a18ec38ca384dd451

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for s2mflow-0.1.13-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 44b85904c82e297190322e72881632db6f2e9ea57aa6c705477d55cb43b166a3
MD5 48aaf5eb197fb6a0b4a32af82deada5e
BLAKE2b-256 0a384d27fc544edfce3bd580588f4453d304f802844a9c73a71e0d4c9a342d8d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for s2mflow-0.1.13-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ebf27006b14f51c6939f59c8e431c7fb537aaea87570fa6c49747c8b2a742e6a
MD5 125ac9e1177e1bd42b9b62574eea66f4
BLAKE2b-256 3fa06189359cce1ec54f75ab60ada5601ff979837372684dba365f9ebe5896eb

See more details on using hashes here.

Provenance

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