2017-09-18

Hodnocení voleb Schulzovou metodou aneb kam na dovolenou


Plánujete skupinovou dovolenou v přírodě? Hledáte zajímavé místo pro sraz maturantů po letech a nebo připravujete firemní teambuilding s kolegy? Pro určení optimální lokality ke spokojenosti všech zúčastněných se nabízí provést hlasování. V tomto článku bych rád poukázal na to, jak zásadní vliv na výsledek může mít algoritmus hodnocení vítěze voleb. Výklad se pokusím demonstrovat na výběru lokality pro tuzemskou dovolenou. Pro zjednodušení mějme tři kandidáty:
Většina voličů má svoji vlastní představu o pořadí favoritů. Pokusme se tedy vyjádřit formálně přání sedmi voličů tak, že každý volič zapíše své preference na jeden řádek, přitom nejdříve uvede svého nejlepšího favorita a směrem doprava budou postupovat kandidáti s nižší preferencí. Pokud nějakého kandidáta volič vynechá, tak mu tím přiřadí poslední místo. Přání voličů by mohlo vypadat třeba takto:
1. Adršpach - Bílé Karpaty - Česká Kanada (A-B-C)
2. Adršpach - Česká Kanada - Bílé Karpaty (A-C-B)
3. Adršpach - Česká Kanada (A-C)
4. Bílé Karpaty - Česká Kanada (B-C)
5. Česká Kanada - Bílé Karpaty (C-B)
6. Bílé Karpaty - Česká Kanada (B-C)
7. Česká Kanada - Bílé Karpaty (C-B)

Pokud vyhodnotíme přání voličů tradiční metodou, vezmeme v úvahu pouze jednoho (nejvíce preferovaného) kandidáta každého voliče. Výsledek hlasování pak bude vypadat takto:
1. místo vyhrává kandidát A - Adršpach se 3 hlasy
2-3. místo obsadí kandidát B - Bílé Karpaty s 2 hlasy
2-3. místo obsadí kandidát C - Česká Kanada s 2 hlasy
Někteří voliči však mohou mít oprávněný pocit, že jejich přání nebylo dostatečně zohledněno. Zkusme se tedy poohlédnout po nějakém spravedlivějším hodnocení. Jedno z těch nejlepších se jmenuje Schulzova metoda, která posuzuje každou dvojici kandidátů tak, jako by se jednalo výhradně o jejich volbu. Při této metodě nemá význam provádět vícekolové hlasování, které proběhlo třeba při posledních prezidentských volbách ČR. Nechci vás zatěžovat postupem Schulzovy metody (detailní popis v angličtině najdete zde), pojďme se podívat rovnou na výsledek:
1. místo vyhrává kandidát C - Česká Kanada
2. místo obsadí kandidát B - Bílé Karpaty
3. místo obsadí kandidát A - Adršpach
Není to zajímavé? Vítěz první metody se propadl na konec hodnocení metody druhé. Většina voličů si nepřála lokalitu A, ale zároveň ta stejná většina se neshodla mezi lokalitou B a C. Konečného vítěze určila nakonec skupina, která svoji hlavní lokalitu sice neprosadila, ale rozhodly její preference na druhém pořadí. Druhý volební výsledek je přesnějším odrazem přání voličů. Hodnocení lze ověřit například na této stránce:

Screenshot kalkulačky

Začíná být zřejmé, že způsob hodnocení hlasování může mít zásadní vliv na výsledky voleb nejen u společného výletu, ale i v případě politických kandidátů. Je dobré ještě připomenout, že ani Schulzova metoda nemůže zabránit taktizování voličů.

Technické informace o projektu

Webový projekt z přiloženého screenshotu umožňuje testování vítěze hlasování Schulzovou metodou, pro reálné využití bude třeba posbírat preference voličů. Kód je napsaný v jazyce Java 8 s využitím GWT, vyhodnocení vítěze probíhá na straně klienta (konkrétně internetového prohlížeče), na server se odesílají jen statistické údaje o počtu hlasů pro logování. Algoritmy důležité pro určení vítěze jsou pokryté jUnit testy. Projekt je volně šiřitelný open-source pod licencí Apache License 2 a je možné ho stáhnout z GitHub. Přikládám doporučený postup pro spuštění na lokálním počítači:
  1. nainstalujte si JDK verze 8, Maven a Git
  2. z konzole založte nový adresář projektu a v něm proveďte posloupnost příkazů:
  3. git clone https://github.com/pponec/schulze-method .
  4. mvn install -DskipTests
  5. mvn gwt:run # alternativně můžete provést deploy WAR souboru na vhodný webový kontejner, například Tomcat
Pro zajímavost dodávám, že aplikace byla vytvořena v prostředí integrovaného editoru NetBeans na linuxovém operačním systému Xubuntu. Článek vyšel na blogu ORM frameworku Ujorm, webová aplikace pro hodnocení vítěze však nemá se zmíněným frameworkem téměř nic společného, snad kromě autora :).

Užitečné odkazy





Žádné komentáře: