.11 Phương pháp tính tốn chính xác bằng dynamic programming

Một phần của tài liệu Luận van cao học tin (Trang 31)

2.3.2. Sử dụng các thiết bị phần cứng

Phương pháp sử dụng thiết bị phần cứng để hiện thực hóa kỹ thuật dynamic programming, hoặc sử dụng các thiết bị phần cứng để song song hóa, chia nhỏ bài toán. Các phương pháp này sẽ giúp thực thi bài toán nhanh hơn tuy nhiên cả hai phương pháp này đều địi hỏi chi phí q cao.

2.3.3. Phương pháp tìm kiếm cục bộ(Local Search)

Các kỹ thuật tìm kiếm cục bộ sử dụng các kỹ thuật lặp với các tham số đầu vào xác định, giải quyết bài tốn so sánh nhiều trình tự theo hướng tìm ra lời giải gần tối ưu nhất dựa trên các bước di chuyển tốt của của mỗi trạng thái của lời giải so với các trạng thái xung quanh nó trong mỗi vòng lặp xác định. Chủ yếu được sử dụng cho việc giải quyết bài toán so sánh theo hướng tồn cục. Phương pháp này có ưu điểm thừa kế được các ưu điểm của các giải thuật tìm kiếm cục bộ: giảm khơng gian tìm kiếm của lời giải, tốc độ tìm kiếm nhanh…, tuy nhiên do phương pháp tìm kiếm cục bộ chỉ đảm bảo tính đúng(sound) chứ khơng đảm bảo tính đầy đủ(complete), và do việc lựa chọn các bước đi để thốt khỏi tình trạng tối ưu cục bộ là ngẫu nhiên nên có thể thuật tốn sẽ khơng tìm ra được lời giải tốt trong một số lần chạy(phụ thuộc vào việc ấn định các tham số đầu vào). Một số giải thuật : Tabu Search, Simulated Annealing(giải thuật luyện kim).

2.3.4. Sử dụng giải thuật Di truyền(Genetic Algorithm)

Phương pháp sử dụng thuật giải di truyền cho bài tốn so sánh nhiều trình tự là một phương pháp phù hợp với bản chất sinh học [34]. Ý tưởng tạo ra một quần thể các alignment sau đó chọn ra các lời giải tốt nhất có thể. Phương pháp này tạo dựng một quần thể các phép so sánh trình tự từ các phép tốn cơ bản của sinh học, lai tạo, đột biến và cố gắng cải thiện hàm thích nghi của quần thể các phép so sánh trình tự. Phương pháp này cho kết quả tốt, tuy nhiên hạn chế của phương pháp này là thời gian tính tốn lớn(đặc điểm chung của giải thuật di truyền). Một số phần mềm:

SAGA(Notredame và Higgins, 1996)[24].

2.3.5. Sử dụng Mơ hình Markov ẩn(Hidden Markov Model-HMM).

Áp dụng mơ hình Markov ẩn để mơ hình hóa bài tốn so sánh nhiều trình tự. Ý tưởng của phương pháp này là sử dụng mô hình Markov ẩn để biểu diễn MSA(được giới thiệu bởi Eddy(1995) [8]), sau đó tối ưu khả năng mà một mơ hình HMM có thể biểu diễn cho các sequence đã được align. Trong mơ hình này các nucleotide(A,C,T,G) hoặc 23 amino acid sẽ là tập các ký tự. Các trạng thái của mơ hình sẽ thuộc 3 loại trạng thái: match, insert, delete. Mỗi ký tự sẽ có 1 xác suất xuất hiện nhất định tại mỗi trạng thái. Giữa các trạng thái sẽ có xác suất chuyển đổi từ trạng thái này sang trạng thái khác. Dựa trên mơ hình này mỗi chuỗi trình tự bất kỳ trong

sinh học sẽ được sinh ra bằng một con đường tập các trạng thái. Tập hợp các trạng thái của các chuỗi trình tự trong mơ hình HMM sẽ là 1 kết quả của bài toán so sánh nhiều trình tự. Và như vậy bài tốn so sánh nhiều trình tự sẽ trở thành bài tốn tìm xác suất điều kiện cực đại của các chuỗi trình tự khi biết mơ hình.

Hình 2.12 Mơ hình Markov cho bài tốn MSA.

