felicjan.jpg

    Wpadła mi w ręce książka Johna.D.Barrowa „Jak wygrać na loterii. Czyli z matematyką na co dzień” wydana przez Wydawnictwo Literackie, o której napisano na okładce że „Trudno sobie wyobrazić łatwiejszy, bardziej przyjazny i zabawny wstęp do matematyki…”. I faktycznie książka sprawiła mi sporo radości zarówno z powodu treści ( o czym za chwilę), jak i z powodu tłumaczenia o którym, z litości, więcej nic nie wspomnę.
Książka zawiera 100 2-3 stronicowych esejów o matematyce i życiu, takie „rozmaitości” czy „pot pouri” na rozmaite tematy. Dowiadujemy sie zatem że słupy wysokiego napięcia mają kształt jaki mają z powodu niebanalnych własności wielościanów wypukłych. Okazuje sie że 9 punktów na kartce narysowanych w wierzchołkach sieci kwadratowej, tak by zajmowały pozycje w kwadracie 3×3 można połączyć 4-rema liniami w bardzo sprytny sposób, którego większość z ludzi nie zgadnie za cholerę. Zostaniemy pouczeni ze relacja „jest lepszy niż” nie jest przechodnia i że może mieć to niebanalne konsekwencje dla demokracji na całym świecie, a także w jednym z rozdziałów poznamy w jaki sposób tak zaprojektować „referendum” by bez żadnego oszustwa i w całkowicie jawny sposób wygrał nasz kandydat – wszakże pod warunkiem że jest choć jeden od niego mniej lubiany. I tak dalej, i tak dalej. lekkie, łatwe i przyjemne. I zachęcające do myślenia.
No i znalazłem tam taki, miły memu sercu, problem: „był to dzień obrony mojej pracy doktorskiej. […] Jeden z profesorów znalazł w mojej pracy trzydzieści dwa błędy ortograficzne, drugi – dwadzieścia trzy[..] Pytanie brzmiało: „Ile niezauważonych przez żadnego z egzaminatorów błędów mogło tam jeszcze pozostać?”” Problem ten od dawna mnie trapi, bowiem kiedy sam przeglądam swoje teksty znajduję za każdym razem inną liczbę błędów. Co więcej, wygląda na to jakby błędy nigdy się nie kończyły… No ale czytajmy dalej: „Obaj profesorowie przez chwilę porównywali swoje wydruki i okazało się że znaleźli szesnaście takich samych błędów”. Dalej niech przemówi matematyka ( powtarzam tu rozumowanie autora książki, J.D.Barrowa).

    Załóżmy że w pracy było N błędów. Profesor A znalazł A błędów. Niech prawdopodobieństwo znajdywania błędów przez A wynosi p, wówczas:

A = pN

    Podobnie dla profesora B, znajdującego błędy z prawdopodobieństwem q, mamy:

B = qN

    Wspólnie znaleźli C identycznych błędów:

C = pqN

    ponieważ pracowali niezależnie ( a więc mnożymy prawdopodobieństwa). Z tych trzech równań, możemy wyliczyć, ze całkowita liczba błędów w pracy, N, jest równa:

N = \frac{AB}{C}
i nie zależy od prawdopodobieństw p i q.

    No i tu brew mi sie uniosła. Czyli jeśli będziemy mieli 2 szanownych luminarzy nauki, jeden z nich znajdzie 2 błędy, drugi też 2, zaś wspólny na ich listach będzie jeden wyraz, to całkowita liczba błędów będzie wynosiła 4? Hm. I to niezależnie jak będą starannie szukać? Byle oczywiście szukali ( p, q muszą być różne od zera).

    Jak już kilka razy pisałem jestem wierzącym ( ale słabo praktykującym ) entuzjasta Sage. Stąd postanowiłem rzecz rozwiązać jak na aspirującego hackera przystało, czyli za pomocą Programowania w Pythonie ( od razu uprzedzam, proszę się nie śmiać, ja litościwie spuściłem zasłonę milczenia na pracę tłumaczki tej książki, Wy możecie ścierpieć, że nie umiem programować).
Zacząłem zatem, tak: wygenerowałem losowy tekst składający sie z 10000 znaków 0 i 1, przy czym 0 występował w nim z prawdopodobieństwem 0.9 zaś 1 z prawdopodobieństwem 0.1 ( i inaczej niż się złośliwe spodziewacie, właśnie to 1 jest błędem, choć dla osoby jak ja przyznam mogłoby być odwrotnie). Operacja taka może zostać zrealizowana za pomocą poniższego kodu w Sage ( Python w notebooku w przeglądarce):

P = [0.9, 0.1]
  X = GeneralDiscreteDistribution(P)
  Text=[X.get_random_element() for _ in range(10000)]

    W wyniku dostajemy listę zer i jedynek pod zmienną Text, o długości 10000 znaków zawierająca losową liczbę jedynek. W dalszej części użyłem tylko jednej takiej listy ( generacja była jednorazowa) zawierającej 988 1-dynek czyli błędów, na losowych pozycjach. Następnie napisałem taką funkcję:

