Objavljeno: 31.5.2022 | Avtor: Matej Huš | Monitor Junij 2022

Algoritem za demokracijo

Malokatere volitve v slovenski zgodovini so požele toliko zanimanja prebivalstva in medijev kakor letošnje, zaradi česar so ljudje množično spremljali tudi volilno aritmetiko. Deleži glasov, ki so jih prejele posamezne stranke, se namreč po zapletenih algoritmih preračunajo najprej v število mandatov, nato pa še v konkretna imena. Ker so zaradi računalniškega hrošča v neuradnih izidih šest mandatov podelili napačnim kandidatov (iz pravih strank), bomo podrobno analizirali, kako poteka postopek, kaj bi skoraj šlo narobe in ali bi zmogli brez računalnikov.

Pravična razdelitev, najsi gre za mandat ali kose pice, je v splošnem težak problem. Ko gre za delitev mandatov na volitvah, je mogoče matematično pokazati, da ta ne more biti nikoli povsem pravična. Ker je število mandatov omejeno na sorazmerno nizka števila, število glasov pa je precej višje, bodo vedno nastopali ostanki. Povedano drugače, delež glasov na volitvah ne more natančno ustrezati porazdelitvi mandatov.

Matematično je moč dokazati, da delež glasov na volitvah ne more natančno ustrezati porazdelitvi mandatov.

To ni nič novega, predvsem pa nič tragičnega. Kako bomo voljo ljudstva na volitvah prevedli v mandate odločevalcev, je politično vprašanje, ki ga demokratično rešujemo. Ponekod je zaželeno, da imajo največje skupine delež mandatov, ki je še večji od njihovega izida na volitvah, drugod želimo ravno obratno. Morda želimo večinski sistem, kjer ima relativni zmagovalec absolutno moč, morda pa želimo čim bolj proporcionalno razporeditev mandatov. Kako bomo uredili regionalno zastopanost kandidatov, kdo in kako bo izbiral, kateri kandidati s strankarske liste bodo dobili mandat?

Ker je na ta vprašanja moč poiskati več legitimnih odgovorov, je tudi volilnih sistemov in metod za delitev mandatov veliko.

Slovenski sistem

Slovenski sistem volitev v parlament je kombinacija dveh uveljavljenih načinov, ki ju uporabljajo številne demokratične države. Volilni sistem v Sloveniji predpisuje Zakon o volitvah v državni zbor, kjer so za delitev mandatov pomembni 90.–93. člen. V njih so nekateri pojmi definirani sicer okorno, a nobenega dvoma ni, kaj je zakonodajalec hotel in kako se volilni mandati dodeljujejo. Matematika je jasna, praksa pa je dolga že 30 let.

Razdeliti moramo 88 mandatov, ki jih prejmejo politične stranke ali liste, sorazmerno s številom glasov, ki so jih prejele na ravni države. Še dva poslanca se izvolita iz skupnosti manjšin, kjer uporabljajo enostavni večinski sistem, saj zmaga kandidat z največ glasovi, zato ju na tem mestu ne bomo obravnavali. Naloga je preprosta in na prvi pogled se zdi tudi enostavna: prejete glasove moramo preračunati v 88 mandatov tako, da razdelitev med liste čim bolj izraža deleže glasov.

Najprej izločimo neveljavne glasove, ki ne vplivajo na izide, razen na podatek o volilni udeležbi. Nato iz nadaljnjih izračunov odstranimo vse liste, ki so prejele manj kot štiri odstotke glasov na ravni države, saj niso presegle volilnega praga in mandatov ne dobijo. Zanje oddani glasovi pa bodo še vedno vplivali na nadaljnje izračune, zato jih obdržimo. Kako zdaj pretvoriti veljavne glasove za stranke nad pragom v mandate?

V Sloveniji se za določitev skupnega števila mandatov uporablja d'Hondtov sistem, ki se imenuje po belgijskem odvetniku in matematiku Victorju d'Hondtu. Ponekod ga bomo srečali tudi pod imenom Jeffersonova metoda, ker ga je pri predlagal Thomas Jefferson že leta 1792.

