abcvoting

abcvoting: A Python package for approval-based multi-winner voting rules - Published in JOSS (2023)

https://github.com/martinlackner/abcvoting

Science Score: 98.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 7 DOI reference(s) in README and JOSS metadata
  • Academic publication links
    Links to: arxiv.org, springer.com, joss.theoj.org, zenodo.org
  • Committers with academic emails
  • Institutional organization owner
  • JOSS paper metadata
    Published in Journal of Open Source Software

Keywords

approval-voting committee computational-social-choice multiwinnervoting python research social-choice social-choice-theory voting voting-methods

Scientific Fields

Engineering Computer Science - 40% confidence
Last synced: 4 months ago · JSON representation ·

Repository

Python implementations of approval-based committee (multi-winner) voting rules

Basic Info
Statistics
  • Stars: 39
  • Watchers: 4
  • Forks: 19
  • Open Issues: 8
  • Releases: 19
Topics
approval-voting committee computational-social-choice multiwinnervoting python research social-choice social-choice-theory voting voting-methods
Created over 6 years ago · Last pushed 4 months ago
Metadata Files
Readme Contributing License Citation

README.md

DOI DOI PyPi Python versions Build badge Unittests badge docs Code style: black codecov

abcvoting

[!NOTE] - Documentation - Installation
- How to cite the abcvoting library - Acknowledgements and contributors - ► abcvoting web app

For an overview of other software tools related to Computational Social Choice, see the COMSOC community page.

A Python library of approval-based committee (ABC) rules

Approval-based committee rules (ABC rules) are voting methods for selecting a committee, i.e., a fixed-size subset of candidates. ABC rules are also known as approval-based multi-winner rules. The input of such rules are approval ballots. We recommend the book (Multi-Winner Voting with Approval Preferences) by Lackner and Skowron [2] as a detailed introduction to ABC rules and related research directions. In addition, the survey by Faliszewski et al. [1] is useful as a more general introduction to committee voting (not limited to approval ballots).

The following ABC rules are implemented:

  • Approval Voting (AV)

  • Satisfaction Approval Voting (SAV)

  • Proportional Approval Voting (PAV)

  • Sequential Proportional Approval Voting (seq-PAV)

  • Reverse Sequential Proportional Approval Voting (revseq-PAV)

  • Approval Chamberlin-Courant (CC)

  • Phragmén's sequential rule

  • Monroe's rule

  • Minimax Approval Voting (MAV)

  • Greedy Monroe

  • Method of Equal Shares (Rule X)

  • Phragmén's First Method (Eneström's Method)

  • and many more ...

In addition, one can verify axiomatic properties such as

  • Justified Representation (JR)

  • Propotional Justified Representation (PJR)

  • Extended Justified Representation (EJR)

  • Priceability

  • The core property

Instead of using the abcvoting Python library, you can also use the abcvoting web application by Dominik Peters (which is based on this Python library).

Installation

As simple as:

bash pip install abcvoting

Further details can be found here.

Development

Install all dependencies including development requirements and the abcvoting package in development mode:

bash pip install -e ".[dev]"

Basic unit tests can be run by excluding tests which require additional dependencies:

bash pytest -m "not mipgurobi and not gmpy2 and not slow" tests/

For development, configure the black formatter and pre-commit hooks - see below. Also installing all optional dependencies is recommended.

A development package is build for every commit on the master branch and uploaded to the test instance of PyPI. It can be installed using the following command:

bash python3 -m pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple abcvoting

Black formatting

Code needs to be formatted using the black formatter. This is checked by Github actions. Configure your editor to run the black formatter.

Pre-commit hooks

Pre-commit hooks are not required, but they are recommended for development. Pre-commit is used to manage and maintain pre-commit hooks. Install pre-commit (e.g. via apt, conda or pip) and then run $ pre-commit install to install the hooks.

References

[1] Piotr Faliszewski, Piotr Skowron, Arkadii Slinko, and Nimrod Talmon. Multiwinner voting: A new challenge for social choice theory. In Ulle Endriss, editor, Trends in Computational Social Choice, chapter 2, pages 27–47. AI Access, 2017. http://research.illc.uva.nl/COST-IC1205/BookDocs/Chapters/TrendsCOMSOC-02.pdf

[2] Lackner, Martin, and Piotr Skowron. "Multi-Winner Voting with Approval Preferences". Springer International Publishing, SpringerBriefs in Intelligent Systems , 2023. https://link.springer.com/book/10.1007/978-3-031-09016-5

Owner

  • Name: Martin Lackner
  • Login: martinlackner
  • Kind: user
  • Location: Vienna, Austria
  • Company: TU Wien

Researcher

JOSS Publication

abcvoting: A Python package for approval-based multi-winner voting rules
Published
January 27, 2023
Volume 8, Issue 81, Page 4880
Authors
Martin Lackner ORCID
TU Wien, Vienna, Austria
Peter Regner ORCID
University of Natural Resources and Life Sciences, Vienna, Austria
Benjamin Krenn
TU Wien, Vienna, Austria
Editor
Martin Fleischmann ORCID
Tags
voting committee voting social choice approval voting

