Wie wird New York City den Ranglisten-Wahlalgorithmus mit Tausenden von einzigartigen möglichen Bürgermeisterwahlen physisch implementieren?

Die New Yorker von Politico wählen einen neuen Bürgermeister, nachdem chaotische, historische Vorwahlen begonnen haben:

NEW YORK – Die Umfragen sind bei der ersten Ranglistenwahl in New York City geschlossen, und obwohl die Würfel gefallen sind, wissen die Wähler möglicherweise wochenlang nicht, wie es ausgeht.

[...] Eine weitere Ausweitung der Stimmzettelzahl ist das Aufkommen der Ranglistenwahl, die es den New Yorkern ermöglicht, bis zu fünf Kandidaten für jede Position auszuwählen. Das System greift, wenn kein Kandidat im ersten Durchgang 50 Prozent der Stimmen erhält. Der Vorstand plant, die vorläufigen Ergebnisse der Ranglistenwahlen am 29. Juni bekannt zu geben.

Demnach : _

Mehr als ein Dutzend Demokraten und zwei Republikaner werden um die Nachfolge des scheidenden Bürgermeisters Bill de Blasio (D) kämpfen. Es wird erwartet, dass die Entscheidung für die Ranglistenwahl Wochen dauern wird.

Die Anzahl unterschiedlicher, aber gültiger Möglichkeiten, wie eine Person wählen kann, ist also groß. Ich denke, dass es die Summe von 0-, 1-, 2-, 3-, 4- und 5-aus-14-Möglichkeiten ist, aber ich bin mir nicht einmal sicher (siehe unten).

Ich bin gespannt, wie New York City die Auszählung der Stimmen nach Rangfolge physisch und rechnerisch umsetzen wird.

Frage: Algorithmisch geht das über mehrere Durchgänge einer Sortierfunktion über alle Ranglisten-Stimmen in einer Tabelle im Speicher oder auf einer Festplatte, aber wie setzt man das bei den verschiedenen physischen Formen der Stimmabgabe bei der Bürgermeisterwahl in New York um? ?

Werden sie auf eine vollständig elektronische Implementierung des Algorithmus, eine vollständig physische oder eine hybride Methode zurückgreifen?


In Python unter der Annahme (zum Beispiel) genau 14 verfügbare Kandidaten (in Mathematik ist es die Anzahl der Permutationen ohne Wiederholungen )

from itertools import permutations
possible = []
for k in [0, 1, 2, 3, 4, 5]:
    uniques = list(permutations('abcdefghijklmn', k))
    possible.append(uniques)
    print(k, len(uniques))
all_possible = sum(possible, [])
print('total: ', len(all_possible))

 k        uniques
 0           1
 1          14
 2         182
 3        2184
 4       24024
 5      240240

