Skip to content
Python implementations of approval-based multi-winner rules
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Python implementations of approval-based multi-winner rules

Approval-based multi-winner rules are voting methods for selecting a committee, i.e., a fixed-size subset of candidates. We recommend the suvey by Faliszewski et al. [1] as an introduction to this topic and for further reference. The following approval-based multi-winner rules are implemented:

  • Approval Voting (AV)

  • Satisfaction Approval Voting (SAV)

  • Proportional Approval Voting (PAV) [Gurobi optional]

  • Sequential Proportional Approval Voting (seq-PAV)

  • Reverse Sequential Proportional Approval Voting (revseq-PAV)

  • Approval Chamberlin-Courant (CC) [Gurobi optional]

  • Sequential Chamberlin-Courant (seq-CC)

  • Reverse Sequential Chamberlin-Courant (revseq-CC)

  • Phragmen's sequential rule (see [2])

  • Monroe [Gurobi optional]

  • Maximin Approval Voting


The following code computes the Proportional Approval Voting (PAV) rule for a profile with 6 voters and 5 candidates.

from preferences import Profile
import rules_approval

profile = Profile(5)
profile.add_preferences([[0,1,2], [0,1], [0,1], [1,2], [3,4], [3,4]])
committeesize = 3
print rules_approval.compute_pav(profile, committeesize, ilp=False)

The output is

[[0, 1, 3], [0, 1, 4]]

which corresponds to the two committees {0,1,3} and {0,1,4}. Further examples can be found in


  • Most computationally hard rules are also implemented via the ILP solver Gurobi. The corresponding functions require gurobipy.
  • All voting methods have a parameter resolute. If it is set to true, only one winning committee is computed.
  • For ILP implementations via Gurobi it is not guaranteed that all winning committees are computed even if resolute = False.


Piotr Faliszewski, Andrzej Kaczmarczyk, Dominik Peters, and Piotr Skowron have contributed code to this package and provided help with technical and scientific questions. The Hopcroft-Karp bipartite matching algorithm is part of the ActiveState Code Recipes and was implemented by David Eppstein.


[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.

[2] Markus Brill, Rupert Freeman, Svante Janson and Martin Lackner. Phragmén's Voting Methods and Justified Representation. In Proceedings of the 31st AAAI Conference on Artificial Intelligence (AAAI 2017), pages 406-413, AAAI Press, 2017.

You can’t perform that action at this time.