Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/voting-tools/pref_voting
pref_voting is a Python package that can be used to study and run elections with different preferential voting methods (graded voting methods and cardinal voting methods are also included for comparison).
https://github.com/voting-tools/pref_voting
computational-social-choice preferences preferential-voting python3 research-tool social-choice-theory utility-functions voting voting-methods
Last synced: about 1 month ago
JSON representation
pref_voting is a Python package that can be used to study and run elections with different preferential voting methods (graded voting methods and cardinal voting methods are also included for comparison).
- Host: GitHub
- URL: https://github.com/voting-tools/pref_voting
- Owner: voting-tools
- License: mit
- Created: 2022-12-16T11:20:07.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-02-16T02:46:24.000Z (5 months ago)
- Last Synced: 2024-02-16T03:29:00.363Z (5 months ago)
- Topics: computational-social-choice, preferences, preferential-voting, python3, research-tool, social-choice-theory, utility-functions, voting, voting-methods
- Language: Jupyter Notebook
- Homepage: https://pref-voting.readthedocs.io/
- Size: 12.2 MB
- Stars: 6
- Watchers: 2
- Forks: 4
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Lists
- awesome-comsoc-tools - Preferential Voting Tools - -[![pypi](https://img.shields.io/pypi/v/pref_voting.svg)](https://pypi.python.org/pypi/pref_voting) [![docs](https://img.shields.io/badge/docs-available-green)](https://pref-voting.readthedocs.io/en/latest/) ![](https://img.shields.io/github/last-commit/voting-tools/pref_voting)--> (Python Libraries)
README
pref_voting
==========## Installation
With pip package manager:
```bash
pip install pref_voting
```## Documentation
Online documentation is available at [https://pref-voting.readthedocs.io](https://pref-voting.readthedocs.io).
## Example Usage
A profile (of linear orders over the candidates) is created by initializing a `Profile` class object. Simply provide a list of rankings (each ranking is a tuple of numbers) and a list giving the number of voters with each ranking:
```python
from pref_voting.profiles import Profilerankings = [
(0, 1, 2, 3),
(2, 3, 1, 0),
(3, 1, 2, 0),
(1, 2, 0, 3),
(1, 3, 2, 0)]rcounts = [5, 3, 2, 4, 3]
prof = Profile(rankings, rcounts=rcounts)
```The function `generate_profile` is used to generate a profile for a given number of candidates and voters:
```python
from pref_voting.generate_profiles import generate_profile# generate a profile using the Impartial Culture probability model
prof = generate_profile(3, 4) # prof is a Profile object# generate a profile using the Impartial Anonymous Culture probability model
prof = generate_profile(3, 4, probmod = "IAC") # prof is a Profile object
```To use one of the many voting methods, import the function from `pref_voting.voting_methods` and apply it to the profile:
```python
from pref_voting.generate_profiles import generate_profile
from pref_voting.voting_methods import *prof = generate_profile(3, 4)
split_cycle(prof) # returns the sorted list of winning candidates
split_cycle.display(prof) # display the winning candidates```
## Questions?
Feel free to [send an email](https://pacuit.org/) if you have questions about the project.
## License
[MIT](https://github.com/jontingvold/pyrankvote/blob/master/LICENSE.txt)