total:  266645
Worum geht es in Ihrer Frage? Die politischen und logistischen Risiken und Folgen der Wahl eines Wahlsystems, das manche für zu kompliziert und verwirrend halten würden? Oder die Algos dafür? Ich glaube wirklich nicht, dass das Zitieren von Python-Code in der Absicht dieser Site liegt. Angesichts klarer Regeln für die mathematische Funktionsweise des Rankings besteht jedoch wahrscheinlich das geringste Problem darin, die Ergebnisse zu erhalten, nachdem die Stimmzettel gescannt oder hochgeladen wurden.
@ItalianPhilosophers4Monica siehe den Teil, in dem es heißt Frage: in fetter Schrift, "... aber wie implementieren sie das ..." Es geht nicht um Regeln, es geht darum, wie die Regeln implementiert werden; durch physisches Zählen und Sortieren von mehr als 3000 Arten von Stimmen.
Es ist etwas unklar, was Sie fragen. Sie fragen, wie der Stimmzettel aussehen könnte, bei so vielen möglichen Kombinationen? Denken Sie daran, dass es nicht für jede Kombination ein separates Kästchen geben muss, es könnte einfach ein Raster mit einer Linie für jeden Kandidaten und fünf Spalten für die erste bis fünfte Wahl geben.
anstatt Code zu posten, vielleicht einen Probe-Stimmzettel posten?
@AlphaDraconis sowohl fast sofortige als auch korrekte Antworten deuten darauf hin, dass die Frage für mindestens zwei Personen klar ist.
@ItalianPhilosophers4Monica In diesem Fall wäre das 142. Beispiel für eine Rangfolge von vier Auswahlmöglichkeiten 1.: 'a', 2.: 'c', 3.: 'b', 4.: 'n'
Ranking-Choice-Voting (RCV) kann sich auf verschiedene Abstimmungssysteme beziehen, wobei ich in den USA denke, dass es normalerweise Instant-Runoff-Voting (IRV) bedeutet – ist das hier gemeint?
Beachten Sie, dass „mehrere Durchgänge“ nicht so suboptimal sind, wie es scheint, da alle bis auf den ersten Durchgang auf den Stimmzetteln stattfinden, die für den verbleibenden Kandidaten mit der niedrigsten Stimmenzahl zählen (dh die Stimmzettel, auf denen sie der höchste überlebende Kandidat sind). ). Dies muss weniger als N/n (N Stimmzettel, n verbleibende Kandidaten) sein und wird in der Praxis viel weniger sein, da die ersten Kandidaten, die eliminiert werden, Randoptionen sein werden, und sobald die Leute für ihren Kumpel/Top-Einzelkandidaten gestimmt haben, Ich komme schnell zu einer Mainstream-Option.
@gidds Ich denke, das kann in einer neuen (und interessanten) Frage untersucht werden. die Quellen, die ich verwendet habe, spezifizieren nicht. Vielleicht haben verschiedene Staaten und Kommunen sogar unterschiedliche Geschmacksrichtungen gewählt.
Die Stimmzettel sind so, dass Sie nur eine Zweitstimme abgeben können und so weiter. Ich weiß nicht, ob diese gezählt würden und wenn ja, wie sie gezählt würden, aber die Anzahl der eindeutigen Möglichkeiten, einen Stimmzettel mit einer Stimme zu markieren, beträgt möglicherweise 70, nicht 5.
@phoog verwechseln Sie nicht die Art und Weise, wie die Berechnung mit dem Ergebnis durchgeführt wird. Nichts, was ich gesagt habe, deutet darauf hin, dass es 5 einzigartige Möglichkeiten gibt. Ich habe einfach die Zählung durchgeführt, indem ich Abstimmungen getrennt habe, die entweder 0, 1, 2, 3, 4 oder 5 Namen aufführten, und dann Permutationen ohne Wiederholungen auf jeden angewendet habe , um die Anzahl der eindeutigen Möglichkeiten aufzuzählen, wie man mit dieser Anzahl von Namen gültig abstimmen kann . Ich habe Leute nicht berücksichtigt, die 1. und 2. leer lassen und zum Beispiel nur die unteren drei ausfüllen, weil ich annehme, dass diese nicht als gültig angesehen würden.
Geht es bei dieser Frage nicht um Precinct Summability ? Wie werden ohne sie die Stimmzettelinformationen sicher zum zentralen Auszählungsort transportiert, wo die STV durchgeführt wird?

Antworten (4)

Wie Ranglisten-Wahlstimmen von Hand gezählt werden können

Ich denke, das Zählen kann von Hand durchgeführt werden (ggf. mit mehreren "Durchgängen"). Zum Beispiel in Kanada laut CBC.ca (über Ranglistenwahl in Kanada):

„Sie sind wirklich einfach. Sie sind so einfach wie eins, zwei, drei. Sie ordnen Ihre Entscheidungen der Reihe nach – also, wen möchte ich Bürgermeister werden, wer ist meine erste Wahl, wer ist meine zweite Wahl und wer ist meine dritte Wahl.

In der ersten Runde addieren wir einfach die ersten Wahlmöglichkeiten, und wenn jemand die Mehrheit hat, ist es vorbei. Sie gewinnen. Aber wenn niemand eine Mehrheit hat – sagen wir, die Person mit den meisten Stimmen hat nur 30 Prozent – ​​dann sollten sie natürlich nicht unbedingt Bürgermeister sein.

Sie eliminieren also den Kandidaten mit den wenigsten Stimmen und übertragen diese Stimmzettel bei jedem Wahlgang einfach auf die zweite Wahl, bis jemand die Mehrheit hat.

Das Auszählen von Hand scheint nicht so schwierig zu sein, Sie müssten nicht alle möglichen Stimmkombinationen im Auszählungsprozess berücksichtigen.

