Rút gọn của hai “AND join gateways” nối với nhau

Một phần của tài liệu Khung cộng tác đa dụng trong môi trường tính toán lưới (Trang 85 - 92)

Hình 3-11:Rút gọn của hai AND gateways khác nhau nối với nhau (AND fork nối với AND join).

Một cách tiếp cận khác trong việc dịch ngôn ngữ là dựa trên kỹ thuật chuyển đồ thị phụ thuộc sang tiến trình có cấu trúc như đã được giới thiệu trong [31] và sau đó được áp dụng để dịch từ BPMN sang BPEL bởi Blox [18].

3.2.2 Các hạn chế tồn tại

Từ tổng quan về các kỹ thuật chuyển đổi từ ngôn ngữ hướng đồ thị sang ngôn ngữ có cấu trúc trình bày ở trên, có thể thấy rằng chúng vẫn còn tồn tại hai vấn đề sau:

- Thứ nhất: làm thế nào để phát hiện được các loại mẫu khác nhau trong tiến trình biểu diễn bằng ngôn ngữ nguồn (là ngôn ngữ hướng đồ thị như BPMN). Hầu hết các kỹ thuật chuyển đổi chỉ tập trung vào việc làm thế nào để chuyển đổi các mẫu từ tiến trình nguồn sang tiến trình đích, nhưng lại không hề đề cập đến vấn đề làm thế nào để phát hiện và tách được các mẫu ra khỏi tiến trình nguồn, để từ đó mới có thể chuyển đổi mẫu đó sang tiến trình đích. Theo nghiên cứu của luận án, vấn đề này cũng không hề đơn giản, đòi hỏi phải có những kỹ thuật phù hợp. Trong phần sau, luận án sẽ đề xuất giải thuật nhằm giải quyết một phần vấn đề này, đó là làm thế nào để phát hiện và tách ra được các mẫu có cấu trúc đầy đủ (well-structured patterns) đã được trình bày ở phần trên.

86

- Thứ hai: Tính đúng đắn của đa số các kỹ thuật chuyển đổi đã được đề xuất vẫn chưa được chứng minh đầy đủ. Tính đúng đắn của một kỹ thuật dịch, ở đây với nghĩa là ngữ nghĩa của tiến trình biểu diễn bằng ngôn ngữ đích phải giống với ngữ nghĩa của tiến trình biểu diễn bằng ngôn ngữ nguồn. Điều đó có nghĩa là một kỹ thuật dịch đúng sẽ bảo toàn ngữ nghĩa của tiến trình nguồn. Thiếu các chứng minh về tính đúng đắn sẽ làm giảm mức độ tin cậy và khả năng áp dụng các kỹ thuật này, vì chúng ta vẫn chưa chắc chắn là chúng có đúng không. Giải quyết vấn đề này nằm ngoài khuôn khổ của luận án. Đây cũng là hướng nghiên cứu mới có triển vọng.

3.2.3 Giải thuật phát hiện mẫu có cấu trúc đầy đủ

A. Một số khái niệm và tính chất cơ bản của đồ thị

Định nghĩa 3-3: Một đồ thị G được gọi là đồ thị luồng điều khiển (control flow graph) nếu nó chứa hai nút phân biệt start và end sao cho mọi nút khác của G đều nằm trên một đường dẫn (path) nào đó từ nút start đến nút end. Nút start không có nút đứng trước (predecessors) và nút end không có nút đứng sau (successors).

Tất cả các đồ thị mà chúng ta sẽ xét trong phần này đều là đồ thị luồng điều khiển, nên từ nay về sau tên này sẽ được gọi ngắn gọn là đồ thị.

Định nghĩa 3-4: Cho một đồ thị G có chứa hai nút (hoặc hai cạnh) x và y. Ta nói rằng x chế ngự (dominate) y nếu mọi đường dẫn từ nút start đến y đều chứa x. Khi đó ta cũng nói x là phần tử chế ngự (dominator) của y.

Ta nói rằng x chế ngự sau (post-dominate) y nếu mọi đường dẫn từ y đến nút end đều chứa x. Khi đó ta cũng nói x là phần tử chế ngự sau (post-dominator) của y.