Hình trên minh họa quá trình sinh ra một kết quả của phép so sánh giữa 2 trình tự từ mơ hình Markov. Trạng thái match được biểu diễn bằng các hình chữ nhật, trạng thái insert được biểu diễn bởi các hình thoi, trạng thái delete được biểu diễn bởi các hình trịn.

Bài tốn tìm xác suất cực đại của các chuỗi trình tự trong mơ hình có thể được giải quyết bằng nhiều kỹ thuật: giải thuật Viterbi, Forward-Backward Algorithm, Baum-Welch Algorithm…

Khác với các phương pháp ở trên phụ thuộc vào cơ chế đánh giá(hàm đánh giá). Mơ hình HMM sẽ xây dựng bài tốn so sánh nhiều trình tự dựa trên chính bản thân thơng tin của các trình tự, sự biến đổi của các thông số đánh giá sẽ do chính bản thân các trình tự quyết định. Phần mềm hiện thực theo phương pháp này: HMMT.

Ngoài các phương pháp được trình bày ở trên, vẫn cịn một số phương pháp tiếp cận khác để giải quyết bài toán như mạng Neuron …

Tựu trung lại các phương pháp đều có điểm mạnh và điểm khuyết của chúng trong việc giải bài tốn so sánh nhiều trình tự. Tuy nhiên như tơi đã trình bày khơng một phương pháp nào có thể gọi là hồn hảo và chiếm ưu thế tuyệt đối, tất cả các phương pháp đều hướng đến việc tìm ra một lời giải gần tốt nhất với khoảng thời gian

A1 A2 A3 − A4 − A5

hợp lý, thay vì hướng đến việc tìm ra lời giải tốt nhất với một khoảng thời gian của một bài toán NP. Trong các phương pháp trên phương pháp dynamic programming là phương pháp ra đời sớm nhất, rất hiệu quả với bài tốn so sánh 2 trình tự(PSA), tuy nhiên lại khơng thật sự tốt với bài tốn MSA có dữ liệu lớn, điều này có thể được khắc phục nếu tiếp cận thuật giải theo hướng Progressive Algorithm, xây dựng một sự cải tiến bằng cách kết hợp các kỹ thuật heuristic trong quá trình xử lý, giảm thiểu khơng gian tìm kiếm, loại bỏ cách tiếp cận dynamic programming truyền thống(xây dựng ma trận đánh giá k chiều), đưa về bài toán xử lý dựa trên việc đánh giá tất cả các bài toán so sánh 2 trình tự được sinh ra từ các trình tự của bài tốn MSA. Phương pháp dựa trên Progressive Algorithm này sẽ cho phép giảm độ phức tạp của giải thuật, tăng tốc độ tính tốn, giúp tìm kiếm lời giải trong khoảng thời gian ngắn, mà vẫn đáp ứng được lời giải gần tốt nhất trong hầu hết các trường hợp. Trong phạm vi nghiên cứu của mình tơi xin đề xuất phương pháp thực hiện này cho việc giải quyết bài toán MSA. Giải pháp

Chương 3. CƠ SỞ LÝ THUYẾT VÀ PHƯƠNG PHÁP THỰC HIỆN

Chương này xin được giới thiệu về phương pháp quy hoạch động, phương pháp Progressive Algorithm sử dụng heuristic dựa trên quy hoạch động để giải bài toán.

3.1. Giới thiệu về Dynamic Programming

Dynamic Programming [7] là phương pháp giải bài toán bằng cách kết hợp các lời giải của các bài toán con. Đặc điểm của giải thuật dynamic programming:

ƒ Các bài tốn con khơng độc lập với nhau: chúng có chung các bài tốn con nhỏ hơn.

ƒ Giải mỗi bài toán con chỉ một lần, và ghi nhớ lời giải đó trong một bảng để truy cập khi cần đến.

Một giải thuật dynamic programming được xây dựng qua bốn bước: 1. Xác định cấu trúc của một lời giải tối ưu.

2. Định nghĩa đệ quy cho giá trị của một lời giải tối ưu.

3. Tính giá trị của một lời giải tối ưu từ dưới lên (“bottom-up”). 4. Xây dựng lời giải tối ưu từ các thông tin đã tính.

Trong phần này, xin được trình bày tổng quan cách tiếp cận bằng kỹ thuật dynamic programming cho vấn đề so sánh trình tự, từ bài tốn so sánh 2 trình tự PSA đến bài tốn so sánh nhiều trình tự MSA [25], [27], [30]. Phần trình bày này chỉ xét đối với phép tốn Global Alignment.