Wie das Zitat sagt, beginnen Sie damit, die Stimmzettel nach erster Wahl zu teilen. Wenn Sie 14 Kandidaten haben, dann haben Sie 14 Stapel Stimmzettel. Wenn es basierend auf der ersten Wahl keinen Gewinner gibt, eliminieren Sie den Kandidaten mit den wenigsten Stimmen (erste Wahl) und beginnen, sich die zweite Wahl auf den Stimmzetteln dieses Stapels anzusehen. Dann sind nur noch 13 Kandidaten im Rennen. Dieser Vorgang wird fortgesetzt, bis Sie einen Gewinner haben.

So beschreibt NPR auch den Auszählungsprozess für die New Yorker Bürgermeisterwahl:

  1. Wenn jemand 50 % plus eins erhält, nachdem alle Erststimmen gezählt wurden, ist die Wahl beendet und dieser Kandidat gewinnt.

  2. Aber wenn niemand 50 % plus eins bekommt, geht es in Runde 2 weiter.

  3. Die Person mit der niedrigsten Anzahl an Stimmen auf dem ersten Platz wird eliminiert, und die zweite Wahl der Wähler dieses Kandidaten wird als Stimmen für andere Kandidaten neu verteilt.

  4. Diese Neuverteilung der Stimmen wird fortgesetzt, bis jemand 50 % plus eins erreicht.

New Yorks Umsetzung

Bei der Wahl in New York hingegen werden die Stimmen maschinell ausgezählt. Wie CBS News am 25. Mai 2021 berichtete :

Die New Yorker können damit rechnen, schneller herauszufinden, wer die bevorstehende demokratische Bürgermeisterwahl der Stadt gewonnen hat, als wenn das New York State Board of Elections am Dienstag nicht gehandelt hätte, um eine Software für die tabellarische Auflistung der Wahlergebnisse zu genehmigen. Die Entscheidung bedeutet, dass die Stadt nun eine langwierige Handauszählung der im Rennen im nächsten Monat abgegebenen Stimmzettel vermeiden wird.

Trotzdem werden Ergebnisse aus demselben CBS News-Artikel wahrscheinlich nicht sofort verfügbar sein :

Trotz der Softwarezulassung wird es noch Tage, wenn nicht Wochen dauern, bis die New Yorker wissen, wer die Vorwahlen am 22. Juni gewonnen hat. Es wird erwartet, dass inoffizielle Ergebnisse der First-Choice-Stimmen am Vorwahlabend veröffentlicht werden, um die First-Choice-Stimmen zu zeigen, aber der Wahlausschuss der Stadt sagt, dass die Beamten erst in der folgenden Woche mit der Berechnung der Ergebnisse beginnen können.

Die spezifische Implementierung wurde bereits ausführlich in Zach Liptons Antwort behandelt .