Citation (CITATION.cff)

cff-version: 1.2.0
title: "abcvoting"
message: >-
  If you would like to acknowledge our work in a
  scientific paper, please use the following citation:
preferred-citation:
  type: article
  journal: "Journal of Open Source Software"
  title: "abcvoting: A Python package for approval-based multi-winner voting rules"
  volume: 8
  issue: 81
  start: 4880
  year: 2023
  doi: 10.21105/joss.04880
  url: 'https://github.com/martinlackner/abcvoting'
  authors:
    - given-names: Martin
      family-names: Lackner
      orcid: 'https://orcid.org/0000-0003-2170-0770'
    - given-names: Peter
      family-names: Regner
      orcid: 'https://orcid.org/0000-0001-8480-4900'
    - given-names: Benjamin
      family-names: Krenn

GitHub Events

Total
  • Create event: 3
  • Release event: 2
  • Issues event: 11
  • Watch event: 6
  • Issue comment event: 11
  • Push event: 17
  • Pull request review event: 1
  • Pull request review comment event: 1
  • Pull request event: 8
  • Fork event: 2
Last Year
  • Create event: 3
  • Release event: 2
  • Issues event: 11
  • Watch event: 6
  • Issue comment event: 11
  • Push event: 17
  • Pull request review event: 1
  • Pull request review comment event: 1
  • Pull request event: 8
  • Fork event: 2

Committers

Last synced: 5 months ago

All Time
  • Total Commits: 659
  • Total Committers: 9
  • Avg Commits per committer: 73.222
  • Development Distribution Score (DDS): 0.226
Past Year
  • Commits: 18
  • Committers: 3
  • Avg Commits per committer: 6.0
  • Development Distribution Score (DDS): 0.278
Top Committers
Name Email Commits
Martin Lackner u****d@s****t 510
lumbric l****c@g****m 99
benjaminkrenn b****b@g****m 29
Dominik Peters m****l@d****e 12
Simon-Rey r****n@o****r 4
stefanschlomoforster 5****r 2
elvic96 5****6 1
Paweł Batko p****o@g****m 1
Florian-Lackner 5****r 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 4 months ago

All Time
  • Total issues: 28
  • Total pull requests: 70
  • Average time to close issues: 10 months
  • Average time to close pull requests: 6 days
  • Total issue authors: 6
  • Total pull request authors: 9
  • Average comments per issue: 1.07
  • Average comments per pull request: 0.61
  • Merged pull requests: 58
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 8
  • Pull requests: 8
  • Average time to close issues: about 2 months
  • Average time to close pull requests: 3 days
  • Issue authors: 4
  • Pull request authors: 2
  • Average comments per issue: 0.13
  • Average comments per pull request: 1.0
  • Merged pull requests: 6
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • martinlackner (14)
  • DominikPeters (7)
  • erelsgl (3)
  • Simon-Rey (2)
  • nealmcb (1)
  • axxeny (1)
Pull Request Authors
  • lumbric (32)
  • DominikPeters (15)
  • Simon-Rey (9)
  • stefanschlomoforster (5)
  • benjaminkrenn (5)
  • martinlackner (2)
  • elvic96 (1)
  • pbatko (1)
  • Florian-Lackner (1)
Top Labels
Issue Labels
enhancement (14) help wanted (4)
Pull Request Labels

Packages

  • Total packages: 1
  • Total downloads:
    • pypi 630 last-month
  • Total dependent packages: 2
  • Total dependent repositories: 1
  • Total versions: 16
  • Total maintainers: 1
pypi.org: abcvoting

A Python library of approval-based committee (ABC) rules

  • Versions: 16
  • Dependent Packages: 2
  • Dependent Repositories: 1
  • Downloads: 630 Last month
Rankings
Dependent packages count: 3.2%
Forks count: 9.3%
Stargazers count: 11.7%
Average: 13.1%
Downloads: 19.7%
Dependent repos count: 21.6%
Maintainers (1)
Last synced: 4 months ago

Dependencies

setup.py pypi
  • networkx *
docs/requirements.txt pypi
  • Sphinx ==4.4.0
  • gurobipy >=9.5.0
  • matplotlib >=3.4.3
  • mip >=1.14.0
  • networkx >=2.6.3
  • numpy >=1.21
  • numpydoc >=1.2
  • ruamel.yaml >=0.17
  • sphinx-codeautolink >=0.10
  • sphinx-rtd-theme >=1.0.0
.github/workflows/build.yml actions
  • actions/checkout v3 composite
  • actions/setup-python v4 composite
  • pypa/gh-action-pypi-publish release/v1 composite
.github/workflows/piptest.yml actions
  • actions/checkout v3 composite
  • actions/setup-python v4 composite
.github/workflows/piptestfull.yml actions
  • actions/checkout v3 composite
  • actions/setup-python v4 composite
.github/workflows/unittests.yml actions
  • actions/checkout v3 composite
  • actions/setup-python v4 composite
  • codecov/codecov-action v3 composite
  • pypa/gh-action-pypi-publish release/v1 composite
pyproject.toml pypi