ABCvoting Tabulation Engine (multi-winner Approval / ABC rules)¶
Runs approval-based committee (ABC) rules from Martin Lackner's abcvoting library — the standard peer-reviewed toolkit for this family (companion to Lackner & Skowron's book Multi-Winner Voting with Approval Preferences) — on this repo's approval YAML files.
It does two jobs:
- Extends the LH engine. The LH engine tabulates bloc Approval only (
voting_method: Approval_Multi_Winner— thenum_winnersmost-approved win). This wrapper adds the proportional rules on the same ballots: SPAV (seqpav), PAV (pav), and seq-Phragmén (seqphragmen) — the rules described in Approval — Multi-Winner. It also carries SAV (sav), Satisfaction Approval Voting — one vote per ballot, split among the marks — which is in the default rule set precisely because it is the rule most likely to disagree withavon the same ballots. - Independent cross-check. abcvoting's plain
avrule must elect the same committee as the LH engine's bloc-Approval count — an outside witness that the LH approval tally is correct, in the same spirit as thepref_votingcross-check for ranked methods.
pip install abcvoting # optional dependency — everything guards on it
python 06_Other/abcvoting_tabulation_engine/abc_tabulation.py 04_Approval/02_Examples/multiwinner/cases/approval_bloc_2seats_c4_b6.yaml
python 06_Other/abcvoting_tabulation_engine/abc_tabulation.py FILE.yaml --rules av,seqpav,pav,seqphragmen --seats 3
On the repo's majority-sweep case (6 voters, 2 seats: a 4-voter majority behind Amy — two of them also approving Ben — and a 2-voter minority behind Cora/Doug) it prints:
--- abcvoting: approval-based committee rules (2 seats) ---
approval_bloc_2seats_c4_b6.yaml: 6 ballots, candidates: Amy, Ben, Cora, Doug
av Approval Voting (AV) -> Amy, Ben | Amy, Cora [2 tied committees]
seqpav Sequential Proportional Approval Voting (seq-PAV) -> Amy, Cora
pav Proportional Approval Voting (PAV) -> Amy, Cora
seqphragmen Phragmén's Sequential Rule (seq-Phragmén) -> Amy, Cora
(av = bloc Approval, the LH engine's method; seqpav/pav/seqphragmen are proportional.)
Same ballots, two philosophies: bloc av ties the majority's second candidate with the minority's first (the LH engine breaks that tie for the majority by priority order); every proportional rule gives the minority its seat decisively.
Notes:
- Ties: an ABC rule can return several tied committees; all are printed (
[N tied committees]). - Empty ballots (no approvals) can't affect any ABC rule; they are dropped and the count reported.
abcvotingoffers many more rules (monroe,cc,lexcc,rule-x/MES, …) — pass any rule id via--rules. Exact PAV/Monroe use an ILP solver on large instances; the repo's small teaching cases compute instantly.- Tested by
tests/test_abcvoting_crosscheck.py(skips cleanly ifabcvotingisn't installed).