Ta nói rằng x là phần tử chế ngự liền kề (immediate dominator) của y nếu x chế ngự y và mọi phần tử chế ngự khác của y cũng sẽ chế ngự x.

Ta nói rằng x là phần tử chế ngự sau liền kề (immediate post-dominator) của y nếu x chế ngự sau y và mọi phần tử chế ngự sau khác của y cũng sẽ chế ngự sau x.

Theo quy ước, một nút không chế ngự chính nó, cũng không chế ngự sau chính nó.

Định lý 3-1: [61] Ngoại trừ nút start, mỗi nút của đồ thị có đúng một nút chế ngự liền kề.

Ngoại trừ nút end, mỗi nút của đồ thị có đúng một nút chế ngự sau liền kề.

Định nghĩa 3-5: Hai cạnh (hay hai nút) u, v của đồ thị G được gọi là một cặp (couple), kí hiệu là couple(u, v), nếu u chế ngự v và v chế ngự sau u. Một couple(u, v) được gọi là một cặp liền kề (immediate couple) nếu u là phần tử chế ngự liền kề của v và v là phần tử chế ngự sau liền kề của u.

Định lý 3-2: Hai cạnh u và v của một đồ thị G là một cặp couple(u, v) nếu và chỉ nếu tồn tại ít nhất một đường dẫn từ nút start đến nút end có chứa cả u và v, và mọi đường dẫn khác từ start đến end thì hoặc chứa cả u và v, hoặc không chứa cả u và v.

87

Chứng minh:

Nếu (u, v) là một cặp, thì u là phần tử chế ngự của v, và v là phần tử chế ngự sau của u. Theo định nghĩa về chế ngự và chế ngự sau ở trên, mọi đường dẫn từ start đến v đều chứa u, mọi đường dẫn từ u đến end đều chứa v. Do đó, mọi đường dẫn từ start đến end mà chứa u thì cũng chứa v và ngược lại. Và hiển nhiên phải tồn tại ít nhất một đường dẫn như vậy. Còn với mọi đường dẫn khác mà không có u, thì nó cũng không có v, bởi vì nếu không thì nó phải có u.

Định nghĩa 3-6: Hai cạnh (hoặc nút) u và v của đồ thị G tạo thành biên của một vùng

(a boundary of a region) nếu chúng là một cặp liền kề. u và v lần lượt được gọi là điểm vào

(entry point) và điểm ra (exit point) của vùng.

Định nghĩa 3-7: Cho đồ thị G. Một cạnh (hay một nút) e của G được gọi là nằm trong biên của một vùng (u, v)(hay nói ngắn gọn là nằm trong vùng) nếu:

- u là phần tử chế ngự của e và,

- v là phần tử chế ngự sau của e.

Khi một cạnh nằm trong một vùng có nghĩa là cạnh đó nằm giữa điểm vào và điểm ra của vùng đó.

Định nghĩa 3-8: Một tập các cạnh (hay các đỉnh) (e1, e2, ..., ek) của một đồ thị G tạo thành một vùng (region), ký hiệu reg(e1, e2, ..., ek), nếu (e1, ek) là biên của vùng và mọi cạnh (hay đỉnh) khác đều nằm trong biên của vùng. (adsbygoogle = window.adsbygoogle || []).push({});

Trong các tiến trình BPMN, mỗi thành phần task hay event có đúng một cạnh vào (incoming edge) và một cạnh ra (outgoing edge). Do đó, mỗi cặp cạnh của một thành phần

task hay event sẽ tạo thành một vùng và ta gọi nó là vùng tầm thường vì nó chỉ có biên mà không có cạnh nào khác nằm bên trong vùng.

Định lý 3-3: Các mẫu trong số ba mẫu Flow, Pick và Switch đều tạo thành một vùng.

Chứng minh:

Ở đây chúng ta chỉ cần chứng mình cho mẫu Flow. Các chứng minh cho các mẫu khác hoàn toàn tương tự.