Naivno bi pričakovali, da preprosto odstotek glasov, ki jih je pridobila posamezna lista, pomnožimo s številom vseh mandatov in rezultat zaokrožimo. Tak postopek, dasi na prvi pogled smiseln, ima težave pri zaokroževanju. Če bi liste A, B, C, D in E dobile (glasovi v odstotkih) 54,6, 24,2, 10,4, 8,1 in 2,7, kako bi jim razdelili 43 sedežev? To bi dalo 23,478, 10,406, 4,472, 3,483 in 1,161 mandata oziroma 23, 10, 4, 3 in 1, skupno pa 41 sedežev. Dva preostala bi logično podelili listama z največjima ostankom, torej A (0,478) in D (0,483), tako da bi bila končna sestava 24, 10, 4, 4 in 1. Zdi se smiselno. A kaj, če bi nenadoma želeli podeliti 44 mandatov? Preračun ponovimo in dobimo 24,024, 10,648, 4,576, 3,564 in 1,188 oziroma 24, 10, 4, 3 in 1, skupno pa 42. Kdo dobi preostala dva? Največja ostanka sta B (0,648) in C (0,576). Rezultat je zdaj 24, 11, 5, 3 in 1. Vidimo, da povečanje parlamenta za en sedež dvema listama (B, C) doda en sedež, listi D pa ga celo odvzame. To ne pomeni, da je opisana metoda delitve mandatov po največjih ostankih slaba, kaže pa, kaj pomeni trditev, da popolnoma poštenega sistema ni.

Število mandatov

V Sloveniji se za določitev skupnega števila mandatov uporablja d'Hondtov sistem, ki se imenuje po belgijskem odvetniku in matematiku Victorju d'Hondtu. Ponekod ga bomo srečali tudi pod imenom Jeffersonova metoda, ker ga je pri predlagal Thomas Jefferson že leta 1792, d'Hondt pa ga je neodvisno izumil leta 1878. Logika je sorazmerno preprosta. Vsaka lista je dobila neko število glasov, mi pa želimo določiti koliko glasov ustreza enemu osvojenemu mandatu, tako da bo skupno podeljenih 88 mandatov.

D‘Hondtovi količniki list nad pragom določajo število mandatov.

Namesto da bi s poskušanjem iskali to količino, lahko problem rešimo z zaporedjem upadajočih količnikov. Število glasov, ki jih je osvojila posamezna lista, delimo z vsemi števili od 1 do 88, s čimer dobimo 88 količnikov. To storimo za vse liste, ki so presegle prag. Če bi imeli zgolj tri liste A, B in C, ki so prejele 60.000, 40.000 in 12.000 glasov, bi bili ti količniki za A: 60.000, 30.000, 20.000, 15.000, 12.000, 10.000 …, za B: 40.000, 20.000, 13.333,33, 10.000, 8.000 … in za C: 12.000, 6.000, 4.000, … Če delimo šest mandatov, vzamemo pet največjih količnikov, ki so 60.000 (A1), 40.000 (B1), 30.000 (A2), 20.000 (A3), 20.000 (B2) in 15.000 (A4). Tak odbor bi imel štiri člane iz A (66,7 odstotka) in dva člana iz B (33,3 odstotka). Vidimo, da sistem nekoliko pomaga večjim strankam, ki so bolj zastopane.

Kako se je to razdelili v Sloveniji? Stranke Gibanje Svoboda, SDS, NSi, SD in Levica so prejele 410.769, 279.897, 81.794, 79.709 in 53.234 glasov. Preračun d'Hondtovih količnikov in ureditev po velikosti pokaže, da jim pripade 41, 27, 8, 7 in 5 mandatov. Najmanjši količnik, ki še zadostuje za osvojitev mandata, torej 88. količnik po vrsti izmed vseh list skupaj, je z 10.018,756 doseglo Gibanje Svoboda (410.769 : 41). To je bistvo d'Hondtove metode, saj je prav ta količnik število glasov, ki jih je morala stranka osvojiti za en mandat. Če število glasov za posamezno stranko delimo s tem količnikom, je celi del rezultata (torej zaokroženo navzdol na celo število, čemur ustreza funkcija floor) ravno število mandatov. Da pa smo mandate podelili po vrstnem redu količnikov in ne samo s preprostim deljenjem, nudi pomembno prednost: rangirali smo jih. Vrstni red mandatov bo zelo pomemben v nadaljevanju, ko se bodo delili znotraj list.

