Skip to main content

Optimal solution for IEEE 802.11 MAPC Coordinated Spatial Reuse (C-SR) problem

mapc-optimal is a tool for finding the optimal solution of the Multi-Access Point Coordination (MAPC) scheduling problem with coordinated spatial reuse (C-SR) for IEEE 802.11 networks. It provides a mixed-integer linear programming (MILP) solution to find the upper bound on network performance. A detailed description can be found in:

  • Maksymilian Wojnar, Wojciech Ciężobka, Artur Tomaszewski, Piotr Chołda, Krzysztof Rusek, Katarzyna Kosek-Szott, Jetmir Haxhibeqiri, Jeroen Hoebeke, Boris Bellalta, Anatolij Zubow, Falko Dressler, and Szymon Szott. "Coordinated Spatial Reuse Scheduling With Machine Learning in IEEE 802.11 MAPC Networks", 2025.

Features

  • Calculation of optimal scheduling: Calculate the best transmission configurations and the corresponding time division that enhance the network performance.
  • Two optimization criteria: Find the optimal solution for two optimization criteria: maximizing the sum of the throughput of all nodes in the network and maximizing the minimum throughput of all nodes in the network.
  • Modulation and coding scheme (MCS) selection: Select the optimal MCS for each transmission.
  • Transmission power selection: Set the appropriate transmission power to maximize network performance.
  • Versatile network configuration: Define network settings by specifying network nodes, available MCSs, and transmission power levels.

Installation

The package can be installed using pip:

pip install mapc-optimal

Usage

The main functionality is provided by the Solver class in mapc_optimal/solver.py. This class manages the process of finding the optimal solution. Example usage:

from mapc_optimal import Solver

# Define your network
# ...

solver = Solver(stations, access_points)
configurations, rate = solver(path_loss)

where stations and access_points are lists of numbers representing the stations and access points (APs) in the network, respectively. The path_loss is an $n \times n$ matrix representing the path loss between each pair of nodes in the network. The solver returns calculated configurations and the total throughput of the network. The Solver class can be further configured by passing additional arguments to the constructor. The full list of arguments can be found in the documentation.

By default, the solver associates APs with the stations that have the highest signal strength. However, the solver can be configured to use a different association policy. To do so, set the associations argument when calling the solver. Additionally, the solver can return a list of the pricing objective values for each iteration. It can be useful to check if the solver has converged. To do so, set the return_objective argument to True when calling the solver:

configurations, rate, objectives = solver(path_loss, associations, return_objective=True)

For a more detailed example, refer to the test case in test/test_solver.py.

Note: The underlying MILP solver can significantly affect the performance of the tool. By default, the solver uses the CBC solver from the PuLP package. However, we recommend using a better solver, such as CPLEX.

Repository Structure

The repository is structured as follows:

  • mapc_optimal/: The main package of the tool.
    • constants.py: Default values of the parameters used in the solver.
    • main.py: The formulation of the main problem solving the selection and division of configurations.
    • pricing.py: The pricing algorithm used to propose new configurations for the main problem.
    • solver.py: The solver class coordinating the overall process of finding the optimal solution. It initializes the solver, sets up the network configuration, and manages the iterations.
    • utils.py: Utility functions, including the function for calculation of the path loss from node positions using the TGax channel model.
  • test/: Unit tests with example usage of the tool.

How to reference mapc-optimal?

@article{wojnar2025coordinated,
  author={Wojnar, Maksymilian and Ciężobka, Wojciech and Tomaszewski, Artur and Chołda, Piotr and Rusek, Krzysztof and Kosek-Szott, Katarzyna and Haxhibeqiri, Jetmir and Hoebeke, Jeroen and Bellalta, Boris and Zubow, Anatolij and Dressler, Falko and Szott, Szymon},
  title={{Coordinated Spatial Reuse Scheduling With Machine Learning in IEEE 802.11 MAPC Networks}}, 
  year={2025},
}

Metadata

Release files for mapc-optimal 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mapc-optimal 0.2.1
File Size Uploaded
mapc_optimal-0.2.1.tar.gz 20.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mapc-optimal 0.2.1
File Interpreter ABI Platform
mapc_optimal-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 41.5 kB

Release files / mapc_optimal-0.2.1.tar.gz

Download URL mapc_optimal-0.2.1.tar.gz
Size 20.8 kB
Tags Source
SHA-256 checksum
How to use checksums
71ae779247d3200553f4947270089c77ba79f4251748b5fc4e47b44b380de3e7
BLAKE2b-256 checksum
How to use checksums
2e856f5a18db22800128f02fe8b0a39e1ecfec94d5c60c81c0ff5a51c3a17d28
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 29, 2025.

Transparency log

Release files / mapc_optimal-0.2.1-py3-none-any.whl

Download URL mapc_optimal-0.2.1-py3-none-any.whl
Size 20.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0655d32508537248ee1c83c16ee371864ed290ea0d1dc3f18a7dc0ff69587b0f
BLAKE2b-256 checksum
How to use checksums
c4891a82eba88d3490b03746bfbf04fe9d8e7045ba0c1ba2d261dfc618a68997
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 29, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2.0

2 release files

0.1.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page