Functionality to optimize different classes of voting rules for user-defined goals.
Project description
Optimal Voting Package
This package allows the application of standard optimization techniques to voting rule design. Existing approaches of using neural networks to develop optimized voting rules have been critiqued due to their lack of interpretability. This package allows optimizing interpretable classes of voting rule such as positional scoring rules where simply looking at the score vector provides intuition about the rule itself.
The package aims to support a wide range of existing and user-specifiable optimization targets, as well as several classes of voting rule.
Possible optimization targets:
- common utility functions (current):
- Utilitarian
- Nash
- Egalitarian/Rawlsian
- Malfare
- measures of distortion
- axiom violation rate (https://arxiv.org/abs/2508.06454)
- ranking consistency (https://arxiv.org/abs/2508.17177)
Optimizable rule types:
- positional scoring rules (current)
- probabilistic positional scoring rules (soon)
- functions of (weighted) tournaments, i.e., C2 rules (soon)
- sequential rules, i.e., Instant-Runoff Voting (soon)
- sequential Thiele rules (eventual)
- Thiele rules (perhaps)
Optimization techniques:
- simulated annealing: due to ease-of-use across domains this is intended to be the primary optimization method
- gradient descent: partially implemented at the moment. Early experiments show that this results in outcomes of a similar quality to simulated annealing but requires more compute. The eventual goal is to support GD with Torch and Jax but annealing is likely to remain preferable.
Proper documentation will be developed as the package matures. A rough overview of package use is:
- Generate preference profile(s) empirically or by sampling one or more distributions.
- (Optional) generate utilities corresponding to the preference profiles.
- Select an optimization target (i.e., egalitarian social welfare).
- Send profiles, utilities, target to Optimal-Voting.
- Optimal-Voting returns a positional scoring vector which maximizes egalitarian social welfare on the provided profiles.
NOTE: At the moment, the package is in active development. Changes that break compatibilty should be expected.
If you are interested in using the package or have suggestions for possible features you are encouraged to reach out at BenArmstrong dot ca
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 optimal_voting-0.0.6.tar.gz.
File metadata
- Download URL: optimal_voting-0.0.6.tar.gz
- Upload date:
- Size: 25.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
39251d37e2de02b669731b21557ffdcdc076925fd40296fb609ccdba44e0c4b0
|
|
| MD5 |
3cca95d5e52ed14a7d23646c35052502
|
|
| BLAKE2b-256 |
31ba3497ea762f86e19592b70b11054aa5aa4f062b12fdc29541b1025d195488
|
File details
Details for the file optimal_voting-0.0.6-py3-none-any.whl.
File metadata
- Download URL: optimal_voting-0.0.6-py3-none-any.whl
- Upload date:
- Size: 27.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3e146da52e1558f49e1e7488703d2203df1b3fc246085f00aec6e5dcd65d67fb
|
|
| MD5 |
cd0e3403e6d4292a1e93aa6628477a5a
|
|
| BLAKE2b-256 |
c82f353280a38b449a2a7f23f46f925a6b7928fc6d21e3498e32d88809b9a8f1
|