Spet lahko preverimo, da d'Hondtov sistem preferira večje liste. Če izračunamo, koliko glasov je dejansko potrebovala posamezna stranka na en mandat, so rezultati za Gibanje Svoboda, SDS, NSi, SD in Levico 10018,756, 10366,556, 10224,250, 11387,000 in 10646,800. Manjše stranke za en sedež potrebujejo malce več glasov.

Z d'Hondtovim sistemom smo izračunali skupno število mandatov za liste na ravni države in dobili vrstni red, po katerem se bodo delili.

Prva delitev

Na slovenskih volitvah v državni zbor zasledujemo predvsem dvoje: proporcionalnost mandatov glede na izid in regionalno zastopanost mandatov. Slovenija je zato razdeljena v osem volilnih enot, ki izvolijo vsaka točno 11 poslancev. V vsaki izmed volilnih enot (VE) pa je še 11 okrajev, v katerih ima vsaka lista lahko svojega kandidata. Skupno torej lista potrebuje 88 kandidatov, in sicer po enega za vsak okraj – lahko jih je tudi manj, ker lahko en kandidat kandidira v dveh okrajih skupaj, a to za razumevanje sistema ni pomembno. Število vseh osvojenih mandatov na ravni države že poznamo, zdaj pa jih moramo še regionalno ustrezno razdeliti med listami.

Hrošča, ki je v parlament skoraj poslal šest napačnih poslancev, so ulovili pravočasno. Izide so pred uradno objavo preverili s tremi programi in z neodvisno strokovno skupino, ki so napako našli.

Najprej bomo poskusili čim več mandatov razdeliti v VE. V ta namen se uporablja metoda Droopovega količnika, ki jo je leta 1868 razvil angleški matematik Henry Richmond Droop. Določiti želimo, koliko glasov je morala posamezna lista prejeti v posamezni volilni enoti, da je dobila en mandat. Najmanjše celo število, pri katerem bomo vedno razdelili manj ali največ toliko mandatov, kolikor je sedežev, se imenuje Droopov količnik in se izračuna tako, da vse veljavne glasove (tudi za liste pod pragom) delimo z n + 1 (če imamo na voljo n mest), zaokrožimo navzdol in prištejemo 1. V VE01 je bilo veljavnih glasov 153.154, zato je Droopov količnik enak [153.154 : 12] + 1 oziroma 12.763. Na enak način lahko izračunamo Droopove količnike še za vse druge enote.

Potem pogledamo, koliko je celoštevilski del pri deljenju števila glasov za posamezno listo v volilni enoti z Droopovim količnikom. V VE01 so stranke Gibanje Svoboda, SDS, NSi, SD in Levica prejele 48.970, 34.599, 12.980, 8.137 in 6.792 glasov. Vidimo, da so prejele 3, 2, 1, 0 in 0 mandatov (deljenje dá 3,836, 2,711, 1,017, 0,638 in 0,532), torej smo razdelili šest mandatov. Preostanek se bo delil na ravni države. Na tak način po vseh volilnih enotah razdelimo glasove, ki jih pač lahko. To je odvisno od rezultatov in letos je bilo na tak način razdeljenih 49 mandatov (29 za Gibanje Svoboda, 19 za SDS in 1 za NSi). Preostanek do skupnega števila na ravni države, kot smo ga že izračunali na začetku po d'Hondtovi metodi, pa se bo delil v drugi delitvi.

Druga delitev

Preostalo nam je torej še 39 mandatov (88 – 49), ki jih moramo razdeliti po volilnih enotah. To moramo narediti tako, da ga bo posamezna lista prejela v volilni enoti, kjer ga 'najbolj zasluži', da bo v vsaki volilni enoti razdeljenih točno 11 mandatov in da bo vsaka lista skupno prejela toliko mandatov, kot ji jih pripada po d'Hondtovi metodi. Zadnji pogoj v resnici ni zapleten, ker imamo vrstni red deljenja mandatov po listah že sestavljen (d'Hondt), prva dva pa rešimo s prioritetnimi seznami VE po listah. Pojasnimo s primerom.

