Provably fair particle swarm optimization for federated learning coalition selection
Project description
FairSwarm
Provably fair particle swarm optimization for federated learning coalition selection
Overview
FairSwarm is a novel particle swarm optimization algorithm designed for fair client selection in federated learning. It provides provable guarantees on both convergence and demographic fairness.
Key Innovation
FairSwarm introduces a fairness-aware velocity update that steers optimization toward demographically balanced coalitions:
v = ω·v + c₁·r₁·(pBest - x) + c₂·r₂·(gBest - x) + c₃·∇_fair
^^^^^^^^
Novel fairness gradient
Theoretical Guarantees
| Theorem | Guarantee |
|---|---|
| Theorem 1 | Convergence to stationary point with probability 1 |
| Theorem 2 | ε-fairness: DemDiv(S*) ≤ ε with high probability |
| Theorem 3 | (1-1/e-η) approximation for submodular objectives |
| Theorem 4 | Privacy-fairness tradeoff lower bound |
Installation
pip install fairswarm
For development:
pip install fairswarm[dev]
Quick Start
from fairswarm import FairSwarm, FairSwarmConfig, Client
from fairswarm.demographics import DemographicDistribution, CensusTarget
import numpy as np
# Create clients (hospitals) with demographic information
clients = [
Client(
id=f"hospital_{i}",
demographics=np.random.dirichlet([2, 2, 2, 2]),
dataset_size=1000 + i * 100,
)
for i in range(20)
]
# Configure the optimizer
config = FairSwarmConfig(
swarm_size=30,
max_iterations=100,
coalition_size=10,
fairness_weight=0.3, # λ in fitness function
seed=42,
)
# Create target demographics (e.g., US Census 2020)
target = DemographicDistribution.from_dict({
"white": 0.576,
"black": 0.124,
"hispanic": 0.187,
"asian": 0.061,
"other": 0.052,
})
# Run optimization
optimizer = FairSwarm(
clients=clients,
coalition_size=10,
target_demographics=target,
config=config,
)
# Use built-in demographic fitness (or supply your own callable)
from fairswarm.fitness import DemographicFitness
fitness_fn = DemographicFitness(target=target)
result = optimizer.optimize(fitness_fn)
# Check results
print(f"Selected coalition: {result.coalition}")
print(f"Fitness: {result.fitness:.4f}")
print(f"ε-fair: {result.is_epsilon_fair(0.05)}")
Documentation
Full API documentation is available in the source code docstrings. For the formal algorithm specification, theoretical proofs, and experimental methodology, please refer to:
T. Norwood, "FairSwarm: Provably Fair Particle Swarm Optimization for Federated Learning Coalition Selection," IEEE Trans. Neural Netw. Learn. Syst., 2026.
Citation
@phdthesis{norwood2026fairswarm,
title={FairSwarm: A Provably Fair Particle Swarm Optimization Algorithm
for Federated Learning Coalition Selection with Applications in Healthcare},
author={Norwood, Tenicka},
year={2026},
school={Meharry Medical College}
}
License
This project is licensed under the PolyForm Noncommercial License 1.0.0. You are free to use, modify, and distribute it for any noncommercial purpose, including academic research, education, and personal projects.
Commercial licensing is available. For commercial use inquiries, please contact Tenicka Norwood.
See LICENSE for full terms.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fairswarm-0.2.0.tar.gz.
File metadata
- Download URL: fairswarm-0.2.0.tar.gz
- Upload date:
- Size: 178.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d829c45c7726e295630e278eea041aa04f5184c609fd7adca68a5c2fb890374c
|
|
| MD5 |
966b01fedaacfab91d882eaf076b03f9
|
|
| BLAKE2b-256 |
77fd42c56b22a949f8dcf34d763884f6727bb24f2cccb868b12237256b08701b
|
File details
Details for the file fairswarm-0.2.0-py3-none-any.whl.
File metadata
- Download URL: fairswarm-0.2.0-py3-none-any.whl
- Upload date:
- Size: 139.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a7b6d65b551b059ba4d799d00df6387151e27834a60e3b0f3167069f659fdc92
|
|
| MD5 |
07b824a0a953916a5068a766549e93f3
|
|
| BLAKE2b-256 |
14f3e3c2e3c907bdac08940c1b5af201ef3150a10399440175725e5509f867a8
|