Vì bài tốn PSA chính là nền tảng cho kỹ thuật dynamic programming giúp giải quyết bài toán MSA, nên trong phần đầu tơi sẽ trình bày về bài tốn cơ bản PSA.

3.2. Bài toán PSA và cách giải quyết bằng kỹ thuật quy hoạch động hoạch động

Phần 2.1.3 đã giới thiệu về bài toán PSA. Phần này sẽ giới thiệu hướng giải quyết bài toán này bằng quy hoạch động.

Kỹ thuật này sẽ cho phép chúng ta xây dựng một phép alignment tối ưu.

Xét 2 chuỗi trình tự S1 và S2, |S1|=n, |S2|=m, mục đích của chúng ta là tìm kiếm

3.2.1. Giải thuật quy hoạch động cho bài toán PSA

Định nghĩa 3.1: Xét định nghĩa về 1 cơ chế đánh giá như sau

ƒ Nếu a và b là 2 ký tự đại diện cho các amino acid(nucleotide) trong 2 trình tự. Gọi σ( , )a b là hàm đánh giá của cặp a, b trong trong ma trận đánh giá ƒ Hàm giá trị của gap phụ thuộc vào hằng số r>0 và chiều dài k

(γ( )k = −r k* ).

ƒ T là một chuỗi, ta định nghĩa |T| là chiều dài của chuỗi T.

Giá trị của phép alignment A của 2 chuỗi S1, S2 với kết quả S’1, S’2:

1 1 2 2 ( '[ ], '[ ]) * σ ∈ − ∑ i K S i S i l r

với K1 là tập các phần tử không là gap, |K1|=l1, l2 là tổng chiều dài của

gap, ' '

1 2 | 1| | 2 |

l + = =l l S = S

ƒ Phép alignment tối ưu là phép alignment có giá trị lớn nhất có thể có của 2 chuỗi.

Định nghĩa 3.2: Gọi S(i,j) là giá trị của một phép alignment tối ưu của chuỗi

S1i(S1[1],.., S1[i]) và S2j (S2[1],..,S2[j])( 1≤ ≤i n,1≤ ≤j m) như vậy S(n,m) sẽ là giá trị

của một phép alignment tối ưu của S1 và S2. S(i, j) được định nghĩa như sau:

S(0, 0)=0

S(i,0)=S(i-1,0) -r, i>0 S(0,j)=S(0,j-1) -r, j>0

Từ định nghĩa của S(i, j) ta sẽ có cơng thức tính S(i, j) như sau:

S(i,j)= max { S(i-1, j-1) + σ( [ ], [ ])S i S j1 2 , S(i-1, j) - r ,

S(i, j-1) - r } i>0, j>0

Trong đó S(i-1, j-1) chính là giá trị của một phép alignment tối ưu của 2 chuỗi

S1i(S1[1],.., S1[i-1]) và S2j(S2[1],…,S2[j-1])

Công thức S(i,j) ở trên cho phép ta dễ dàng vận dụng kỹ thuật quy hoạch động.

Ví dụ: Xét 2 chuỗi “ACBCDB” và “CADBD”

Hàm đánh giá : ( , ) 2 1 a b a b a b σ = ⎨⎧− =≠ ⎩ Cho r=1

Ta thu được ma trận giá trị S(i,j) của 2 chuỗi trình tự như hình dưới j 0 1 2 3 4 5 i C A D B D 0 0 -1 -2 -3 -4 -5 1 A -1 -1 1 0 -1 -2 2 C -2 1 0 0 -1 -2 3 B -3 0 0 -1 2 1 4 C -4 -1 -1 -1 1 1 5 D -5 -2 -2 1 0 3 6 B -6 -3 -3 0 3 2

Từ ma trận kết quả này ta có S(6,5)=2. Như vậy giá trị của phép alignment tối ưu của 2 chuỗi trên là 2. Từ kết quả này ta sẽ đi tìm các phép alignment tối ưu mà cho

S(6,5)=2. Sử dụng kỹ thuật lưu vết ta sẽ có được 3 trong số các kết quả, như hình dưới.

