Images of hands symbolizing voters. This image is taken from the cover of the COMSOC hanbook, the reference book for the community.
COMSOC

Tools for COMSOC

COMSOC researchers have developed a large number of tools over the years. These tools serve different objectives. Some are meant to help people produce better research. Others are intended for outreach, to bring the benefits and excitement of COMSOC research to a broader audience.

Below you will find a list of such tools, organised by topic of study and by type of tool. Badges are used to indicate relevant features:

For each topic, we have identified some “reference tools”. These are tools that are particularly helpful and that should to be considered by anyone who is thinking of developing new tools on the same topic. Before developing a new tool, explore the reference tools on the topic to assess what the conventions are (data format, etc.). Consider extending the reference tools rather than creating new ones.

Each tool also is assigned a tag based on where in the typical pipeline of a COMSOC problem it is most useful:

Best Practices

The development of tools for and by the COMSOC community is guided by the general spirit of this community together with the principles of open-source development. We want to create a vibrant and inclusive ecosystem that benefits everyone. The success of the tools can only come together with support from the community.

To this end, we have assembled a list of best practices to be considered when developing tools:

Below is a list of programming languages together with the number of tools on this page that use them. This can be helpful in determining what might be a suitable programming languages for a future tool.

Django:2
Docusaurus:1
Java Script:3
Python:13
React:1
Streamlit:1
Typescript:1

Tools are often used to conduct numerical experiments. Consult this recent survey paper for advice on how to run such experiments as well as a discussion of current standards and practices (see also the associated database of experimental papers in COMSOC).

General Tools

Reference Tools

PrefLib.org Preferences

PrefLib is a reference library of preference data that provides carefully curated data in a unified format.

Simon Rey (), Nick Mattei () and Toby Walsh

Django

prefsampling Preferences

PrefSampling is a lightweight Python library that provides preference samplers. These are algorithms that generate random preferences based on precisely defined statistical cultures. It covers both ordinal and approval preferences. This tool is part of the Guide to Numerical Experiments on Elections in Computational Social Choice.

Simon Rey () and Stanisław Szufa ()

Python

Other Tools

mapel Analysis

Mapel is a Python library to generate maps of elections.

Stanisław Szufa () and Andrzej Kaczmarczyk

Python

preflib-tools Preferences

PrefLib-Tools is a set of Python tools developed to work with preference data from PrefLib.org. It provides input and output operations on PrefLib instances, and several property checks for such instance (such as checking for preference domain membership).

Simon Rey ()

Python

Single-Winner Voting

Reference Tools

pref_voting Aggregation

Preferential Voting Tools (pref_voting) is a Python library 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). In a preferential voting election, each voter submits a ranking of the candidates, and the winners are determined based on the submitted rankings. The rankings may include ties between candidates, and some candidates may be left off the ranking.

Eric Pacuit () and Wesley H. Holliday ()

Python

Other Tools

votelib Aggregation

Votelib is a package to evaluate results of elections under various voting rukes. It aims to provide reliable implementations of many rules so that they can be evaluated and compared as they are used under real-world conditions. The primary focus is on political decision making, but the library is not limited to evaluating political decisions only.

Jan Šimbera ()

Python

Maximal Lotteries Analysis

Online tool to compute and visualise the output of the maximal lotteries rule, an attractive randomised voting rule first considered by Germaine Kreweras in 1965 and independently proposed by Peter C. Fishburn in 1984.

Florian Brandl (), Felix Brandt (), René Romen (), Dominik Spies and Christian Stricker

Java Script

QuickVote Analysis

This website presents algorithms for various voting rules, with a focus on mechanisms involving the Kendall-tau distance, such as Kemeny consensus and Popular ranking.

Ewan Chelley () and David Manlove

Python

Stable Voting Application

Stable Voting is a free and easy way to make a group decision by voting using the stable voting method.

Eric Pacuit () and Wesley H. Holliday ()