def EEstimation(TexT,NIter=100,p=0.5,q=0.5):
  RT=len(TexT)
  NE = sum(TexT);NE
  ERR=[]
  PA = [p,1-p]
  PB = [q,1-q]
  A = GeneralDiscreteDistribution(PA)
  B = GeneralDiscreteDistribution(PB)
  for _ in range(NIter):
      NA = []
      NB = []
      for i in range(RT):
          if TexT[i] == 1:
             if A.get_random_element() > 0:
                NA=NA+[i]
          if B.get_random_element() > 0:
                NB=NB+[i];
  NC=list(Set(NA).intersection(Set(NB)))
  if len(NC) <> 0:
      ERR=ERR+[(NE-(len(NA)*len(NB))/len(NC))^2]
  return(sqrt(sum(ERR)))

    Idea jest taka, że dla danego tekstu z błędami TexT dokonujemy NIter=100 krotnego przeglądnięcia tekstu i jeśli napotkamy na błąd ( TexT[i] = 1) wówczas profesor A losuje czy go znalazł z prawdopodobieństwem 1-p, zaś profesor B losuje z prawdopodobieństwem 1-q. Jeśli znalazł, w liście NA ( odpowiednio NB) zapisywany jest numer pozycji z błędem. Następnie wyliczamy jak liczna jest cześć wspólna tego co znaleźli i jeśli jej długość jest różna od zera, wyliczamy kwadrat różnicy między prawdziwą liczbą błędów ( NE) a jej estymacją ze wzoru wyprowadzonego wyżej i zapamiętujemy w liście ERR. na końcu funkcja oblicza pierwiastek kwadratowy z sumy takich kwadratów różnic, co pokazuje oczywiście jak dobrze swoją pracę wykonali profesorowie. Tego typu eksperyment, nawet dla ustalonego tekstu TexT za każdym razem daje inne wyniki, bo i inne są wyniki losowań dla panów A i B. Stąd konieczność powtarzania ich pracy – w tym wypadku 100 razy.

    Chcąc zyskać setki odsłon i tysiące czytelników postanowiłem wykonać także wykres, pokazujący jak wyniki pracy pary recenzentów, zależą od prawdopodobieństwa znalezienia błędu. Ponieważ sytuacja jest symetryczna, każdy z recenzentów pełnie identyczną rolę, załóżmy że profesor B ma określoną skuteczność, zaś skuteczność profesora A zmienia się co 0.1. Realizujemy to następującym kodem:

for i in range(111):
    PL=PL+[(float(i/110),float(EEstimation(Text,100,float(i/110),0.2)))]

    W tym wypadku założona skuteczność profesora B wynosiła 0.8. Oto wyniki dla skuteczności wynoszącej 0.7, 0.8, 0.5 i 0.1 Coś tu nie gra ( po kliknięciu otworzy się większa wersja obrazka).

JMol2d

    Oczywiście są to pewnego rodzaju przekroje przez ogólną „powierzchnię stanu” recenzentów, parametryzowaną liczbami p i q, gdzie n osi pionowej znajduje się pierwiastek z sumy kwadratów odchyleń. Oczywiście jeśli rację miałby J.D.Barrow, dostalibyśmy całkowicie płaską powierzchnię. Postanowiłem sobie taką powierzchnię narysować i w tym celu posłużyłem sie następująca iteracją ( a trwało to około godziny!):

PL = []
  for i in range(111):
      for j in range(111):
         PL=PL+[(float(i/110),float(j/110),float(EEstimation(Text,100,float(i/110),float(j/110))))]

    No i oto co wyszło ( walczyłem chwilkę z ideą że może uda mi się na wordpress umieścić cały aplet jmoll, który pozwala na interakcję z rysunkiem. niestety nic z tego. Niestety nie udało sie też uruchomić appletu przez Gdrive, pozostaje mi więc jedynie pokazać statyczne obrazki… Proszę kliknąć dla większej wersji obrazka ):

JMol

    Jak widać z niezależności od p i q – nici! Nie dosyć że zależność jest widoczna to jeszcze ma fajny regularny kształt. O czym to świadczy? Ano o tym, że kwadrat odchylenia, czyli błąd przewidywania prawdziwej liczby N, niebanalnie zależy od p i q. Widać wyraźnie że dla pewnych p i q, mamy maksimum. No i teraz sam nie wiem. Estymatory sa obciążone? Powinienem ten pierwiastek z kwadratu dzielić przez jakieś wielkości zależne od ilości znalezionych błędów?

    A może jest zupełnie inaczej – dla kiepskiej skuteczności profesorów poszukujących błędów w pracy, prawdopodobieństwo że znajdą te same błędy jest bardzo niskie. W takim wypadku, nawet dla 988 błędów w pracy, szanse że zbiór C zawiera dużą liczbę elementów jest niewielkie, co sprawia że odchylenie od prawdziwej liczby błędów rośnie. Czyli dla małych iloczynów pq przeszacowujemy ilość błędów?

Czyli nadal nie wiem ile tych błędów było…

„Jak wygrać na loterii? Czyli z matematyka na co dzień” John.D.Barrow,

Wydawnictwo literackie , 2011