Ist es das, was sie wirklich in NYC machen? Alle Stimmzettel an denselben Ort transportieren und physisch auszählen?
@endolith Sie müssen sie nicht alle an einen einzigen Ort bringen, Sie können die Zählung einmal pro Bezirk durchführen und die Zählungen an einem zentralen Ort abrufen. Zählen Sie dann die Stimmzettel nach, bei denen die erste Wahl für den niedrigsten Rang war, und fahren Sie fort. Was Sie natürlich tun müssen, ist zu warten, bis alle Distrikte ihre Ergebnisse gemeldet haben, damit Sie wissen, wer in einer bestimmten Phase Letzter ist
Ich hatte nicht lange darüber nachgedacht, aber ich glaube nicht, dass mir in den Sinn gekommen wäre, dass bei Stimmzetteln, die mit ihrer ersten Stimme für einen der Spitzenkandidaten enden, die niedrigeren Wahlmöglichkeiten völlig außer Acht gelassen werden. Oder gibt es eine ähnliche Methode, die niedrigeren Picks Gewicht verleiht ?
@MichaelRichardson - Das könnte eine wirklich interessante neue Frage sein. Aber wenn Sie für einen der Spitzenkandidaten stimmen, warum sollte es dann von Bedeutung sein, wen Sie sonst noch haben wollten, wenn er den Job nicht bekommen würde?
@Bobson Angenommen, es gibt zwei wirklich beliebte, aber umstrittene Kandidaten, A und B, die die meisten Stimmen auf Platz 1 unter sich aufteilen, aber die Wähler für jeden von ihnen hassen den anderen wirklich . Es gibt auch einen angesehenen Kompromisskandidaten C, den jeder mag, aber in den meisten Fällen nicht als seine erste Wahl gilt. C erhält eine überwältigende Mehrheit der #2-Stimmen. C scheint die offensichtlich beste Option zu sein, mit der bei weitem breitesten Unterstützung, wenn Sie die Nr. 2-Stimmen überprüfen, aber C wird eliminiert, weil es nur 5 % der Nr. 1-Stimmen hat, und Sie haben am Ende einen Gewinner, den die Hälfte der Wähler etwas mehr als mögen C, aber die andere Hälfte hassen.
@Douglas: IRV ist nicht perfekt. Was Sie beschreiben, ist ein großartiges Beispiel dafür, dass IRV das Condorcet-Kriterium nicht erfüllt (jeder, der jede paarweise Wahl gewinnen würde, sollte die gesamte Wahl gewinnen).
@ChrisH Nun, tun sie das tatsächlich? Jeden Distrikt anrufen und Ergebnisse iterativ über einen langen Zeitraum sammeln? Andere Gerichtsbarkeiten transportieren sie alle an einen zentralen Ort : „Wenn kein Kandidat in der Wahlnacht in den Rennen mit drei oder mehr Kandidaten die Mehrheit der Stimmen gewinnt, werden die Stimmzettel und Speichergeräte aus jeder Gemeinde sicher zu einem zentralen Aufstellungsort in Augusta transportiert ."
@Douglas Ja, C wäre der rechtmäßige Gewinner, aber die meisten Leute, die für RCV-Referenden stimmen, möchten nur die Kandidaten einstufen und sich nicht darum kümmern oder verstehen, wie die Stimmzettel tatsächlich gezählt / eliminiert werden.
Die Auszählung könnte von Hand erfolgen, aber das ist keine Antwort auf die Frage, „wie wird NYC die Stimmen auszählen?“. Die Stimmzettel können vom Computer gescannt werden, daher ist die offensichtliche Absicht, dass der Computer die Stimmen zählt, nicht die Menschen.
@phoog du hast recht, ein wenig bearbeitet, um die NY-Implementierung genauer zu beschreiben. In meiner ursprünglichen Antwort habe ich mich darauf konzentriert, wie diese Stimmen von Hand gezählt werden können, da dies ein wesentlicher Teil der Frage zu sein schien.
@ChrisH Sie können auch jeden Bezirk einzeln mit einer Pseudokandidaten-Rangordnung auswerten lassen, was bei mehr als einer Handvoll Kandidaten schnell absurd wird: rangevoting.org/IrvNonAdd
@uhoh Ich denke, Sie müssen Antworten einzeln verfolgen, wenn Sie Benachrichtigungen erhalten möchten.
@JJJ ach! Ich folge nicht wirklich (anscheinend in mehr als einer Hinsicht), also habe ich nie bemerkt, dass es auch bei jeder Antwort vorhanden war. tnx!

New York City hat bei Sonderwahlen Anfang dieses Jahres einige Stimmzettel per Hand tabelliert , bei denen die Anzahl der Stimmzettel und Kandidaten vergleichsweise gering und das Auszählen von Hand praktikabler war.

Für die Bürgermeisterwahlen hat die staatliche Wahlbehörde jedoch eine Software für den Auszählungsprozess zertifiziert: The RCV Universal Tabulator , ein Open-Source-Paket, das von einer gemeinnützigen Gruppe namens The Rated Choice Resource Center entwickelt wurde.

Die Software ist Open Source und kann auf GitHub eingesehen werden . Ich stelle mir vor, dass die physischen Stimmzettel mit typischen zertifizierten Abstimmungstabellengeräten gescannt werden, um die Eingabe für die RCV-Software zu erzeugen. Wenn Sie Java lesen können, sieht die Kerntabellenschleife ziemlich einfach aus (die Software unterstützt mehrere Gewinner, obwohl dies bei dieser Wahl eindeutig nicht verwendet wird):

// At each iteration, we'll either a) identify one or more
// winners and transfer their votes to the remaining candidates (if we still need to find more
// winners), or b) eliminate one or more candidates and gradually transfer votes to the
// remaining candidates.

Sie werden schließlich auch den vollständigen Stimmensatz veröffentlichen, der es jedem ermöglicht, seine eigene Version des Algorithmus auszuführen, wenn er dies wünscht.

