Reklama
Czy chcesz zostać mecenasem serwisu Monitor SLPS?
Przejdź tutaj aby poznać ofertę.
Reklama

You had one job

23 września 2024


Wśród memicznych obrazków krążących po internecie poczesne miejsce zajmują fotki z serii „you had one job” czyli „miałeś tę jedną rzecz do zrobienia”. Na fotkach widzimy spektakularne przykłady ludzkiej niekompetencji, np. schody, którymi wykonawca nie trafił w drzwi wejściowe, namalowany na jezdni przed skrzyżowaniem napis SOTP albo betonowy balkon przebity przez latarnię uliczną.

Te właśnie obrazki nasunęły mi się na myśl, gdy dostrzegłem jeden z ciekawszych błędów Systemu Losowego Przydziału Spraw. Panowie i panie, mieliście jedną rzecz do zrobienia. Wyznaczyć pulę nazwisk do losowania i dokonać losowania. Tylko tyle i aż tyle. A jak wyszło, zobaczymy poniżej.


Zdradliwa matematyka

Czasem w losowaniu sprawy bierze udział tylko dwójka sędziów. Dzieje się tak w małych wydziałach, ale może zdarzyć się gdziekolwiek, jeśli spiętrzeniu ulegną nieobecności lub wyłączenia ze sprawy.

Gdy w puli są tylko dwa nazwiska, uruchamiany jest specjalny mechanizm mający na celu balansowanie wyników losowań. Sędzia o mniejszym wskaźniku obciążenia pojawia się w puli dwukrotnie. Losowość zostaje zachowana, ale rozkład prawdopodobieństwa faworyzuje sędziego któremu należy przydzielić więcej spraw.

Jak wiemy z artykułu pt. „Koszt sprawy”, sędziowie pełniący niektóre funkcje mogą otrzymywać nawet 10x mniej spraw, niż „zwykły” sędzia. Odpowiada za to tzw. wskaźnik udziału w losowaniach. I tu pojawia się problem, bo w serii losowań dwuosobowych (z podwojonym nazwiskiem) największym możliwym do wyprodukowania niezbalansowaniem jest 33,3% do 66,6%. A potrzeba 9,1% do 90,9%.

Algorytm losowania zawiera więc dodatkowy przypadek szczególny - jeśli iloraz wskaźników udziału (nie wskaźnika obciążenia!) przekracza 2, zwielokrotnianiu ulega sędzia z większym wskaźnikiem udziału. Zależnie od wartości ilorazu, zwielokrotnienie może być nawet ośmiokrotne - z kontekstu wynika, że wraz z pierwotnym wpisem będzie to dziewięć wystąpień tego samego nazwiska na raporcie z losowania. Oto przykłady takich raportów:

tabele z losowaniami

Póki co wszystko wygląda dobrze. Losowań o takiej charakterystyce naliczyłem ponad 100 tysięcy, czyli ani dużo, ani mało. Gdy jednak przeglądałem zwielokrotnione raporty z roku 2022, coś rzuciło mi się w oczy.

tabele z losowaniami

Losowania miały być dokonywane spośród wszystkich dziesięciu pozycji, jednak operacja modulo na liczbie losowej obejmowała jedynie… pierwsze cztery pozycje. Zacząłem grzebać głębiej. Co się okazało?

WSZYSTKIE ZWIELOKROTNIONE LOSOWANIA Z ROKU 2022 UWZGLĘDNIAŁY TYLKO PIERWSZE 4 LOSOWANE POZYCJE!

Co mówi dokumentacja?

Zajrzyjmy po raz setny do dokumentu „Algorytm na podstawie dokumentacji analitycznej v.1.16.1”. Oszczędzę czytelnikom zrzutów ekranu, przejdziemy po krokach 15-18 na przykładzie naszego losowania z ilustracji powyżej. W dokumencie są to strony 18 i 19.

  • krok 15 - tworzymy listę sędziów biorących udział w losowaniu, mamy w niej dwóch sędziów
  • krok 16 - ustalamy rozmiar puli na 2
  • krok R17a - rozmiar puli na pewno rośnie do 10, z opisu nie wynika, czy lista sędziów ma być wzbogacona o ośmiu zwielokrotnionych, wirtualnych kandydatów
  • krok R17c - algorytm kroku R17c odwołuje się rekursywnie do algorytmu R17c, wszystkim czytelnikom przepełnia się stos
  • krok R18 - z listy dwóch lub dziesięciu sędziów bierzemy pierwszych dziesięciu sędziów, po czym dodajemy zwielokrotnionych wirtualnych kandydatów