Python

Whale - Which Alternative is Elected? Application

Online polling platform that implements many of the major voting rules.

Sylvain Bouveret (), François Durand (), Michael Ortega () and Marie-Jeanne Natete

vodle – everygroup's consensus Application

Online tool to make consensus-aiming probabilistic single-winner (or more general resource apportionment) decisions with proportional power guarantees, using an interactive version of the Maximum Partial Consensus method. Available in several languages.

Jobst Heitzig ()

Typescript

Multi-Winner Voting

Reference Tools

abcvoting Aggregation

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 inputs of such rules are approval ballots.

Martin Lackner (), Peter Regner, Benjamin Krenn, Dominik Peters and many more

Python

apportionment Aggregation

This is an implementation of common apportionment methods. Apportionment has two main applications: to assign a fixed number of parliamentary seats to parties (proportionally to their vote count), and to assign representatives in a senate to states (proportionally to their population count).

Martin Lackner ()

Python

Other Tools

Pref.Tools: ABCvoting Analysis

Online tool to visualise the behaviour of different approval-based committee rules. Uses the abcvoting python package as its backend.

Dominik Peters ()

Java Script

Pref.Tools: Apportionment Analysis

Online tool to visualise the behaviour of different apportionment rules.

Dominik Peters ()

Participatory Budgeting

Reference Tools

pabutools Aggregation

The pabutools are a complete set of tools for working with participatory budgeting instances. It provides the tools to handle PB instances of different kinds, together with voting rules to determine the outcome of an election as well as some analytical tools.

Simon Rey (), Grzegorz Pierczyński, Markus Utke and Piotr Skowron

Python

pabulib.org Preferences

Pabulib is an open PArticipatory BUdgeting LIBrary. The aim of this website is to collect participatory budgeting voting data from all over the world. It also describes a standard data format for representing a PB voting instance.

Dariusz Stolicki (), Stanisław Szufa () and Nimrod Talmon

Other Tools

MES online computation tool Aggregation

Online tool to compute the output of the Method of Equal Shares for participatory budgeting.

Dominik Peters ()

Java ScriptDocusaurus

Pref.Tools: Pabutools Analysis

Online tool to visualise the behaviour of different participatory budgeting rules. Uses pabutools as its backend.

Dominik Peters ()

pabuviz Analysis

Pabuviz is an interactive computation and visualisation tool for participatory budgeting.

Markus Utke () and Simon Rey ()

DjangoReact

equalshares.net Outreach

Outreach website aiming at collecting resources about the Method of Equal Shares for participatory budgeting and to provide an explanation of the method to interested members of the public, to city officials, and to researchers.

Dominik Peters () and Piotr Skowron ()

Fair Division

Reference Tools

fairpy Aggregation

Fairpy is an open-source library of fair division algorithms in Python.

Erel Segal-Halevi ()

Python

Spliddit Application

Spliddit offers quick, free solutions to everyday fair division problems, using methods that provide indisputable fairness guarantees and build on decades of research in economics, mathematics, and computer science.

Ariel Procaccia (), Jonathan Goldman and Nisarg Shah ()

Other Tools

fairpyx Aggregation

Fairpyx is a Python library with various algorithms for fair allocation, with an emphasis on course allocation.

Erel Segal-Halevi ()

Python

Pref.Tools: Fair rent division Analysis

Online tool to visualise the behaviour of two different rules for fair rent division.

Dominik Peters ()

Fast & Fair Application

Fast & Fair is designed to help you achieve a fair division of indivisible items. It offers a variety of algorithmic implementations to ensure a fair distribution of these items, taking into account standard fairness notions such as envy-freeness up to one item (EF1) and weighted envy-freeness (WEF).

Jiatong Han () and Warut Suksompong ()

PythonStreamlit

Kajibuntan Application

Kajibuntan proposes a way to divide household chores between two partners.

Ayumi Igarashi ()