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

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

Uploaded CPython 3.13Windows x86-64

s2mflow-0.1.14-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.14-cp313-cp313-manylinux_2_28_aarch64.whl (331.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

s2mflow-0.1.14-cp313-cp313-macosx_11_0_arm64.whl (293.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

s2mflow-0.1.14-cp313-cp313-macosx_10_12_x86_64.whl (301.3 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: s2mflow-0.1.14.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.14.tar.gz
Algorithm Hash digest
SHA256 f9f4c9704b02ce8769b5eab34ba5061a34f142ed4bd9301cfda4106cba48e311
MD5 db7a7a1fe1d6327ad98787e3b143f033
BLAKE2b-256 fdeb9adbf83dbef2a2c44433d484a4148c0aac82188cba75a84d35aab6f40f0f

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: s2mflow-0.1.14-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 193.1 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.14-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 57f108f87572091c649acf86ab1eb6819d25fb990e2c379ec0878ef6f4ba8b92
MD5 0197c09a98780453f1c093fe02ad03c7
BLAKE2b-256 2a38c8a5d11eabf5b1b62323959fe5e51e57760ef2ae75bd6066578738783bd7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for s2mflow-0.1.14-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0602154b7cd6088c7a029652016b86544d280527450aa792cb672c6e58493820
MD5 cbdf80d9e8385b6e54f6c62f58c1d4f4
BLAKE2b-256 891dc9493ddc5fe7b0039f55833b89493f76737e6be884c17c9db4d18e099ec4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for s2mflow-0.1.14-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 398b8bdc549fa7ec1fb446f497f4842a7b651be8e3a7ac2906bcb05fa3291419
MD5 b10af5c256285d3773d2641c2f9699dc
BLAKE2b-256 39bdc7a5bde18bcf1ee57b7e4e12aa343e9ab57a43f38809285f03bfafba8e54

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for s2mflow-0.1.14-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 efc56caff0fa25ef9e82e164c108cdd6010cddb4b7630d3e9dfc3e44d16ecf7c
MD5 f038e463bc4b651af916f80008f73e4b
BLAKE2b-256 4e27ea9d0aad27eba3dfc73f75424364419cb41eeb5d52b10febac4bee606a60

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for s2mflow-0.1.14-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a212b4756343f34b118d57bf0f86e752aec87e517a34673f8a282ec829a65efd
MD5 7c7410b0f9f6d1f43f7199b1cb22e8ef
BLAKE2b-256 06bc2dce6e4f27311e2d6b3358aefa9a7e0891795fd4c90a47a98f995ad62754

See more details on using hashes here.

Provenance

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