Co można powiedzieć o takiej dokumentacji? Na pewno nie jest czytelna. Sprzeczność opisu z diagramem przepływu funkcji R17a wskazywałem w artykule „Jak SLPS wylicza wskaźniki obciążenia”. Wydaje się jednak, że - mimo doboru niejasnego słownictwa - sam sposób wyznaczania rozmiaru puli jest w porządku. Zepsuto implementację.

You had one job…

Gdy ktoś przyjrzy się losowaniom z ośmiokrotnym zwielokrotnieniem, to odkryje, że tabela z dziesięcioma wierszami ma jeden z zaledwie dwóch wariantów numeracji:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10

albo

2, 3, 4, 5, 6, 7, 8, 9, 10, 1

Czemu tak? We artykule „O tym, dlaczego System Losowego Przydziału Spraw jest nieprzejrzysty i nierozliczalny” pokazałem, że wylosowana pozycja nie wskazuje wiersza w tabelce, lecz wartość z kolumny „Pozycja” - która zawczasu została już zrandomizowana w sposób pozostający zagadką. Okazuje się jednak - przy czym jest to obserwacja, niepodparta żadną teorią - że zwielokrotnione nazwisko zawsze tworzy spójny blok numeracji, więc nazwisko pojedyncze może dostać numer 1 albo 10.

Spójrzmy na ilustrację poniżej. Wygrać mogą tylko numery 1-4. Nazwiska zduplikowane zawsze są na początku tabeli, nazwisko pojedyncze - na końcu. Wszystkie możliwe warianty numeracji wraz z zaznaczonymi ramką miejscami potencjalnie wygrywającymi widzimy w tabeli.

tabele z losowaniami

Widzimy, że nazwisko pojedyncze to jedna z ośmiu możliwości wylosowania zwycięzcy, czyli zostanie trafione w 12,5% przypadków. Częściej, niż powinno - oczekiwalibyśmy rozkładu równomiernego dającego 10% szansy.

Mówiąc prościej - jeśli numeracja w tabeli idzie od 1 do 10, to zawsze wygrywa zwielokrotniony kandydat. Jeśli numery w tabelce startują od 2 i kończą się na 1, to zwielokrotniony kandydat wygrywa w 3/4 przypadków.

Jako ćwiczenie dla zainteresowanego czytelnika zostawiamy dowód, że prawidłowe prawdopodobieństwa otrzymamy dla „zwielokrotnionych” losowań dwuosobowych mających 4 i 8 wierszy w tabeli, zaś przy wariantach mających 5, 6, 7, 9 lub 10 wierszy wynik będzie nieprawidłowy.

Podsumowanie

W punktach:

  • w przypadku losowań dwuosobowych ze specjalnym zwielokrotnieniem wynikającym z dużej różnicy wskaźnika udziału w losowaniu, do puli losującej powinny trafić wszystkie zdublowane pozycje (np. w powyższych przykładach - wszystkie 10)
  • w rzeczywistości losowano pierwsze cztery pozycje
  • z powodu błędu programistycznego zamiast rozkładu prawdopodobieństwa dopasowanego do „krotności” zwielokrotnienia, sędzia występujący w tabeli w jednym wierszu ma zawsze 12,5% szans na wygraną
  • użycie sprzętowego generatora liczb losowych i obliczanie wartości modulo stanowi jedynie teatrzyk, który nie ma tu żadnego znaczenia

Błąd usunięto w wersji SLPS wdrożonej w marcu 2023. Dodajmy więc tylko w charakterze wisienki na torcie, że kombinacja dwóch sędziów mających wskaźniki udziału wynoszące 10% i 100% powinna skutkować przydziałem spraw w stosunku 9,1% do 90,9%. Naprawiony SLPS nadal tego nie umie.

Niezmiennie zaś - po dziś dzień, we wszystkich losowaniach - użycie w SLPS sprzętowego generatora liczb losowych i obliczanie wartości modulo stanowi jedynie teatrzyk, który nie ma żadnego znaczenia.


Masz pytania lub uwagi do niniejszego tekstu? Napisz!

Tomasz Zieliński



Nowszy artykuł: Ministerstwo odmawia udostępnienia nowych raportów, rezygnuję z pracy nad Monitorem SLPS »
Starszy artykuł: « Jak SLPS wylicza wskaźniki obciążenia?