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.10.tar.gz (7.8 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.10-cp313-cp313-win_amd64.whl (199.4 kB view details)

Uploaded CPython 3.13Windows x86-64

s2mflow-0.1.10-cp313-cp313-manylinux_2_28_x86_64.whl (341.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

s2mflow-0.1.10-cp313-cp313-manylinux_2_28_aarch64.whl (335.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

s2mflow-0.1.10-cp313-cp313-macosx_11_0_arm64.whl (296.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

s2mflow-0.1.10-cp313-cp313-macosx_10_12_x86_64.whl (305.5 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: s2mflow-0.1.10.tar.gz
  • Upload date:
  • Size: 7.8 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.10.tar.gz
Algorithm Hash digest
SHA256 75e59ac3f1b28445a6d664e9e484257bfc748a389abcf89542240f7ccba202ae
MD5 0a50beecead01f5be260affa24f8ec74
BLAKE2b-256 3efb9a2380682e078343d8409dc1cf04afad7b611ea6b64bfa66ac795a7e8356

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: s2mflow-0.1.10-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 199.4 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.10-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 42921fb3f6de359ed3e8ee3b109c60b141107ff225c0a2cf6dcc6a47ac56664c
MD5 b811b346bce310256b15c7c183404b07
BLAKE2b-256 77c5039e663346784bd015e0e7e148a44a29c5cc94fcf918c464fc5cfb3d289a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for s2mflow-0.1.10-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d9660272c930bfde78da8624afd8e6e29e84a6713730b1559208373e584dd653
MD5 ecfdcb3a8177bbf06628fe1ef3ad697c
BLAKE2b-256 dcc601fe82225d87ca263da3486a75be7db524c364b3333e93a5a32f46c74f47

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for s2mflow-0.1.10-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 57ce0f5574a5f90778b4590cf4c49a92398ceb15063a602e55a3ad4cc4cdbbe8
MD5 c4cb7dabc8c0bec602a02989f37deb28
BLAKE2b-256 8338a254a99ab13d35c7d0c6331f33f77271d6130af8260927f9c031df55ffec

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for s2mflow-0.1.10-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 48a5bb8d8af13115628e4968173e6933fcaed7baa7a8d88897b0e796873c223f
MD5 ac5d144f0d15de590434a6ed0b656530
BLAKE2b-256 f3ff71f9e77abfa79cc9729fa0696fa135838f7b2b4e630773ac9dd5e41025ff

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for s2mflow-0.1.10-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3c6946d06aeb29ef909fda5cc6fd930dd0dc4da730ef4fb7097039ddaa8ca6ed
MD5 2c55efc5492df9e01eb38f3adabcd626
BLAKE2b-256 e58502b103c6f74b391877a6d95705b5886612efc672b8b542aefdd4788499ba

See more details on using hashes here.

Provenance

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