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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

s2mflow-0.1.16-cp313-cp313-macosx_11_0_arm64.whl (293.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

s2mflow-0.1.16-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.16.tar.gz.

File metadata

  • Download URL: s2mflow-0.1.16.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.16.tar.gz
Algorithm Hash digest
SHA256 a50e89a288a469c1f8a176235b1e171f43e1b4e6eaeba5b3ccf8b64ba1a03828
MD5 fba571b126d81d6310f3d4207eba3b8a
BLAKE2b-256 1bd516fa7a69cc34dbe663337dfe495721876b6f21195655aadc707c2f2d1f08

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: s2mflow-0.1.16-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.16-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 daefc7ef802b0029af6046a6e17aeddc1af15b972aa03ef323df23f98c79464a
MD5 ddb200f498a18f48a73f1d3c8f3b4bfa
BLAKE2b-256 73aaeea5a9b5c2c0d6d0118f2c261446ded4f6c536326727b17eb736a268f179

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for s2mflow-0.1.16-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 236bf31c017609d8ac50ba3601eb789d78b28cf9a308a7b35dc4f2f88b63e17a
MD5 51ce1581cdd8c07fc0af10820cd80704
BLAKE2b-256 90e7641fb6e16d4d0b505f36123ed1c60a29c95f18526c8f44fe4d7f9653d610

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for s2mflow-0.1.16-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d54d0004ffd7a37a3512910fd6511e1201fd938e315c1437c4eb52624cd17165
MD5 e832c00495e5af45a76b0b83ef9b549d
BLAKE2b-256 739b505dd8d88ee4224e5e3c6cd92804a3265b79480c40cbeb8a06c59d327f68

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for s2mflow-0.1.16-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dfd46fdcbcc8ec8a28039ace09b39ca462e5e8f6f90061e098520dcb0ef96bc9
MD5 73c97779141ce1ac8034a5c1f1352cb5
BLAKE2b-256 d71003ab0841630c1ba73d422cae06273c84286f015d10f36a361748f89a78fe

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for s2mflow-0.1.16-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d821f809aa0e0816553d10ab0d17c66302a8332a01f2f6e3d97dcc917d84160f
MD5 f0a0a3c55642250483846dd88b61f399
BLAKE2b-256 a9013111abf62195c464514f2b052ef5f1cd04de57e35a27f71c1c14daca818b

See more details on using hashes here.

Provenance

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