Sequential proportional approval voting: Difference between revisions
Sequential proportional approval voting (view source)
Revision as of 23:20, 11 April 2022
, 2 years agoAdded code example. This is useful as it can be harder to follow the 'pure math' example provided.
mNo edit summary |
(Added code example. This is useful as it can be harder to follow the 'pure math' example provided.) |
||
Line 11:
It is however a much computationally simpler algorithm than (and can be considered a sequential form of) [[proportional approval voting]], permitting votes to be counted either by hand or by computer, rather than requiring a computer to determine the outcome of all but the simplest elections.<ref name="AzizGaspers2014">{{Cite book|title=Proceedings of the 2015 International Conference on Autonomous Agents & Multiagent Systems: May, 4 - 8, 2015, Istanbul, Turkey|date=2015|publisher=ACM|editor-last=International Foundation for Autonomous Agents and Multiagent Systems|location=New York, NY|chapter=Computational Aspects of Multi-Winner Approval Voting |chapterurl=https://arxiv.org/pdf/1407.3247v1.pdf |pages=107–115 |isbn=978-1-4503-3413-6}}</ref>
==
<syntaxhighlight lang="python" line>
SPAV's [[Party list case|party list case]] is [[D'Hondt]], because its reweighting is based on D'Hondt's divisors.<ref name="Janson 2016">{{cite arXiv | last=Janson | first=Svante | title=Phragmén's and Thiele's election methods | date=2016-11-27 | eprint=1611.08826|class=math.HO}}</ref>▼
import pandas
ballots = [
{"Red": 1, "Green": 0, "Yellow": 0, "Blue": 1},
{"Red": 0, "Green": 1, "Yellow": 0, "Blue": 1},
{"Red": 1, "Green": 0, "Yellow": 1, "Blue": 0},
{"Red": 1, "Green": 0, "Yellow": 1, "Blue": 1},
{"Red": 0, "Green": 1, "Yellow": 0, "Blue": 1},
{"Red": 1, "Green": 0, "Yellow": 1, "Blue": 1},
{"Red": 1, "Green": 1, "Yellow": 0, "Blue": 1},
{"Red": 0, "Green": 1, "Yellow": 0, "Blue": 1},
{"Red": 1, "Green": 0, "Yellow": 0, "Blue": 1},
]
seats = 4
seated = []
max_score = 1
#reweight
def reweight(ballot):
seated_scores = [
ballot[candidate] for candidate in ballot if candidate in seated
]
weight = 1/(1+sum(seated_scores)/max_score)
return {candidate: weight*ballot[candidate] for candidate in ballot}
def nextRound(ballots):
reweightedBallots = [reweight(ballot) for ballot in ballots]
winner = pandas.DataFrame(reweightedBallots).sum().drop(seated).idxmax()
print(pandas.DataFrame(reweightedBallots).sum())
seated.append(winner)
return reweightedBallots
while len(seated) < seats:
nextRound(ballots)
print(seated)
</syntaxhighlight>
Red 6.0
In the same way that [[Approval voting]] is considered by almost nobody to be worse than [[FPTP]], though some question the magnitude of the improvement, many find SPAV to be unambiguously better than [[SNTV]]. This is because it satisfies a stronger [[Weak forms of PSC|weak form of PSC]], which allows solid coalitions to gain proportional representation with less need for coordinated strategy. This makes it less likely to result in anomalous results (i.e. less likely that a minority wins a majority of seats using [[Vote management|vote management]], for example). If every voter bullet votes, SPAV becomes SNTV.▼
Green 4.0
Yellow 3.0
Blue 8.0
dtype: float64
['Blue']
Red 3.5
Green 2.0
Yellow 2.0
Blue 4.0
dtype: float64
['Blue', 'Red']
Red 2.166667
Green 1.833333
Yellow 1.166667
Blue 3.166667
dtype: float64
['Blue', 'Red', 'Green']
Red 2.083333
Green 1.250000
Yellow 1.166667
Blue 2.583333
dtype: float64
['Blue', 'Red', 'Green', 'Yellow']
==Notes==
▲SPAV's [[
▲In the same way that [[Approval voting]] is considered by almost nobody to be worse than [[FPTP]], though some question the magnitude of the improvement, many find SPAV to be unambiguously better than [[SNTV]]. This is because it satisfies a stronger [[Weak forms of PSC|weak form of PSC]], which allows solid coalitions to gain proportional representation with less need for coordinated strategy. This makes it less likely to result in anomalous results (i.e. less likely that a minority wins a majority of seats using [[
==See also==
|