j 0 1 2 3 4 5 i C A D B D 0 0 -1 -2 -3 -4 -5 1 A -1 -1 1 0 -1 -2 2 C -2 1 0 0 -1 -2 3 B -3 0 0 -1 2 1 4 C -4 -1 -1 -1 1 1 5 D -5 -2 -2 1 0 3 6 B -6 -3 -3 0 3 2

Dựa vào các con đường được sinh ra do kỹ thuật lưu vết từ S(m,n) đến S(0,0), các alignment sẽ được sinh ra dựa trên nguyên tắc:

ƒ Nếu con đường đi theo hướng đường chéo từ S(i,j) đến S(i-1,j-1) thì 2 ký tự đại diện cho S1[i] và S2[j] sẽ được ghi vào kết quả(đã được align) ƒ Nếu con đường đi theo hướng từ S(i,j) đến S(i-1,j) thì ký tự đại diện cho

S1[i] và ‘-‘ sẽ được ghi vào kết quả(1 insertion gap được sinh ra)

ƒ Nếu con đường đi theo hướng từ S(i, j) đến S(i, j-1) thì ký tự đại diện cho

S2[j] và ‘-‘ sẽ được ghi vào kết quả(1 deletion gap được sinh ra)

Theo nguyên tắc này, trong ví dụ trên ta thu được 3 kết quả tương ứng với 3 con đường truy hồi:

Như vậy cách tiếp cận quy hoạch động gồm 3 bước: ƒ Khởi tạo ma trận từ 2 chuỗi sequence.

ƒ Tính tốn, điền giá trị cho ma trận.

ƒ Sử dụng kỹ thuật lưu vết để tìm ra kết quả.

Giải thuật tính S(m,n) và lưu vết

S(0,0)=0; for i=1 to n do S(i,0)= S(i-1,0) - r; for j=1 to m do S( j,0)= S(0, j-1) - r; for i=1 to |S1| do for j=1 to |S2| do {

S(i, j)= max ( S(i-1, j-1) + σ( [ ], [ ])S i S j1 2 , S(i-1, j) - r ,

S(i, j-1) - r );(1)

BackPTR(S(i, j))=(imax, jmax);//lưu trữ vết vào mảng BackPTR.

} – A C B C D B C A D B – D – A C B C D B – – C A – D B D A C B C D B – – C – A D B D

Với imax, jmax là giá trị tương ứng của i, j trong biểu thức (1). Xây dựng phương thức tìm alignment theo nguyên tắc nêu ở trên, dựa vào mảng lưu trữ vết BackPTR, ta sẽ thu được kết quả.

Giải thuật tìm S(m,n) và lưu vết có độ phức tạp Ο((n+ +1) (m+1)), quá trình tìm alignment từ tập vết BackPTR có độ phức tạp Ο((n+ +1) (m+1)), vì thế độ phức tạp của giải thuật quy hoạch động cho bài toán là: Ο((n+1)(m+1)) + Ο((n+ +1) (m+1))=Ο(nm).

3.2.2. Giải thuật Gotoh

Trong giải thuật trên, chúng ta xét trường hợp gap đơn giản, bỏ qua các tham số khả năng mở gap và khả năng xuất hiện phần tử tiếp theo trong gap . Khi giá trị của gap phụ thuộc vào các tham số này, cơng thức tính S(i,j) ( i>0, j>0) sẽ có dạng:

1 2 ( , ) max{ ( 1, 1) ( [ ], [ ]), max{ ( , 1) ( 1)}, max{ ( 1, ), ( 1)}} 2 , 2 S i j S i j S i S j S i x j x S i j y y x i y j σ γ γ = − − + − − + − − − − ≤ ≤ ≤ ≤

Gotoh[13] đưa ra 1 giải thuật cho phép tính khi gap là 1 hàm tuyến tính dạng : ( )k (q r k* )

γ = − +

Để tính tốn S chúng ta đưa vào thêm các định nghĩa sau:

Gọi D(i, j) là giá trị lớn nhất của alignment giữa S1i và S2j mà được kết thúc bằng một deletion gap.

I(i, j) là giá trị lớn nhất của một alignment giữa S1i và S2j mà được kết thúc bằng

một insertion gap.

Chúng ta sẽ có cơng thức tính cho S(i, j), D(i, j), I(i, j)

S(0, 0) = 0,

S(i, 0) = max{D(i, 0) } for i > 0, S(0, j ) = max{I (0, j ) } for j > 0,