Von den drei aktuellen Antworten befasst sich nur diese direkt mit der Frage: "Wie wird New York City den Ranglisten-Wahlalgorithmus physisch implementieren ..." Stimmzettel werden gescannt und die Daten von Software X verarbeitet, die von Vorstand Y zertifiziert wurde, und hier sind die unterstützenden Quellen. Wir werden nicht nach jedem Durchgang vierzehn Stapel handsortierter Stimmen sehen.
Update: Jetzt tun es einige andere auch.
"Sie werden schließlich auch den vollständigen Stimmzettel veröffentlichen" Können Sie eine Quelle dafür angeben?
@endolith Die Quelle ist der unter „zertifizierte Software“ verlinkte Gothamist-Artikel, in dem es heißt: „Bisher sagte die Stadt BOE, dass sie den sogenannten „Abstimmungsdatensatz“ erst veröffentlichen wird, nachdem die primären Ergebnisse zertifiziert sind, was sein könnte mehrere Wochen nach der Vorwahl. Der Datensatz der abgegebenen Stimmen zeigt die Ergebnisse basierend darauf, wie die Wähler alle ihre Entscheidungen bewertet haben, und es wird verwendet, wenn die Ergebnisse der Ranglisten-Wahl zusammengestellt werden.
Und nur um nachzufassen, hier ist der Stimmzettel , der nach der Vorwahl online gestellt wurde.

Ich glaube, Sie missverstehen, wie die Ranglistenwahl funktioniert. Wenn wie bisher kein Kandidat 50 % der Stimmen erreicht, scheidet der letztplatzierte Kandidat aus. Ihre Stimmzettel werden nun alle den Kandidaten zweiter Wahl ihrer Wähler zugeteilt. Die einzigen Stimmen, die neu ausgezählt werden müssen, sind also die des letztplatzierten Kandidaten.

Wir gehen dann zurück zum Anfang und tun so, als hätten diese neu kategorisierten Stimmen den Kandidaten der zweiten Wahl als Kandidaten der ersten Wahl, den Kandidaten der dritten Wahl als Kandidaten der zweiten Wahl usw. und sehen erneut nach, ob jemand 50 % überschritten hat. Wenn nicht, wiederholen wir den Vorgang mit dem neuen Letztplatzierten. Beachten Sie, dass es möglich ist, dass die Schwelle für 50 % im Laufe des Prozesses sinkt, wenn jemand keinen zweiten, dritten usw. Kandidaten auswählt.

Der Prozess wird hier beschrieben: https://vote.nyc/page/ranked-choice-voting

Ich möchte auch hinzufügen, dass (a) sie den Prozess erst nächste Woche beginnen werden und (2) einige der Neuzuweisungen in der ersten Runde sehr schnell gehen werden, da es sehr kleine Zahlen für die kleinsten Kandidaten gibt.