Giả sử ta có mẫu Flow F(e1, e2, ..., ek) của đồ thị G. Theo định nghĩa của mẫu Flow, e1

cạnh vào (incoming edge) duy nhất và ekcạnh ra (outgoing edge) duy nhất của F. Hơn nữa, tồn tại ít nhất hai đường dẫn từ e1 đến ek, và mọi ei (2 i k-1) đều chỉ nằm trên một trong số các đường dẫn. Do đó, e1 là phần tử chế ngự liền kề của ek, và ek là phần tử chế ngự

sau liền kề của e1, và mọi cạnh khác đều nằm giữa e1ek. Điều này cũng có nghĩa F là một vùng. □

Định lý 3-4: Mẫu Sequence là một dãy các vùng. Điều này có nghĩa là một mẫu Sequence S(e1, e2, ..., ek) có thể được tách ra thành p vùng tuần tự (sequential regions): r1(e1,

88

e2, ..., ei1), r2(ei1, ..., ei2), ..., rp(ei(p-1), ..., ek), sao cho ∀ i=1..(p-1), cạnh ra của ri cũng là cạnh vào của ri+1.

Chứng minh:

Kết quả trên tương đối hiển nhiên, bởi vì mẫu Sequence bao gồm các task tuần tự (cũng là các vùng tầm thường) và các mẫu khác (chính là các vùng, theo Định lý 3-3).

Định lý 3-5: [49] Nếu R1R2 là hai vùng của đồ thị G, chúng phải thỏa mãn một trong hai điều kiện sau:

- Hai tập các nút trong R1 và R2 là không giao nhau, hoặc

- R1 nằm trong R2 (nghĩa là tất cả các cạnh của R1 đều nằm trong R2) hoặc ngược lại.

Từ Định lý 3-5 có thể dễ dàng suy ra hai hệ quả sau:

- Hệ quả 1: Tất cả các vùng của một đồ thị có thể được tổ chức thành một cây. - Hệ quả 2: Vùng R1(e1, e2, ..., ek) nằm trong vùng R2 nếu e1 và ek nằm trong R2,

hoặc R1 nằm trong vùng R3 khác, mà R3lại nằm trong vùng R2.

Định nghĩa 3-9: Một danh sách các vùng R1, R2,..., Rk được gọi là khả tuần tự

(sequenceable) nếu chúng có thể được nhóm lại trong một mẫu Sequence. Điều này xảy ra khi các vùng trên thỏa mãn điều kiện: ∀ i=1..(k-1), cạnh ra (outgoing edge) của Ri cũng là

cạnh vào (incoming edge) của Ri+1.

Định lý 3-6: Mẫu While tạo thành một chu trình (circle).

Chứng minh:

Tính đúng đắn của định lý này khá hiển nhiên, như đã biểu thị trong Hình 3-8 biểu diễn mẫu này. Do mẫu While có thể được lồng trong một mẫu While khác, nên chu trình của mẫu này cũng có tính lồng nhau.

Như chúng ta có thể thấy từ các hình từ 3-5 đến 3-8 về các mẫu, giữa vùng và chu trình có một sự tương đồng: chúng đều có một cạnh vào và một cạnh ra. Hơn nữa, một danh sách có cả vùng và chu trình cũng có thể khả tuần tự như Định nghĩa 3-9. Do đó từ bây giờ, chúng ta sẽ gọi một chu trình là vùng chu trình (circle region). Còn vùng thông thường sẽ được gọi là vùng bất chu trình (non-circle region) để phân biệt nó với vùng chu trình. Điều này cũng có nghĩa là từ nay, khi chúng ta đề cập đến vùng, có thể là vùng chu trình hoặc

vùng bất chu trình.

Định nghĩa 3-10: Cho đồ thị luồng G=(V, E), với V và E tương ứng là tập các đỉnh và tập các cạnh của G. Một đồ thị đảo của G (reversed graph) của G, ký hiệu G-=(V-, E-), là một đồ thị thỏa mãn các điều kiện: V-=V, và ∀ (x, y) ∈ E-, thì (y, x) ∈ E.