S(i, j ) = max{S(i − 1, j − 1) + σ(S1[i] , S2[j] ),D(i, j ), I (i, j) } for i > 0, j > 0. D(0, j ) = S(0, j ) − q for j ≥ 0,

D(i, 0) = D(i − 1, 0) − r for i > 0,

D(i, j ) = max{D(i − 1, j ) − r, S(i − 1, j ) − q − r }for i > 0, j > 0. I (i, 0) = S(i, 0) − q for i ≥ 0,

I (0, j ) = I (0, j − 1) − r for j > 0,

Phần tiếp theo xin đề cập về cách tính giá trị của phép chuyển đổi từ chuỗi S1 sang S2 theo các khái niệm được giới thiệu ở trên. Chúng ta sẽ sử dụng 3 mảng 2 chiều để lưu trữ kết quả cho S, D,I.

Gotoh’s algorithm arrays S[0..m, 0..n] , D[0..m, 0..n] , I[0..m, 0..n] S(0, 0)← 0 for j ← 1 to n do { S(0, j) ← −( q+r*j) D(0, j) ← S(0,j) - q } for i ← 1 to m do { S(i, 0) ← −(q + r*i) I(i, 0) ← S(i,0)−q for j ← 1 to n do {

I(i, j) ← max {I(i, j - 1) , S(i, j - 1) −q} - r

D(i, j) ← max {D(i - 1, j) , S(i - 1, j) - q} - r

S(i, j) ← max {D(i, j) , I(i, j) , S(i − 1, j − 1) + σ( [ ], [ ])S i S j1 2 } }

}

write "cost is" S(m, n)

3.2.3. Giải thuật cải tiến không gian nhớ

Từ giải thuật Gotoh ta có nhận xét sau:

ƒ Các giá trị của các phần tử trong dòng thứ i của ma trận S và D chỉ phụ

thuộc vào giá trị của các phần tử trong dòng thứ i-1 và dòng thứ i.

ƒ Giá trị của các phần tử của dòng thứ i của ma trận I chỉ phụ thuộc vào các phần tử trước đó cũng của dòng này.

Từ 2 nhận xét trên ta thấy rằng để tính giá trị S(m,n) chúng ta khơng cần phải lưu trữ toàn bộ 3 ma trận như giải thuật Gotoh. Ta có thể giảm khơng gian lưu trữ khi thực thi giải thuật xuống cịn θ(n) thơng qua, kỹ thuật đổi chỗ(swap). Bằng kỹ thuật này ta chỉ cần một không gian nhớ n phần tử, lưu trữ giá trị các phần tử của dòng thứ i-1 khi bắt đầu tính giá trị các phần tử của dịng thứ i. Giá trị tính được của dịng thứ i sẽ lại được ghi đè lên không gian nhớ này. Như vậy lúc nào ta cũng chỉ cần θ(n) không gian

nhớ. Tuy nhiên giải thuật chỉ tính giá trị của S(m,n), khơng lưu vết và tìm kết quả.

Việc tìm kết quả alignment dựa trên giải thuật này sẽ được trình bày trong chương 4. Gọi SS và DD là 2 mảng có chiều dài n sẽ dùng để lưu trữ giá trị của các phần tử thuộc dòng thứ i của các ma trận S và D, e là giá trị của I . Sau vòng lặp thứ i, vector

SS sẽ lưu trữ giá trị của hàng thứ i của ma trận S. Tương tự như vậy sau vòng lặp thứ i

của giải thuật, DD sẽ lưu trữ giá trị của hàng thứ i của ma trận D.

Giải thuật: vectors SS[0..n] , DD[0..n] Linear(S1,S2,SS,DD,-q) Procedure Linear(S1,S2,SS,DD,p) Var e, c, s, t SS(0) ← 0

for j ← 1 to n do/*Khởi tạo*/

{ SS( j) ← −(q + r*j) DD( j) ← SS(j) − q } tp for i ← 1 to m do/*Tính SS, DD*/ { s ← SS(0) SS(0) ← c←tt−r /∗ −(q + r*i)*/ e← SS(0) − q for j← 1 to n do { e← max {e, c −q} − r DD( j) ← max {DD( j) , SS( j) − q} − r c← max {DD( j) , e, s + σ( [ ], [ ])S i S j1 2 }

Một phần của tài liệu Luận van cao học tin (Trang 31)

Tải bản đầy đủ (PDF)

(100 trang)