Za Levico, ki ni dobila nobenega mandata z delitvijo znotraj VE, so izračunani Droopovi količniki po volilnih enotah VE01: 0,532163284, VE02: 0,572606848, VE03: 0,82687244, VE04: 0,660916824, VE05: 0,38175002, VE06: 0,421932939, VE07: 0,47713258, VE08: 0,367548501. Pri strankah, ki so dobile kakšen mandat že v prvi delitvi, pa bi bili posamezni Droopovi količniki več od 1 in tedaj bi upoštevali le neceli del. Ti relativni Droopovi ostanki v resnici predstavljajo glasove, ki so jih liste dobile v volilnih enotah, a se niso pretopili v mandate že neposredno v prvi delitvi mandatov. Čim višji je relativni Droopov ostanek liste v neki VE, bolj lista zasluži, da dobi mandat v tej volilni enoti, ker ji je do mandata v prvi delitvi zmanjkajo najmanj. Za Levico je torej prioriteta VE04, VE05, VE03, VE02, VE06, VE08, VE07 in VE01, ostale liste pa imajo vsaka svojo.

Prof. dr. Andrej Bauer je ocenil, da bi nekaj deset ljudi za ročno preveritev slovenskih volitev potrebovalo nekaj tednov.

Zdaj imamo vse, kar potrebujemo, za dokončno razdelitev mandatov. Vrnemo se k rangiranemu seznamu, ki smo ga sestavili na začetku po d'Hondtovi metodi. Prvih 29 mandatov za Gibanje Svoboda, 19 mandatov za SDS in 1 mandat za NSi je že podeljenih. Preostale pa delimo tako, da najprej pri vsaki listi vzamemo volilno enoto, ki ima največji Droopov ostanek (je na vrhu prioritetnega seznama), in za vsak naslednji mandat iste liste vzamemo naslednjo VE. Ta seznam Droopovih ostankov, torej rangiranje volilnih enot po prioriteti, je za vsako listo drugačen.

Prvi tak mandat je že 10. na seznamu, ki kot prvi pripada SD. Ta ni dobila nobenega poslanca neposredno v VE, zato ga razporedimo v volilno enoto 5, kjer ima SD največji relativni Droopov ostanek (0,9816543). Vidimo, da je skoraj 1, torej je tam že skoraj dobila poslanca neposredno v prvi delitvi, zato je logično, da je ta volilna enota v drugi delitvi na vrsti prva.

Tako se pomikamo navzdol po d'Hondtovem seznamu in delimo mandate. Sproti beležimo tudi, kako se polnijo volilne enote. To je pomembno proti koncu, ko imajo posamezne volilne enote že 11 izvoljenih poslancev (iz vseh strank skupaj). Če bi bila tedaj pri delitvi naslednjega mandata za neko listo (po prioriteti volilnih enot za tisto listo) na vrsti že polna volilna enota, jo preskočimo in dodelimo mandat iz prve proste v skladu s prioriteto. To se je zgodilo pri delitvi 84. mandata, ki je pripadel Gibanju Svoboda in bi ji moral pripasti v VE02, a ker je imela ta že izvoljenih 11 poslancev, jo preskočimo in Gibanju Svoboda dodelimo mandat v VE, ki je naslednja po prioriteti, torej VE05.

Na tak način smo razdelili 88 poslancev med vse stranke, tako da skupna razdelitev ustreza d'Hondtovemu sistemu, da je iz vsake volilne enote izvoljenih 11 poslancev in da boljši rezultat stranke v posamezni volilni enoti pomeni, da bo v njej dobila več (ali pa vsaj prej) mandatov. Preostane še zadnje vprašanje: kako izberemo poslance neke liste znotraj VE, saj ima vsaka 11 okrajev in prav toliko kandidatov vsake stranke? Odgovor je preprost. To so tisti, ki so dobili relativno največji delež glasov v svojem okraju (ali dveh) v primerjavi s kolegi z iste liste v drugih okrajih. Levica je v volilni enoti 02 dobila enega poslanca. Izmed 11 kandidatov, ki so kandidirali v 11 okrajih v tej volilni enoti, mandat pripade kandidatu v okraju Koper 1, ki je prejel 861 glasov, kar ustreza 7,28 odstotka vseh glasov, čeprav je kandidat v okraju Sežana prejel 891 glasov, a je bilo to le 5,93 odstotka.