Meine Frage stellt einfach die Frage, damit Antworten gepostet werden können. Mein Verständnis oder Missverständnis ist Ihnen aus der Formulierung der Frage nicht ersichtlich und sollte nicht Teil Ihrer Antwort sein. "Was du nicht verstehst, ist..." Antworten erscheinen mir überflüssig.
@uhoh Sie beschreiben einen Prozess, der nicht der Funktionsweise von Ranglistenwahl entspricht. Ich habe die Frage nach dem Wie beantwortet, aber auch darauf hingewiesen, dass Ihre Frage fehlerhaft war, weil die Abstimmung nicht so funktioniert, wie Sie es sich vorstellen.
Du weißt nicht, was ich denke. Das ist axiomatisch. "Es ist einfacher als viele Leute denken ..." oder "All das Händeringen ist umsonst ..." ist in Ordnung, aber es ist unnötig, mich oder einen OP in SE persönlich mit "Sie verstehen nicht ..." herauszuheben. ."
Sie sprechen darüber, wie viele mögliche Abstimmungskombinationen es geben könnte (und schreiben ein Python-Programm zu etwas, das mit Highschool-Mathematik und einem Taschenrechner berechnet werden könnte – und haben obendrein die falsche Antwort erhalten. Die Anzahl der Ranglistenauswahlen von 5 von 14 Kandidaten wenn ₅*P*₁₄ = 14!/5! = 726.485.760). Sie brauchen keine Algorithmen, Sie brauchen Stapel von Stimmzetteln. Ich habe dieses Material früher unterrichtet. Ich weiß es und ich merke, wenn jemand es nicht versteht.
Und meine genauen Worte waren: „Ich glaube, Sie missverstehen, wie Ranglistenwahl funktioniert.“ Nichts, was Sie gesagt haben, hat etwas bewirkt, außer mich davon zu überzeugen, dass Sie es nicht tun.
Nichts, was Sie gesagt haben, deutet darauf hin, dass Sie nicht denken 𝜋 = 3 und doch habe ich dazu geschwiegen, bis Sie meine Hand gezwungen haben :-) Ich habe wechselnde Kombinationen auf Permutationen ohne Wiederholungen aktualisiert, aber nur 240.240 für 5 von 14; Wenn die Mathematik falsch ist, muss ich es ansprechen und es jetzt noch einmal überprüfen ...
Für 14!/(14-5)! Ich bekomme 240.240; Ich denke, es ist in Ordnung. Die interessante Frage wird sein, wie viele New Yorker Wähler die „Ohne Wiederholungen“-Regel vergessen haben!
D''oh! Es ist so lange her, seit ich eine Permutation berechnen musste, dass ich den Nenner falsch verstanden habe. Meistens ist die Berechnung die Permutation, die einen Nenner von (mn)!n! und ich habe den falschen Nenner fallen lassen. Es ist 15 Jahre her, seit ich das letzte Mal unterrichtet habe. Aber egal, diese Zahl spielt bei der Ranglistenwahl keine Rolle. Die gleiche Klasse, in der ich Permutationen unterrichtete, befasste sich auch mit Abstimmungsalgorithmen, und wir führten eine Scheinwahl (von Eissorten) mit mehreren Abstimmungsalgorithmen durch. Selbst mit 40 Schülern war es eine schnelle Aufgabe, die Stimmen im Unterricht für jeden der Algorithmen zu zählen.
Im Nachhinein hätte ich eine Wahl zu Stimmenzählalgorithmen haben sollen.
Die Regel ohne Wiederholungen gilt nicht unbedingt, auch weil die Leute nicht unbedingt einen Kandidaten für jeden Auswahlplatz auswählen. Ganz zu schweigen von Write-Ins, die rund 700 iirc First-Choice-Stimmen ausmachten.
Das wäre eine hervorragende Antwort und würde etwas demonstrieren, das ich wirklich nicht zu schätzen wusste! Erwägen Sie, es Ihrem Beitrag hinzuzufügen?
@DonHosek Uh, es würde geschrieben werden ₁₄P₅, nicht ₅P₁₄, und gleich 14!/9!, nicht 14!/5!. Irgendwie ironisch, angesichts des Kontexts.
Um nicht zu weit in das mathematische Argument hineingezogen zu werden, aber , für genau 5 von 14 bewerteten Entscheidungen ist es 14!/9!, aber für bis zu 5 von 14 bewerteten Entscheidungen ist es tatsächlich SUM(14!/(14-n)!) for n=1 to 5das, was ich in Excel berechnen könnte, aber trotzdem, ... Punkt ist, dass es dafür keine Rolle spielt.
Don, ich musste Ihre Antwort ablehnen, weil ich Ihre Kommentare nicht ablehnen konnte. Ich weiß, wie RCV funktioniert, mindestens genauso gut oder besser als alle anderen Anwesenden. Und Sie verstehen die Grundlage der Frage nicht. Letztlich geht es um den undurchsichtigen Transport von Stimmzetteldaten zum zentralen Auswerteort. Hare RCV ist nicht wie FPTP bezirkssummierbar . Aber ein Condorcet-konformer RCV wäre bezirkssummierbar (so dass kein undurchsichtiger Transport von Stimmzetteldaten erforderlich wäre und der Gewinner durch Hinzufügen von Bezirkszwischensummen bestimmt werden kann), wenn dieser verwendet würde. Leider ist es nicht.

Ich bin gespannt, wie New York City die Zählung der Stimmen nach Rangfolge physisch und rechnerisch umsetzen wird.

Physisch erhielten die Wähler einen tabellarischen Stimmzettel (siehe diese Seite der Regierung von NYC )Geben Sie hier die Bildbeschreibung ein, in dem die Zeilen Kandidaten und die Spalten die bevorzugte Reihenfolge darstellen, und die Stimmzettel werden gescannt, um Aufzeichnungen unterschiedlicher Länge zu erhalten (der Wähler kann 1 bis 5 Auswahlmöglichkeiten ausdrücken), die die gewählten Kandidaten enthalten Reihenfolge der Präferenz.

Rechnerisch hat NYC eine ausfallsicherere Version dieses (relativ) einfachen Python-Skripts

