SimultaneousVeto implementation#333
Merged
peterrrock2 merged 7 commits intomggg:3.4.0from Mar 9, 2026
Merged
Conversation
3f59a44 to
e9944e4
Compare
906b800 to
a6a829d
Compare
peterrrock2
reviewed
Mar 6, 2026
Collaborator
peterrrock2
left a comment
There was a problem hiding this comment.
This is looking great! If you would like to accept these suggestions, we can get you merged in!
Co-authored-by: Peter <27579114+peterrrock2@users.noreply.github.com>
Co-authored-by: Peter <27579114+peterrrock2@users.noreply.github.com>
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implemented the voting rule SimultaneousVeto as described in the 2023 paper "Generalized Veto Core and a Practical Voting Rule with Optimal Metric Distortion" (link: https://arxiv.org/abs/2305.19632).
SimultaneousVeto is an anonymous version of PluralityVeto - instead of querying the voters in a random order for their vetoes, all vetoes are processed simultaneously.
Each candidate begins with a score, then, all at the same time, voters remove score from their least favorite candidates at a constant rate. As candidates' scores reach zero, they are eliminated, and voters that were vetoing them transfer to their next least-favorite candidate. Initializing scores as the number of first-place votes (SimultaneousPluralityVeto) yields a voting rule that guarantees worst-case metric distortion of 3, which is the best a deterministic rule can do. However, this implementation of SimultaneousVeto also permits other methods of score initialization, which may have interesting properties.
NOTE: this PR also includes all the commits from the plurality-veto branch since I rebased simultaneous-veto onto plurality-veto.