Định lý 3-7: Cho đồ thị G và hai đỉnh x và y trong G. Nếu x là đỉnh chế ngự của y, thì x là đỉnh chế ngự sau của y trong đồ thị đảo G và ngược lại.

89 (adsbygoogle = window.adsbygoogle || []).push({});

Chứng minh:

Chúng ta sẽ chỉ ra rằng nếu x là đỉnh chế ngự của y trong G, thì x là đỉnh chế ngự sau của y trong đồ thị đảo G-. Chú ý rằng đỉnh start và đỉnh end trong G tương ứng trở thành các đỉnh endstart trong G-. Nếu x là nút chế ngự của y trong G, nó có nghĩa là x đứng trước y trên mọi đường dẫn từ nút start đến y. Nó cũng có nghĩa là x đứng sau y trên mọi đường dẫn từ y đến nút end trong G-. Do đó, x là nút chế ngự sau của y trong G-. Chứng minh tương tự cho chiều ngược lại.

Hệ quả trực tiếp của Định lý 3-7 là lời giải cho vấn đề tìm kiếm phần tử chế ngự sau có thể dễ dàng được suy ra từ lời giải cho vấn đề tìm kiếm phần tử chế ngự.

Định nghĩa 3-11: Nút bán chế ngự (Semidominator) [57]: cho trước một nút w start

trong một đồ thị G. Một nút bán chế ngự (semidominator) của w, ký hiệu sdom(w), là một nút trong G được định nghĩa như sau:

sdom(w)=min{v | ∃ một đường dẫn v=v0,v1,...,vk=w sao cho v < w và vi > w với 1  i  k-1};

B. Giải thuật phát hiện các mẫu có cấu trúc đầy đủ

Từ các kết quả của hai Định lý 3-3 và 3-4, vấn đề phát hiện ba mẫu có cấu trúc đầy đủ là Flow, Pick và Switch có thể được suy ra từ vấn đề tìm kiếm các vùng, là một vấn đề đã được nghiên cứu khá đầy đủ trước đây với nhiều giải thuật [57] [5] [49] [91]. Trong số các giải thuật này, luận án lựa chọn giải thuật trong [57] cho nghiên cứu này, bởi sự đơn giản và hiệu quả của nó so với các giải thuật khác.

Sau khi phát hiện được các vùng, chúng ta còn cần phải xác định kiểu mẫu của vùng (một trong số ba mẫu có cấu trúc đầy đủ đã đề cập trước đây). Từ kết quả của Định lý 3-6, vấn đề tìm kiếm mẫu While có thể được suy ra từ vấn đề tìm kiếm các chu trình, một vấn đề đã được nghiên cứu và giải quyết trước đây với một số giải thuật như trong [90] [48]. Ý tưởng chính của các giải thuật này sẽ được luận án trình bày kỹ hơn ở phần sau.

Mẫu Sequence sẽ được xây dựng từ các vùng và chu trình đã được phát hiện. Còn vấn đề xác định kiểu mẫu của vùng lại khá dễ giải quyết, bởi vì mỗi mẫu lại có những đặc trưng riêng dễ phân biệt như sau:

- Mẫu Flow: Cạnh vào của mẫu này phải là cạnh vào một fork parallel gateway (là cấu trúc với một cạnh vào và hai hoặc nhiều hơn cạnh ra) và cạnh ra của nó phải là cạnh ra của một join parallel gateway (là cấu trúc với hai hay nhiều hơn cạnh vào và một cạnh ra).

- Mẫu Pick: Cạnh vào của mẫu này phải là cạnh vào của một fork exclusive gateway, và cạnh ra của nó phải là cạnh ra của một join exclusive gateway.

- Mẫu Switch: Tương tự như mẫu Pick, cạnh ra của mẫu này phải là cạnh ra của một

join exclusive gateway, nhưng cạnh vào của nó lại là cạnh vào của một fork event- based gateway.

90

- Mẫu While: Cạnh vào của mẫu này phải là một cạnh vào trong số hai cạnh vào của một join exclusive gateway và cạnh ra của nó phải là một cạnh ra trong số hai cạnh ra của một fork exclusive gateway (cạnh ra kia sẽ quay lại join exclusive gateway

để thành vòng lặp).