from random import seed, shuffle
from timeit import default_timer as dt
seed(20210622)
n_candidates, n_choices, n_ballots = 14, 5, 10**6    
# ##### generate the ballots
start_generation = dt()
candidates = list(range(n_candidates))+[0] # introducing a bias for candidate 0
ballots = [candidates[:n_choices] for _ in range(n_ballots)
           if not shuffle(candidates)]
print("\nGeneration of %d ballots required %.2f s"%(
        n_ballots, dt()-start_generation))

# ##### process the ballots
start_count = dt()
while True:
    counts = {candidate:0 for candidate in candidates}
    # count 1st choices
    for ballot in ballots: counts[ballot[0]] += 1
    # sort candidates according to 1st choices
    ranks = sorted(list(counts.items()), key=lambda t:t[1])
    # max no. of 1st choices
    max_1st = ranks[-1][1]
    # if there is a winner, stop counting
    if max_1st > len(ballots)//2: break
    
    # who is the loser?
    loser = ranks[0][0]
    
    # remove loser from ballots and from list of candidates
    for ballot in ballots:
        if loser in ballot: ballot.remove(loser)
    candidates.remove(loser)

    # remove any empty ballot from list of ballots
    # (copying not empty ballots is WAY FASTER than deleting void ballots)
    ballots = [ballot for ballot in ballots if ballot]

# we have a winner
print(*reversed(ranks), sep='\n')
print("Counting %d ballots required %.2f s"%(
        n_ballots, dt()-start_count))

Als ich es auf meinem alten Low-End-Notebook ausführte, erhielt ich die folgende Ausgabe

Generation of 1000000 ballots required 9.29 s
(0, 490711)
(12, 245897)
Counting 1000000 ballots required 6.08 s

Schon in dieser Simulation zeigt sich, dass das eigentliche Problem darin besteht, die Daten in einem für die Zählung geeigneten Format aufzubereiten, dann geht es um Sekunden…


Als Fußnote dachte ich zunächst, ich müsste das Skript mithilfe von Vektormathematikbibliotheken optimieren, aber es stellte sich heraus, dass dies nicht erforderlich ist.

Kommentare sind nicht für +1, also werde ich +n!stattdessen, aber ich frage mich, ob die Erkennung und Behandlung fehlender Rankings (z. B. nur 2., 3. und 5.) oder Wiederholungen (z. B. 1.: "X", 2.: "Y", 3.). : "X") ist ein wichtiger Teil des Prozesses? Ich habe nicht speziell danach gefragt, aber da Sie einen Beispielalgorithmus gepostet haben, sollte er irgendwie jedes der kritischen Elemente darstellen.
Bei fehlenden Rankings hat die Wahlkommission das letzte Wort, aber ich würde sagen "einfach die Präferenzen «nach links verschieben»: s/- 3 - 7 2/3 7 2 - -/." Gleiches gilt für Wiederholungen, aber hier sagt die von mir verlinkte Seite, dass Wiederholungen einfach ignoriert werden, so sollte es sein s/3 3 3 12 1/3 12 1 - -/. Schließlich werden bei der Verarbeitung unterschiedliche Datensatzlängen behandelt, sodass ich sagen kann, dass Datensätze mit unterschiedlicher Länge auch im ersten Durchgang behandelt werden können.
@uhoh Dies mag eine zu starke Vereinfachung sein, aber der in der Antwort verlinkte NYC-Erklärer geht teilweise darauf ein. „Wenn Sie Ihren Wunschkandidaten mehr als einmal platzieren, zum Beispiel als Ihre 1., 2., 3., 4. und 5. Wahl, dann zählt nur Ihre erste Platzierung“: Dies deutet darauf hin, dass wiederholte Stimmen für denselben Kandidaten stattdessen einfach ignoriert werden Stimmzettel ungültig machen. "Wenn Sie diesen Kandidaten zuerst eingestuft haben, geht Ihre Stimme an den nächsthöheren Kandidaten auf Ihrem Stimmzettel", schlägt vor, dass fehlende Ebenen übersprungen werden
Es könnte wichtiger sein zu wissen, was passiert, wenn jemand (irrtümlich) zwei Kandidaten auf den gleichen Platz setzt, z. B. X und Y als ersten, dann Z als dritten usw. Der Umgang mit ungültigen Stimmzetteln ist jedoch nicht spezifisch für diese Art von Schema .