Kaj je šlo narobe?

Algoritem, dasiravno kompleksen, ker zasleduje več ciljev, je sorazmerno robusten in ne dopušča več možnosti za interpretacijo. A prvih nekaj dni po volitvah je bilo v neuradnih izidih šest napačnih imen, šele pred objavo uradnih izidov pa so odkrili hrošča, ki je bil kriv za to. Izide so preverjali s tremi programi in s strokovno skupino, kar je pripomoglo k odkritju napake. A zanimivo je pogledati, v kateri tehnični podrobnosti je tičala. Kaj je šlo torej narobe?

V sporočilu za javnost je Državna volilna komisija zapisala: »Kot se je izkazalo ob dodatnem preverjanju izidov volitev s strani neodvisnih strokovnjakov, obstoječa programska oprema vsebuje napako v d'Hondtovem sistemu dodeljevanja mandatov. Zato je prišlo do nepravilnega izračuna na podlagi 93. člena zakona v primeru, ko je ena od list po d’Hondtovem sistemu prejela 8 ali več mandatov.« Dodatno je pojasnila še, da je napaka »povzročila, da se je pri dodeljevanju 81. mandata, ko je lista Gibanje Svoboda dosegla osmi dodatni mandat, vrstni red ponovil pri vseh listah, namesto da bi se samo pri tej listi. Preostalih 7 mandatov je bilo tako dodeljenih pravim listam, vendar kandidatom iz napačnih volilnih enot. Premešan je bil vrstni red volilnih enot, po katerih se dodeljuje mandate.« Razložimo, kaj se je zgodilo.

Ko se delijo mandati v drugi delitvi, se pri vsaki listi pomikamo navzdol po seznamu volilnih enot glede na prioriteto, kot sledi iz Droopovih ostankov za to listo. Letos pa se je zgodilo, da je stranka Gibanje Svoboda v drugi delitvi prejela 12 mandatov. Ker je volilnih enot osem, vsaka s svojim Droopovim ostankom, to seveda pomeni, da se bomo po osmih podeljenih mandatih Gibanju Svoboda v drugi delitvi morali vrniti na začetek seznama Droopovih ostankov za Gibanje Svoboda.

Programerji morajo uporabljati dobre prakse, kot je izogibanje uporabi zapisa s plavajočo vejico (float), kjer je zaokroževanje kritično, in raje uporabljati ulomke.

Eden izmed programov za izračun pa je vseboval hrošča, ki se je tedaj na začetek seznamov vrnil za vse liste. To se je zgodilo pri 81. mandatu, ki je 9. dodatni mandat (iz druge delitve) za Gibanje Svoboda, zato se je spet podelil iz VE01, kjer je imela ta lista največji Droopov ostanek. Naslednji, 82. mandat je dobila SDS, in sicer je bil to zanjo 7. dodatni mandat, ki zato pride iz VE05 (sedma na seznamu Droopovih ostankov za SDS). V napačnem izračunu pa je program ta mandat SDS podelil iz VE06, ki je na seznamu Droopovih ostankov za SDS na prvem mestu. Program je namreč takoj, ko je ena lista dobila osem mandatov, tudi za ostale liste začel mandate deliti ponovno z začetka seznama Droopovih ostankov. Napaka je propagirala dalje.