B.1 Giải thuật tìm kiếm các vùng

Như đã nói ở trên, giải thuật mà được chọn để tìm kiếm các vùng là của Lengauer và Tarjan [57]. Ý tưởng cơ bản của giải thuật là đưa bài toán tìm nút chế ngự liền kề của một nút cho trước về bài toán tìm nút bán chế ngự của nút đó (xem lại Định nghĩa 3-11 về nút bán chế ngự). Theo phân tích trong [57], giải thuật này có độ phức tạp là O(m.logn) (với m và n tương ứng là số cạnh và số đỉnh của đồ thị), tốt hơn nhiều so với một giải thuật khác được đề xuất trong [77] với độ phức tạp là O(m.n).

Giải thuật 3-1: [57] Giải thuật này gồm có ba bước chính:

1. Tiến hành tìm kiếm theo chiều sâu (depth first search) bắt đầu từ nút start của đồ thị. Trong quá trình tìm kiếm, đánh số các nút lần lượt theo thứ tự được thăm.

2. Tìm các nút bán chế ngự của tất cả các nút của đồ thị. 3. Tìm nút chế ngự liền kề cho từng nút của đồ thị.

Như chúng ta đã biết, một phép tìm kiếm theo chiều sâu của đồ thị bắt đầu từ một nút r

sẽ tạo ra một cây khung (spanning tree) có gốc tại r và chứa tất cả các đỉnh của đồ thị với số thứ tự được thăm theo thứ tự trước. Do đó, sau phép tìm kiếm, khi chúng ta so sánh hai nút của đồ thị, giả sử như u<v, thì thực ra là chúng ta so sánh thứ tự được thăm của các nút đó trong cây khung đã được tạo ra.

B.2 Giải thuật phát hiện chu trình

Phần này sẽ tóm tắt lại các tư tưởng chính của một số giải thuật đã được đề xuất trước đây nhằm phát hiện các chu trình trong đồ thị có hướng. Chi tiết của các giải thuật này có thể được tham khảo trong [90][48].

Cho trước đồ thị có hướng G=(V,E) với V và E tương ứng là tập các đỉnh và tập các cạnh của G. Một chu trình (circle) (cũng còn gọi là chu trình cơ bản (elementary circuit)) là một đường dẫn (path) (v1,v2,…,vk-1,vk), sao cho v1=vk, và với mọi i=1..(k-1), (vi,vi+1) E. Để có một giải thuật hiệu quả cho việc tìm kiếm tất cả các chu trình, hai vấn đề sau đây cần được giải quyết:

1. Thứ nhất: làm thế nào để tìm được toàn bộ các chu trình.

2. Thứ hai: làm thế nào để tránh được một cách tối đa các thao tác lặp lại không cần thiết trong khi tìm kiếm. Có một số kiểu thao tác lặp không cần thiết như thăm các cạnh hay các nút nhiều lần, hay thậm chí thăm cả chu trình nhiều lần.

Để giải quyết vấn đề thứ nhất, tất cả các đường dẫn mà có thể chứa các chu trình cần phải được kiểm tra. Tuy nhiên, yêu cầu này lại dễ gây ra vấn đề thứ hai, nếu không có những biện pháp thích hợp. (adsbygoogle = window.adsbygoogle || []).push({});

91

Đa số các giải thuật tìm kiếm chu trình đều sử dụng chiến lược tìm theo chiều sâu

(depth-first search (DFS)), bởi vì tính chất chạy theo đường dẫn (path-following) của chiến lược này giúp cho việc kiểm tra sự tồn tại của chu trình, cũng như xác định tất cả các thành phần (cạnh và nút) trong các chu trình tìm được là tương đối dễ dàng. Một ưu điểm nữa của chiến lược này là mỗi phép tìm kiếm, nó chỉ thăm mỗi cạnh đúng một lần. Tuy nhiên, chiến

Một phần của tài liệu Khung cộng tác đa dụng trong môi trường tính toán lưới (Trang 85 - 92)