def brute_force_motif_search(dna, t, n, l): """Funkcja zwracająca najczęstszy motyw po przeszukaniu wszystkich możliwości DNA - tabelka sekwencji nukleotydowych t - ilosc sekwencji w dna n - ilosc nukleotydow w sekwencji l - dlugosc meru""" # Danej implementacji algorytmu użyłam, gdyż jest zgodna z założeniami: # a)iteruje po wszystkich możliwościach # b)przyrównuje wynik Score do bestScore # c)zwraca bestMotif jako liste indeksów o najwyższym Score #biblioteka itertools byla wspomniana na laboratoriach #podaję to rozwiązanie jako alternatywę dla mój_brute.py bestMotif = [] for j in range(0, t): bestMotif.append(0) bestScore = 0 lista = [] for i in range( 0, n - l + 1): #stworzenie listy elementów na których funkcja będzie iterować lista.append(i) kombinacje = list( product(lista, repeat=t) ) #funkcja tworzy liste wszystkich kombinacji podanych elementow for komb in kombinacje: #Iterujemy po wszystkich mozliwościach if (Score(komb, dna, l) > bestScore): #Porównujemy wyniki Score do bestScore bestScore = Score(komb, dna, l) bestMotif = komb return bestMotif
def greedy_motif_search(DNA, k, t): """"Funkcja zwracająca motyw otrzymany poprzez zastosowanie alorytmu zachlannego DNA - tabelka sekwencji nukleotydowych k - dlugosc meru t - ilosc sekwencji w dna""" bestMotifs = [] for x in range(0, t): #Dla każdej sekwencji w dna bestMotifs.append(0) #nadaj indeks 0 for n in range(0, (len(DNA[0])-k)): #Od 0 do długości sekwencji w dna pomniejszonej o długość meru Motif = [n] #Indeks meru w pierwszej sekwecji for i in range(1, t): #Pętla od 1 do ilosci sekwencji macierz = profil(Motif, DNA, k) #wykorzystanie funkcji profil zwracajacej macierz wystapien nukleotydow dla merow Motif.append(podobienstwo(macierz, DNA, i, k)) #Dodajemy kolejne indeksy korzystajac z funkcji zwracajacej indeks najbardziej podobnego meru if(Score(Motif, DNA, k)>Score(bestMotifs, DNA, k)): #Jesli Score od motywu wiekszy niz Score od BestMotywu bestMotifs = Motif #BestMotyw mprzyjmuje wartosc motywu return bestMotifs
def randomized_motif_search(DNA, k, t): """Funkcja zwracająca motyw otrzymany poprzez zastosowanie alorytmu losowego k - dlugosc meru DNA - tabelka sekwencji nukleotydowych t - ilosc sekwencji w dna """ Motifs = [] for x in range(0, t): #Petla iterujaca po ilosci sekwencji w dna Motifs.append(rand.randint(0, len(DNA[0])) - k) #Nadawanie losowych wartosci indeksow bestMotifs = Motifs #Ktore nadajemy rownież zmiennej bestMotifs while 1: #Nieskonczona pętla macierz = profil(Motifs, DNA, k) #Zwracanie profilu ze zmiennej Motifs for x in range(0, len(Motifs)): #Petla od zera do ilosci elementow zmiennej Motifs Motifs[x] = podobienstwo(macierz, DNA, x, k) #Przyjmowanie jako indeksow wyniku dzialania funkcji if (Score(Motifs, DNA, k) > Score(bestMotifs, DNA, k)): #Jesli Score od Motifs wiekszy niz Score od BestMotifs bestMotifs = Motifs #Motifs przyjmuje miano BestMotifs else: #Jesli Score od aktualnych bestMotifs jest wiekszy return bestMotifs #Zakoncz dzialanie nieskonczonej petli i zwroc bestMotifs
def m_brute_force_motif_search(DNA, t, n, l): """Funkcja zwracająca najczęstszy motyw po przeszukaniu wszystkich możliwości DNA - tabelka sekwencji nukleotydowych t - ilosc sekwencji w dna n - ilosc nukleotydow w sekwencji l - dlugosc meru""" #Danej implementacji algorytmu użyłam, gdyż jest zgodna z założeniami: # a)iteruje po wszystkich możliwościach # b)przyrównuje wynik Score do bestScore # c)zwraca bestMotif jako liste indeksów o najwyższym Score #Zasada działania jest taka sama bestMotif = [] for j in range(0, t): bestMotif.append(0) bestScore = 0 #początkowo bestScore o jak najmniejszej wartosci s = [] for x in range(0, t): #pętla iterująca przez ilosc sekwencji w DNA s.append(0) #zapełnianie s początkowymi indeksami ustalonymi na 0 for y in range( 0, (pow((n - l) + 1, t)) ): #Pętla iterująca przez wszystkie mozliwości (usunełam wstawione poprzednio błędnie -1) if (Score(s, DNA, l) > bestScore): #Porownywanie wyniku Score do bestScore for i in range(0, len(s)): bestMotif[i] = s[i] bestScore = Score(s, DNA, l) if ( int(s[0]) % (n - l) == 0 and s[0] != 0 ): #Jesli reszta z dzielenia pierwszego elementu s(zmieniającego się najczęściej) przez długoścSekwencji/dlugoscMotywu równa 0, zakaz dzielenia prez zero for z in range(1, t): #Pętla od 1 do ilosci sekwencji w dna if s[z] == n - l: #Jeśli indeks danej sekwencji = długoścSekwencji - dlugoscMotywu s[z] = 0 #indeks zerujemy else: #Jeśli indeks jeszcze nie osiągnął maksymalnej wartości s[z] += 1 #Zwiększ go o 1 break #i wyjdz z petli s[0] = 0 #Wyzeruj pierwszy indeks else: #Jesli indeks pierwszego elementu jeszcze nie osiągnął maksymalnej wartości s[0] += 1 #Zwiększ go o jeden return bestMotif
bestMotifs.append(0) #nadaj indeks 0 for n in range(0, (len(DNA[0])-k)): #Od 0 do długości sekwencji w dna pomniejszonej o długość meru Motif = [n] #Indeks meru w pierwszej sekwecji for i in range(1, t): #Pętla od 1 do ilosci sekwencji macierz = profil(Motif, DNA, k) #wykorzystanie funkcji profil zwracajacej macierz wystapien nukleotydow dla merow Motif.append(podobienstwo(macierz, DNA, i, k)) #Dodajemy kolejne indeksy korzystajac z funkcji zwracajacej indeks najbardziej podobnego meru if(Score(Motif, DNA, k)>Score(bestMotifs, DNA, k)): #Jesli Score od motywu wiekszy niz Score od BestMotywu bestMotifs = Motif #BestMotyw mprzyjmuje wartosc motywu return bestMotifs if __name__ == "__main__": dna = ['acgtatcttc', 'tttatcggg', 'gactataaaa'] print("\nDziałanie greedy_motif_search dla dna: ", dna) best = greedy_motif_search(dna, 3, len(dna)) print("Best Motif: ",best) print("Score: ", Score(best, dna, 3)) dna = ['tagtggtcttttgagtgtagatctgaagggaaagtatttccaccagttcggggtcacccagcagggcagggtgacttaat', 'cgcgactcggcgctcacagttatcgcacgtttagaccaaaacggagttggatccgaaactggagtttaatcggagtcctt', 'gttacttgtgagcctggttagacccgaaatataattgttggctgcatagcggagctgacatacgagtaggggaaatgcgt', 'aacatcaggctttgattaaacaatttaagcacgtaaatccgaattgacctgatgacaatacggaacatgccggctccggg', 'accaccggataggctgcttattaggtccaaaaggtagtatcgtaataatggctcagccatgtcaatgtgcggcattccac', 'tagattcgaatcgatcgtgtttctccctctgtgggttaacgaggggtccgaccttgctcgcatgtgccgaacttgtaccc', 'gaaatggttcggtgcgatatcaggccgttctcttaacttggcggtgcagatccgaacgtctctggaggggtcgtgcgcta', 'atgtatactagacattctaacgctcgcttattggcggagaccatttgctccactacaagaggctactgtgtagatccgta', 'ttcttacacccttctttagatccaaacctgttggcgccatcttcttttcgagtccttgtacctccatttgctctgatgac', 'ctacctatgtaaaacaacatctactaacgtagtccggtctttcctgatctgccctaacctacaggtcgatccgaaattcg'] print("Działanie greedy_motif_search dla dna: ", dna) best = greedy_motif_search(dna, 30, len(dna)) print("Best Motif: ", best) print("Score: ", Score(best, dna, 30))