Ker pri zapolnitvi volilne enote nadaljnji mandati iz nje preskočijo, je napačni rezultat še vedno vseboval 11 mandatov na volilno enoto in tudi razdelitev po strankah je bila pravilna (ker jo je izračunala d'Hondtova metoda), so pa strankam pripadle napačne volilne enote. Ali v bolj programskem jeziku, kot je parafraziral prof. dr. Andrej Bauer z ljubljanske Fakultete za matematiko in fiziko, ki je kot neodvisni strokovnjak sodeloval pri preverjanju izidov: »Predstavljajte si, da je bilo v kodi nekaj takega kot "UPDATE enota_counter = 0" namesto "UPDATE enota_counter = 0 WHERE lista_id = ...« Ponastavili so se števci vseh list, ne le tiste, ki je presegla 8. dodatni glas.

Zaupanje v računalnike

Hrošča, ki je v parlament skoraj poslal šest napačnih poslancev, so ulovili pravočasno. Izide so pred uradno objavo preverili s tremi programi in z neodvisno strokovno skupino, ki so napako našli. To odpira vprašanje, ki v resnici ni novo, temveč so se z njim soočali že matematiki, ko so se pojavili prvi dokazi matematičnih izrekov, kjer so sodelovali računalniki. Če človek s svinčnikom in papirjem ne preveri rezultatov, ali jim lahko zaupamo? V zadnjem času se je v matematični stroki izoblikoval konsenz, da v nekaterih pogojih tak dokaz dovolimo.

Prvi test je seveda pregled izvorne kode, ki jo morajo različni strokovnjaki razumeti enako in se strinjati, da počne, kar od nje želimo. Ko rezultat preverjamo s tremi programi, je nujno, da so jih pisali različni ljudje, in če je mogoče, prevajali na različnih platformah (morda ima tudi prevajalnik kakšnega hrošča?). Če dobimo enak rezultat, je to že zelo močan indic, da hroščev – vsaj očitnih – ni. Pa bi lahko izide volitev preverili ročno? V teoriji seveda za to ni nobenih ovir, a postopek bi trajal, ljudje pa tudi niso imuni na napake, zato bi moralo to neodvisno storiti več ljudi. Tipkanje številk v kalkulator in prepisovanje vrednosti sta opravili, pri katerih so ljudje izrazito površni.

Prof. dr. Andrej Bauer je ocenil, da bi nekaj deset ljudi za ročno preveritev slovenskih volitev potrebovalo nekaj tednov. Od kod je dobil tako visoko oceno? Predvsem je odvisno od tega, kaj si predstavljamo kot ročno preveritev. Čisto od začetka to pomeni, da se seštejejo dosežki vsake stranke po vseh voliščih, kar predstavlja okoli 97.000 različnih števil. Da bi jih s kalkulatorjem samo sešteli, bi potrebovali okoli 200.000 sekund, kar je več kot dva polna dneva. Izračunati bi morali vsote po strankah, volilnih enotah, d'Hondtove količnike, Droopove ostanke itn. Vse to traja. Drugače je, če imamo te podatke že agregirane in gre samo za izvedbo d'Hondtovega in Droopovega algoritma. Tedaj je to mogoče narediti kar v Excelu ali v nekaj urah ročno.

Najzanesljiveje je tovrstne probleme reševati z računalniki, ki v nasprotju z ljudmi ne delajo napak pri računskih operacijah. Napakam v algoritmih pa se izognemo s sledljivostjo. Ne le da mora enako izračunati več različnih programov, zaželen je tudi sprotni izpis posameznih korakov. Črnih skrinjic (black box) ne maramo. Z izpisom sprotnih izračunov pa lahko njihovo pravilnost preverjamo ročno, kar je bistveno lažji problem od ročnega izračunavanja. Seveda pa morajo programerji uporabljati dobre prakse, kot je izogibanje uporabi zapisa s plavajočo vejico (float), kjer je zaokroževanje kritično, in raje uporabljati ulomke ipd.

Bi šlo drugače?

Slovenski volilni sistem uporablja metode, ki jih v takšni ali drugačni obliki uporabljajo tudi v drugih državah in niso nič posebnega. Če bi ga želeli algoritmično poenostaviti, bi to seveda lahko storili, a to ni več strokovno vprašanje, temveč politično. Spremembe bi vplivale na relativno prednost zmagovalke, regionalno zastopanost, vpliv volivcev na izvolitev točno določenega kandidata itd. O tem pa računalnikarji ne moremo soditi, temveč lahko le pojasnimo, kaj bi posamezna sprememba povzročila. O tem se moramo odločiti kot demokratična družba.

Podrobno branje

Prof. dr. Andrej Bauer je pripravil matematično rigorozen opis slovenskega volilnega sistema in vse vmesne rezultate izračunov za letošnje volitve na naslovu http://www.andrej.com/sl/volitve-2022/

tabela1 [PDF]
tabela2 [PDF]
tabela3 [PDF]
tabela4 [PDF]

Naroči se na redna tedenska ali mesečna obvestila o novih prispevkih na naši spletni strani!

Komentirajo lahko le prijavljeni uporabniki

 
  • Polja označena z * je potrebno obvezno izpolniti
  • Pošlji