Closed dsernst closed 1 month ago
@joshuaherr is attempting to deploy a commit to the SIV Team on Vercel.
A member of the Team first needs to authorize it.
The latest updates on your projects. Learn more about Vercel for Git ↗︎
Name | Status | Preview | Updated (UTC) |
---|---|---|---|
siv | ✅ Ready (Inspect) | Visit Preview | Sep 27, 2024 4:28am |
Confirmed the unit tests (both old and new) all pass:
How the election status page currently displays this (number_of_winners
set to 5):
Going to merge & deploy this for now, as all the Must Do tasks are complete.
[ ] Lack of Proportionality support: The algorithm as implemented, I'm afraid sadly may not be proportional either. This page https://fairvote.org/archives/multi_winner_rcv_example/ goes over the Single-Transferable Vote tallying algorithm for RCV... The biggest difference is STV's "fractional weighting" feature, once a ballot helps to elect a winner, those particular contributed-to-the-winner-ballots get significantly downweighted (e.g. to only 8%, in Fairvote's example). Whereas this PR's algorithm currently keeps them all at 100%.
[ ] This algorithm grabs as many winners as possible in a single round, rather than limiting it to just one per round (as STV does, for example). Unclear exactly how much of a difference this makes. But again, wanted to highlight, and thought this could be another useful thing to cover with more unit tests.
Somewhat related to the above point, I found it a tad hard in the front-end UI to follow what's happening exactly. See this example (screenshot above), for example: https://siv-git-multiwinner-rcv-sivteam.vercel.app/election/1727427598586.
Some improvements I thought that might make it a lot easier to follow:
[ ] a. Show the question's number_of_winners parameter on the results page.
[ ] b. Show threshold % needed in the UI for votes needed to qualify as a winner: 1 / (num_winners + 1)
(wiki: Droop Quota)
[ ] c. Highlight which candidates cross the threshold as winners specifically in the round where they do so
[ ] The "Tie among bottom candidate" note in the UI doesn't make any sense in the example link above, because all 4 of the candidates listed in Round 1 are actually ascending as winners, not getting eliminated as losers.
Another slight issue to be mindful of— the same way single-winner IRV is a little ambiguous for who to eliminate in the case of bottom place ties, this new one is also a bit ambiguous in who to promote in the case of top-place ties.
E.g. if there are only two winner spots available, but three candidates all tie for the same top score.
(My guess is that as implemented, it will currently tie-break via alphabetical ordering, but haven't tested to be sure.)
<CheckForTies />
warning to also highlight if/whenever this happens.
Goal is to extend the existing Ranked Choice ballot design for voters, but to adapt the tallying algorithm to support declaring multiple winners, not just a single one.
Specific use-case:
There are 5 open nomination spots on the voting org's Executive Committee. 6 people have signed up as candidates.
The org's bylaws require all elections to use Ranked Choice Voting. Goal is to have voters fill out a single RCV ballot for the 6 candidates, but then be able to declare multiple winners.
Current Level of SIV Support
SIV does support ranked choice voting, with a nice front-end UI for voters.
But currently, the only RCV tallying SIV supports is single-winner IRV (Hare algorithm — eliminate lowest until someone crosses 50%.).
This PR would extend that to multiple winners.
Proportionality:
One unclear question is how important it is for the algorithm to respect Proportionality?
Must Do's before merging
number_of_winners
to ballot schema in election-admin editor