예제 #1
0
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
예제 #2
0
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
예제 #3
0
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
예제 #4
0
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
예제 #5
0
        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))