Wersja pliku: v.10, 13 kwietnia 2019 zmiany: - 13.04 dodany punkt na temat testów do sprawozdania Biologia, bioinformatyka: 1. DNA kwas deoksyrybonukleinowy. Zbudowany z 4 rodzajów nukleotydów: adeniny, cytozyny, guaniny, tyniny. a. Informatyczno-matematycznie: DNA: ciąg znaków o długości n zbudowanych na alfabecie DNA = {A, C, G, T}. 2. Komplementarność: w podwójnej helisie DNA po jednej stronie jest A (adenina) a po drugiej T (tynina). Po jednej C (cytozyna) po drugiej G (guanina). Czyli dla łańcucha A T C T T G, łańcuch komplementarny to T A G A A C. 3. Oligonukleotyd krótki, jednoniciowy fragment DNA o długości k, zazwyczaj od kilku do kilkunastu nukleotydów. 4. Macierz hybrydyzacji, mikromacierz, mikrochip spłycając temat: płytka, na której w oddzielnych komórkach znajdują się wielokrotnie sklonowane oligonukleotydy. Na przykład dla k = 3, macierz ta zawiera S = 4 3 = 64 komórki, wszystkie kombinacje oligonukleotydów od AAA do TTT rozdzielone po osobnych komórkach macierzy. 5. SBH (sequencing by hybridization, sekwencjonowanie przez hybrydyzację) znowu skracając temat: sklonowane jednoniciowe DNA jest wrzucane na macierz hybrydyzacji. Pewne komórki macierzy przyczepiają do siebie fragmenty DNA, w idealnej sytuacji: tylko te w których znajdują się komplementarne do nich fragmenty / podłańcuchy. Np. DNA : A T T A G T A T przyczepi się do komórki chipu zawierającej oligonukleotyd A A T C A, ponieważ AATCA (na płytce) jest komplementarnym łańcuchem do podłańcucha TTAGT (w wejściowym DNA). 6. SBH wersja klasyczna z błędami, przede wszystkim (tj. domyślnie dla algorytmu) negatywnymi wynikającymi z powtórzeń (pewnych podłańcuchów w łańcuchu DNA, na co w ogólności nie mam wpływu - one po prostu są i będą). Np. we fragmencie ATCTTAGTCT i k=3 powtarza się fragment TCT na dwóch różnych pozycjach. Im dłuższe DNA (n) i im mniejsze k (długość oligonukleotydów użytych w macierzy hybrydyzacji w SBH) tym więcej tego typu powtórzeń będzie się zdarzać. Nawet w najbardziej podstawowej wersji algorytm sekwencjonujący DNA na postawie informacji
z macierzy/spektrum (patrz punkt niżej) DNA musi sobie z tym poradzić. Dodatkowo błędy hybrydyzacji: a. negatywne - w spektrum brakuje pewnych elementów, które w teorii składają się na prawdziwe, aktualne badane DNA (i nie wynika to z powtórzeń, ale błędnego odczytania komórki chipu, która w teorii przyłączyła DNA, ale w praktyce nie zostało to wykryte w eksperymencie hybrydyzacyjnym); b. błędy pozytywne - spektrum zawiera pewne dodatkowe oligonukleotydy, które jednak nie występują w badanym (sekwencjonowanym) DNA (czyli: badane DNA w teorii nie powinno przyłączyć się do pewnej komórki (reguła komplementarności, pkt 2.), ale z jakichś powodów komórka ta została uwzględniona jako część spektrum DNA). 7. Spektrum DNA - zbiór oligonukleotydów (krótkich jednoniciowych fragmentów DNA) każdy o długości k. Liczność spektrum: S. Elementy spektrum stanowią zbiór danych do budowy grafu (tj. wierzchołków, których zapis na alfabecie DNA = {A, C, G, T} przy okazji determinuje liczbę i wagi łuków między wierzchołkami). 8. Graf ze spektrum DNA: elementy spektrum do wierzchołki. Łuki z wagą oznaczająca ilość nakładających się liter. Np. z wierzchołka ATGT prowadzi łuk o wadze 3 do TGTC, ponieważ fragment TGT się nakłada na siebie (oba wierzchołki tworzą wtedy łańcuch ATGTC. Inny przykład: z wierzchołka TAAAA do AAAAC prowadzą 4 łuki, o wagach: 4 (AAAA), 3 (AAA), 2(AA) oraz 1(A) gdzie w nawiasie jest podany potencjalny nakładający się na siebie podłańcuch obu wierzchołków (odpowiedni: podłańcuch końcowy dla TAAAA oraz początkowy dla AAAAC). Maksymalna waga łuków, czyli nałożenie na k-1 literach alfabetu DNA jest możliwa do stosowania tylko w przypadku gdy brak jakichkolwiek błędów, nawet tych wynikających z powtórzeń. Czyli praktycznie niemal nigdy: potrzebne są więc łuki o mniejszych wagach. 9. Na przykład dla DNA: A T C T G T A łańcuch komplementarny to T A G A C A T. Dla k = 3, spektrum tego DNA zawiera komórki z macierzy hybrydyzacji oznaczone jako TAG, AGA, GAC, ACA, CAT, czyli komplementarne do nich fragmenty wejściowego DNA: ATC, TCT, CTG, TGT, GTA. Idealna wielkość spektrum to S = n k + 1, czyli dla n = 7, k = 3, S = 7-3+1 = 5. W takim wypadku widać, że nie ma tutaj żadnych błędów, nawet negatywnych wynikających w powtórzeń. Gdyby takie istniały, to S < n k + 1. W przypadku gdyby były TYLKO błędy pozytywne hybrydyzacji, wtedy S > n k + 1. W obu wypadkach należy odwiedzić odpowiednią liczbę wierzchołków aby zrekonstruować DNA o długości n. a. Jaka to odpowiednia liczba? Przy braku błędów: S, czyli wszystkie ze spektrum.
b. Przy błędach negatywnych wynikających z powtórzeń: S czyli wszystkie ze spektrum, przy czym w tym wypadku niektóre wierzchołki odwiedzamy więcej niż raz. Ale wciąż przyjmujemy, że odwiedzamy wszystkie. c. Przy błędach pozytywnych (tylko) : n k + 1 wierzchołków, bo samo spektrum ma więcej elementów: S > n k + 1. d. Przy błędach pozytywnych i negatywnych równocześnie: tyle wierzchołków, aby zrekonstruować DNA o długości n. Niestety przy tak ogólnym sformułowaniu tej liczby, wyniki, czyli uzyskane DNA najbardziej będą odstawać od oryginału. i. Przy czym problem rozwiązań niejednoznacznych, tj. graf może wyprodukować wiele ścieżek będących DNA, i nie wiemy w sumie które z nich to oryginał (gdybyśmy go nie znali) występować może w każdym przypadku. NAWET gdy spektrum jest idealne 10. WAŻNE: zakładamy, że poza wartościami n oraz k, algorytm heurystyczny ZNA początkowy oligonukleotyd, tj. wierzchołek początkowy grafu w którym szukamy odpowiedniej ścieżki mającej odtworzyć poszukiwane DNA. 11. Algorytm który jest nam w stanie (pośrednio) określić % podobieństwa dwóch sekwencji to np. algorytm Needlemana-Wunscha (uściślijmy: jest algorytm globalnego dopasowania sekwencji przede wszystkim, ale to o co nam chodzi też z niego bez problemu można wyciągnąć, tj. procent podobieństwa po prostu jak już nam stworzy dopasowanie, to literka po literce liczymy ile nukleotydów się nakłada na siebie wyjaśnienie będzie 13.04 na zajęciach ) np. https://github.com/ldfaiztt/algorithms-2/blob/master/dynamic%20programming/needleman- Wunsch.cpp Informacje organizacyjne: 1. Praca w parach, praca jednoosobowa możliwa ale niezalecana z uwagi na ilość pracy do zrobienia. 2. Drugie laboratorium: 13.04 przygotować ok. 2 stron tekstu na temat algorytmu, który grupa będzie implementować. Rozmowa na zajęciach nie na ocenę, ale bardziej aby od początku wyeliminować błędy w założeniach algorytmu.
3. Projekt musi być oddany na 48 godzin przed ostatnim spotkaniem (15.06 sobota i 16.06 niedziela, czyli do czwartku / piątku (do rana, czyli od ok. 9-10 przed południem - ja to muszę wszystko przeczytać!) poproszę o sprawozdania na maila. 4. Ocena na podstawie projektu i sprawozdania (w którym ważniejszą część mają stanowić testy algorytmu o nich na drugim laboratorium). Rozmowa zaliczeniowa odbędzie się właśnie 15 i 16.06. 5. Na projekt zaliczeniowy składają się: 1. Program / algorytm heurystyczny (lub metaheurystyczny (dla ambitnych)) - chodzi w skrócie o każdy algorytm inny niż siłowe przeszukiwanie przestrzeni rozwiązań, co dla problemu SBH mija się z celem. a. Preferowane języki: C, C++, Java lub C#. Mniej preferowane: Python (chyba, że ktoś naprawdę chce ) b. Program konsolowy, czyli okna, przyciski i inne (np. w ramach Visual C#) nie są potrzebne. Z drugiej strony musi być jakaś komunikacja z użytkownikiem: poza DNA w pliku tekstowym powinna być możliwość jego wygenerowania na życzenie (parametr: długość n). Algorytm musi wiedzieć też jaka jest wielkość oligonukleotydów (wartość k), oraz ile procent spektrum to błędy (negatywne lub pozytywne). c. Algorytm uwzględniający oba rodzaje błędów na raz w spektrum: negatywne i pozytywne nie jest jako taki obowiązkowy, ale na pewno mile widziany i wyżej oceniany (będzie ) 2. Sprawozdanie z opisem algorytmu oraz wynikami testów, najlepiej w formie wykresów i/lub tabel. Opis poniżej. Testy: 1. Testy dzielimy na dwa rodzaje: algorytmu oraz instancji problemu. Te pierwsze dotyczą testowania (wybranych) parametrów sterujących pracą samego algorytmu, te drugie
parametrów testowanego DNA (np. jego długość n, liczba k, procent błędów, informacja jakie to są błędy). 2. Najlepiej zacząć od testów algorytmu. Robimy to tak, że generujemy zbiór instancji testowych które będziemy używać do testowania wybranych parametrów pracy algorytmu poszukującego (heurystyka / metaheurystyka). Np. 50 czy 100 sekwencji DNA o różnej / podobnej długości. a. Testować można czas pracy algorytmu (każdego), np. średnia jakość rozwiązań całego zbioru testowego gdy algorytm na przerobienie każdej sekwencji z tego zbioru ma np. 5sekund, 10s, 15s, 20s, itd. Następnie wyniki wrzucamy na wykres / do tabelki w sprawozdaniu. b. Inne parametry algorytmu (na pewno takie będą), ale to zależy jaki algorytm implementujemy. W ogólności każdy z nich działa z użyciem mechanizmów prawdopodobieństwa / liczb pseudolosowych, tak więc jego działanie nie jest w pełni deterministyczne tym lepiej z punktu widzenia ogromnej liczby potencjalnych testów które można na takim algorytmie (jego parametrach sterujących) wykonywać. 3. Testy instancji (wykonywane dla konkretnych, na stałe przypisanych wartości parametrów algorytmu, które testowaliśmy wcześniej, ale teraz zostawiamy je w spokoju), konkretne przykłady a. Testujemy jakość rozwiązań w zależności od długości DNA (100, 300, 500, 700nt, itd.) b. Jakość rozwiązań w zależności od procentu błędów: i. negatywnych wynikających z powtórzeń ii. negatywnych iii. pozytywnych iv. wszystkich c. Inne: np. sztucznie wygenerowane DNA, gdzie specjalnie wrzucamy liczne długie powtórzenia podobnych podsekwencji, np. wiele liter A obok siebie, do przesady, np. sekwencja TCGTAAAAAAAAAAAAATGCTA będzie problematyczna nawet dla k=10.