Properties of committees

ABC rules return committees and these committees may or may not have certain properties. For an overview of the many properties of committees, we refer to the survey by Lackner and Skowron [1]. Here, we see how one can test a given committee and find out which properties it satisfies.

The following example (from [2]) shows that Phragmén’s Sequential Rule (seq-Phragmén) may output committees that fail Extended Justified Representation (EJR) [3]. We first compute the winning committee …

>>> from abcvoting.preferences import Profile
>>> from abcvoting import abcrules, properties
>>> from abcvoting.output import output, INFO

>>> profile = Profile(num_cand=14)
>>> profile.add_voters(
...       [{0, 1, 2}] * 2
...     + [{0, 1, 3}] * 2
...     + [{2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}] * 6
...     + [{3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}] * 5
...     + [{4, 5, 6, 7, 8, 9, 10, 11, 12, 13}] * 9
... )
>>> committees = abcrules.compute_seqphragmen(profile, committeesize=12)

… and then analyze this committee. We set the verbosity to INFO so that the result of properties.full_analysis is printed.

>>> output.set_verbosity(INFO)
>>> results = properties.full_analysis(profile, committees[0])
Pareto optimality                                  : True
Justified representation (JR)                      : True
Proportional justified representation (PJR)        : True
Extended justified representation (EJR)            : False
EJR+                                               : False
Full justified representation (FJR)                : False
Priceability                                       : True
Stable Priceability                                : False
The core                                           : False

In contrast, committees returned by seq-Phragmén always satisfy JR and PJR [2]. Pareto optimality is not necessarily satisfied by seq-Phragmén, but it is satisfied in this instance. (The variable results is a dictionary containing the respective truth values.)

>>> print(results)
{'pareto': True, 'jr': True, 'pjr': True, 'ejr': False, 'ejr+': False, 'fjr': False, 'priceability': True, 'stable-priceability': False, 'core': False}