(toiminnot)

hwechtla-tl: Nettipäiväkirja 07.02.2014

Kierre.png

Mikä on WikiWiki?
nettipäiväkirja
koko wiki (etsi)
viime muutokset


Pidin Lambda ry:n tapaamisessa alustuksen äänestysjärjestelmistä:

https://docs.google.com/presentation/d/1KKOgzRP-cPlS0mOfAQHP7KhHh6yM5gmK-kdKYnvYwxI/edit?usp=sharing

Tapaamiset ovat lähteneet mielestäni ihan mukavasti käyntiin, suosittelen lämpimästi kaikille, että tulette keskustelemaan kiinnostavista aiheista:

http://wiki.helsinki.fi/pages/viewpage.action?pageId=123603803


Tapaamisessa pidettiin äänestys seuraavan tapaamisen tarjoiluista. Tässä ovat äänet. Kukin rivi vastaa yhtä ääntä. Kukin ääni on järjestyksessä suosituimmasta vähiten suosittuun. Sulkeissa olevat ovat keskenään yhtä suosittuja. Putkimerkki (|) on "hyväksyntäraja", jota ennen olevat tarjoilut kelpaavat ja jonka perässä olevat eivät kelpaa. Äänistä, joissa ei ollut lueteltu kaikkia vaihtoehtoja (n=2), katsottiin luettelemattomien olevan vähiten suosittuja ja yhtä suosittuja keskenään. Su=suklaa, He=hedelmät, Ke=keksit, Ol=oliivit, Po=porkkanat, Pa=patongit, Pä=pähkinät.

$ cat äänet.txt
Su Pa | He Po ( Ke Pä Ol )
He Ke Ol Pa Su Pä | Po
Ke Pä Su Pa He | Po Ol
Ke He Su Ol Pa | Pä Po
Ol Pa ( Su Po ) He Ke Pä |
Ke He Po Su Pä | Ol Pa
He Po Pä | Ke Pa Ol Su
Su Ke Po Pä Pa He | Ol
Ol Pa Ke He Su | Po Pä
Po Pä Ke Su He | Ol Pa
Su He Ke Pa Po Pä | Ol

Jos äänet katsottaisiin normaalin "suosituimmuusäänestyksen" ääniksi siten, että kukin äänestäjä äänestää omaa suosikkiaan, tulokset olisivat:

$ cut -d' ' -f1 äänet.txt | sort | uniq -c | sort -nr
      3 Su
      3 Ke
      2 Ol
      2 He
      1 Po

Eli suklaa ja keksit voittaisivat.

Jos äänet katsottaisiin hyväksyntä-äänestyksen ääniksi siten, että äänestäjä antaa äänen kaikille hyväksyntäviivan yläpuolella oleville vaihtoehdoille, tulokset olisivat:

$ sed 's/ |.*$//' äänet.txt | tr ' ' \\012 | egrep -vx '\(|\)' | sort | uniq -c | sort -nr
     10 Su
     10 He
      9 Ke
      8 Pä
      8 Pa
      6 Po
      4 Ol

Eli suklaa ja hedelmät voittaisivat. Edellisen äänestyksen jaettu kolmonen, oliivit, on nyt peränpitäjä. Suosituimmuusäänestys suosii ekstremistejä, jotka jakavat mielipiteitä.

Jos vaihtoehdoille annettaisiin pisteet kuudesta nollaan Borda-äänestyksessä, tulos olisi seuraava. Alla olevat tulokset piti korjata käsin, koska en viitsinyt toteuttaa sulkeita - kekseille -2 pistettä, pähkinöille ja suklaalle -1.

$ sed 's/|*(*)*//g' äänet.txt | awk '
   { for ( s=1; s < 7; s++ ) p[$s] += 7 - s; }
   END { p["Pä"]--; p["Su"]--; p["Ke"]-=2; for ( v in p ) print p[v], v }
   ' | sort -nr
44 Ke
41 He
39 Su
30 Pa
29 Po
22 Pä
22 Ol

Tällä kertaa siis voittivat keksit, mikä johtuu monista 2. ja 3. sijan äänistä. Borda-äänestyksen merkillinen puoli on se, ettei se anna kummoistakaan eroa suosituimmille vaihtoehdoille, mutta hännillä oleville kyllä. Huomaa, että pähkinät ja oliivit saavat samat pisteet, vaikka pähkinät hyväksyy kaksinkertainen määrä ihmisiä oliiveihin verrattuna.

IRV-äänestyksessä eliminoidaan epäsuosituimpia vaihtoehtoja ja jaetaan niiden saamat äänet seuraavalle äänessä mainitulle, kunnes jokin vaihtoehto saa enemmistön. Lähdemme liikkeelle eliminoimalla suosituimmuusäänestyksen tuloksista kokonaan ääniä saamattomat, eli patongin ja pähkinät. Sitten vain eliminoimaan vähiten suosittuja vaihtoehtoja.

$ cat äänet.txt | sed 's/Pa //;s/Pä //' | cut -d' ' -f1 | sort | uniq -c | sort -nr
      3 Su
      3 Ke
      2 Ol
      2 He
      1 Po
$ cat äänet.txt | sed 's/Pa //;s/Pä //;s/Po //' | cut -d' ' -f1 | sort | uniq -c | sort -nr
      4 Ke
      3 Su
      2 Ol
      2 He
$ cat äänet.txt | sed 's/Pa //;s/Pä //;s/Po //;s/He //;s/Ol //' | cut -d' ' -f1 | sort | uniq -c | sort -nr
      6 Ke
      3 Su
      1 (
      1 |

Keksit voittivat tälläkin tavalla. (Sulkeissa ja viivan perässä olevia ääniä ei tarvitse laskea, koska ilman niitäkin kekseillä on enemmistö, 6>11/2.)

Condorcet-äänestyksessä lasketaan ensin kaikki mahdollisten kahdenkeskisten vaalien tulokset. Tätä en alkanut tehdä Unix-työkaluilla, mutta latasin voteengine-nimisen Python-skriptin tarkoitusta varten.

$ ./voteengine.py -m table -cands He Ke Ol Pa Po Pä Su <äänet.txt
VOTES   11
Margins
          He    Ke    Ol    Pa    Po    Pä    Su
He         X    -1     7     1     5     5    -1
Ke         1     X     6     5     3     6     3
Ol        -7    -6     X     1    -3    -2    -3
Pa        -1    -5    -1     X     3     1    -3
Po        -5    -3     3    -3     X     5    -4
Pä        -5    -6     2    -1    -5     X    -5
Su         1    -3     3     3     4     5     X

"Margins" tarkoittaa äänimäärien erotuksia. Esimerkiksi 2. rivin 1. sarake tarkoittaa, että keksit saa yhden äänen enemmän hedelmiä vastaan kuin hedelmät keksejä vastaan.

Voittajakolmikko on selvä: keksit hakkaa jokaisen muun, suklaa jokaisen paitsi keksit, ja hedelmät jokaisen paitsi suklaan ja keksit. Sen sijaan hännillä on mahtava sykli, jossa oliivi voittaa patongin, patonki porkkanat, porkkanat pähkinät ja pähkinät oliivit. Tämän syklin purkaminen käy eri Condorcet-menetelmissä eri tavalla, mutta Schulze- ja ranked pairs -menetelmät (jotka lienevät suosituimmat Condorcet-menetelmät) tuottavat molemmat järjestykseksi patonki > porkkana > pähkinä > oliivi.


kommentoi (viimeksi muutettu 10.02.2014 14:27)