Rozwiązanie zagadki bakteryjnej

Postawiona niedawno zagadka pyta o to, jakie są szanse na nieskończony rozwój kolonii bakterii, jeżeli zaczynamy od jednej bakterii, a każda bakteria ma w każdym cyklu 80% szans na podwojenie oraz 20% szans na śmierć.

Podejść do rozwiązania można na co najmniej dwa sposoby: symulacyjnie lub analitycznie. Zaczniemy od tego drugiego.

Oznaczmy sobie prawdopodobieństwo śmierci kolonii przez x. Tym samym szanse na jej przetrwanie wynoszą (1-x).

Na start bakteria jest tylko jedna. Co się teraz może wydarzyć? Może ona paść albo się rozmnożyć do dwóch sztuk. Rozmnożenie owo występuje średnio osiem razy na dziesięć.

A jak już mamy dwie bakterie, to szansa, że obydwie padną w kolejnym cyklu wynosi x2. A szansa, że nie padną: 1-x2.

Wiemy też, że szansa na to, że po pierwszym kroku będą dwie bakterie wynosi 80%, czyli 0.8. Tak więc szansa na to, że obydwie bakterie nie wymrą po drugim kroku wynosi 0.8(1-x2).

Ale z samego początku rozumowania wiemy też, że szansa na przetrwanie kolonii to (1-x).

Mamy więc równość: 1-x = 0.8(1-x2), z której łatwo wyliczamy, że x=0.25, czyli szanse na przetrwanie kolonii wynoszą 75%.

A jak ktoś nie lubi liczyć, zawsze pozostaje symulacja. Na przykład taka:

from random import random
maxtrials = 100000
success_count = 0
probability = 0.8
for trials in range(maxtrials):
    population = 1
    while(population > 0 and population < 100):
        newpopulation = 0
        for n in range(population):
            if(random() <= probability):
                newpopulation += 2
        population = newpopulation
    if(population > 0):
        success_count += 1
print(success_count / maxtrials)

Założyłem tu upraszczająco, że jeżeli populacja przekroczy 100 osobników, to już na pewno przeżyje. Daje to minimalnie zawyżone wyniki, ale różnica jest pomijalnie mała. Powyższy kod zawsze zwraca liczbę w okolicy 0.75, czyli tyle, ile wyszło nam poprzednio z obliczeń.

Ponadto z symulacji wychodzi mi, że kolonia rozrasta się do setki średnio w 10-11 pokoleniach, a pada średnio w dwóch (a więc jak już przeskoczy 3-4 pokolenia to raczej przeżyje), co jednocześnie pokazuje, że ustawienie "nieskończoności" na poziomie 100 to całkiem przyzwoity zapas bezpieczeństwa.

A jak Wam poszło?

Tym razem tylko jedna osoba podeszła do rozwiązania: Waldek przysłał poprawną odpowiedź opartą na nieskończonej sumie. Skoro, mówi Waldek, szansa że jedna bakteria nie przetrwa wynosi 0.2, to trzeba posumować (0.2)x od jeden do nieskończoności - w wyniku dostajemy 0.75. Gratuluję wygranej!

P.S. W ostatniej chwili drugie rozwiązanie nadesłał - tak dla odmiany - również Waldek. Tym razem rozpisane bardziej szczegółowo (i równie prawidłowo jak pierwsze):

W związku z powyższym Waldek powinien sobie teraz wziąć dwa ziemniaki: z mniejszego zrobić medal, a z większego wyciąć cztery równej długości słupki i połączyć je ze sobą w pętelkę pod kątem prostym, wreszcie na koniec wetknąć ów medal między te połączone słupki i w efekcie otrzymać medal do kwadratu.

5 komentarzy

  1. Oj, za szybko pojawiło się rozwiązanie, za szybko. Widziałem wcześniej, ale dopiero teraz miałem chwilę, by siąść do rozwiązania, a tu już rozwiązanie było. Symulacji nie pisałem, niemniej wychodziło na czuja właśnie 25% – 20% szans na wymarcie w pierwszym pokoleniu, 4% w kolejnym, czyli 5 razy mniej. Co już daje 24% i pachnie ciągiem 1/5 + 1/5^2 + 1/5^3 +…, który na oko zbiega się w 25% właśnie. Wolframalpha potwierdza https://www.wolframalpha.com/input/?i=1%2F5+%2B+1%2F5%5E2+%2B+1%2F5%5E3+%2B+

    1. To była bardzo prosta zagadka, moim zdaniem niewiele straciłeś 🙂 Następna będzie ciekawsza, obiecuję. A trzy dni to faktycznie nieco za mało – może wydłużę do tygodnia? Pomyślę.

  2. Zauważyłem, że w twoim wzorze: 1-x = 0.8(1-x^2) są dwa x, ale ten po lewej stronie znaku równości to prawdopodobieństwo śmierci kolonii, a ten po prawej stronie to prawdopodobieństwo śmierci jednej bakterii, czyli L<>P.

    P.S. Po podstawieniu: (prawy x)= 0,2 otrzymamy (lewy x)=23,2% oraz 1-(lewy x)=76,8%.

    1. X po obu stronach znaku równości oznacza prawdopodobieństwo śmierci całej kolonii, nie pojedynczej bakterii.

      Szansa, że pierwsza bakteria podzieli się na dwie wynosi 0.8. Szansa, że te dwie nie wymrą wynosi 1-x^2. A więc po prawej stronie (drugie pokolenie) mamy szansę nie-wymarcia równą 0.8(1-x^2).

      Jest to również szansa, że pierwsza bakteria nie wymrze, czyli (1-x).

      Rozwiązując 1-x=0.8(1-x^2) dostajemy x=0.25.

      1. Pewnie masz rację, musiałem popełnić błąd gdzieś w poniższym rozumowaniu:
        Jeśli (1-x^2) to prawdopodobieństwo przeżycia co najmniej jednej z dwóch bakterii w drugim pokoleniu, to x^2 jest prawdopodobieństwem śmierci tych dwóch bakterii, więc x musi być prawdopodobieństwem śmierci jednej bakterii.

Leave a Comment

Komentarze mile widziane.

Jeżeli chcesz do komentarza wstawić kod, użyj składni:
[code]
tutaj wstaw swój kod
[/code]