Próbuję zastosować algorytm Smitha-Watermana do lokalnego wyrównania sekwencji za pomocą funkcji kary luki afinicznej. Myślę, że rozumiem, jak inicjować i obliczać macierze wymagane do obliczania wyników wyrównania, ale nie mam pojęcia, jak to zrobić, by znaleźć wyrównanie. W celu uzyskania macierzy 3 wymagane I mają następujące oznaczeniaPrześledzenie w algorytmie Smitha-Watemana z karą w postaci luki afektywnej
for j in range(1, len2):
for i in range(1, len1):
fxOpen = F[i][j-1] + gap
xExtend = Ix[i][j-1] + extend
Ix[i][j] = max(fxOpen, xExtend)
fyOpen = F[i-1][j] + gap
yExtend = Iy[i-1][j] + extend
Iy[i][j] = max(fyOpen, yExtend)
matchScore = (F[i-1][j-1] + simMatrixDict[seq1[i-1]+seq2[j-1]])
xScore = Ix[i-1][j-1] + simMatrixDict[seq1[i-1]+seq2[j-1]]
yScore = Iy[i-1][j-1] + simMatrixDict[seq1[i-1]+seq2[j-1]]
F[i][j] = max(0, matchScore, xScore, yScore)
Ja pewności, jeśli trzeba pojedynczą matrycę stosie z, lub po 1? Będziemy wdzięczni za wszelkie wyjaśnienia dotyczące sposobu śledzenia wyniku maks. W punkcie F.
Czy próbujesz wdrożyć algorytm tak jak ćwiczenie? Możesz znaleźć implementacje Pythona online. Przykłady: [jeden] (https://github.com/alevchuk/pairwise-alignment-in-python), [dwa] (https://pypi.python.org/pypi/swalign/0.2), [trzy] (https://github.com/kevinakwok/bioinfo/tree/master/Smith-Waterman), [cztery] (http://forrestbao.blogspot.com/2007/09/smith-waterman-algorithm-in-process.html). –
dziękuję za odpowiedź, ale tylko jeden z nich (dwa) zawiera funkcję kary luki afinicznej, której tak naprawdę jestem po. Niestety kod w tym jest nieco poza mną, tylko w nim przez kilka miesięcy. – jonwells