CHƯƠNG 2: MÔ HÌNH KẾ HOẠCH VÀ KHUNG CỘNG TÁC ĐA DỤNG
2.1.3 Phụ thuộc khả th
Trong phần này, khái niệm về sự phụ thuộc khả thi (feasible dependence) giữa các hoạt động sẽ được đưa ra. Khái niệm này chính là cơ sở cho quá trình lập kế hoạch.
Định nghĩa 2-7: Phụ thuộc khả thi: Cho hai hoạt động A và B. Ta nói B phụ thuộc khả thi vào A (hay A xác định khả thi B), nếu sự khả thi của B có thể bị ảnh hưởng từ sự khả thi của A. Sự ảnh hưởng này có hai mức độ và dẫn đến hai mức phụ thuộc như sau:
- Phụ thuộc hoàn toàn: với mức này thì nếu A khả thi thì B cũng khả thi. Ký hiệu của phụ thuộc hoàn toàn:
A → B;
- Phụ thuộc bộ phận (hay còn gọi là phụ thuộc không khả thi): với mức này thì nếu A khả thi thì B lại chưa chắc đã khả thi, nhưng nếu A không khả thi thì B cũng không khả thi. Ký hiệu của phụ thuộc bộ phận:
A ⇀ B;
Ví dụ 2-6: Xét hai hoạt động Sinh-viên-học(Sinh viên, Môn, Kết quả) (là hoạt động kiểu Atomic) và Học( , Môn, Kết quả) (là hoạt động kiểu AbstractS). Ta thấy nếu Sinh-viên-học là khả thi, tức là tồn tại ít nhất một sinh viên s và một môn học m và một kết quả k, sao cho s học môn m có kết quả k. Như vậy, hoạt động Học cũng khả thi. Do đó Sinh-viên-học →
Học.
Ví dụ 2-7: Xét hai hoạt động Tìm-kiếm(Sinh viên, Thư viện, Tài liệu) và Học(Sinh viên,
Tài liệu, Kiến thức). Hai hoạt động này có quan hệ là Objective(Tìm-kiếm) = Tool(Học) = Tài liệu. Nên dễ thấy nếu như hoạt động Tìm-kiếm mà không khả thi, tức là sinh viên không
tìm được tài liệu trên thư viện, thì hoạt động Học cũng không khả thi, vì sinh viên không có tài liệu để học. Do đó Tìm-kiếm ⇀ Học.
Ví dụ 2–8: Hoạt động Du-lịch-bộ-hành(S=Con người, T=Đi bộ, O=Vòng quanh thế
giới) biểu diễn hành động một người muốn đi bộ vòng quanh thế giới. Hoạt động Du- lịch(S=Con người, O=Vòng quanh thế giới) biểu diễn hành động một người muốn đi du lịch
vòng quanh thế giới nhưng chưa biết dùng phương tiện gì. Ta dễ dàng suy ra, nếu Du-lịch-
bộ-hành là khả thi, tức là đã tồn tại một cá nhân có thể đi bộ vòng quanh thế giới, thì Du- lịch cũng khả thi, ít nhất là với phương tiện Đi bộ. Do đó, Du-lịch-bộ-hành(S=Con người, T=Đi bộ, O=Vòng quanh thế giới) → Du-lịch(S=Con người, O=Vòng quanh thế giới).
Đây là các tính chất áp dụng cho cả hai loại phụ thuộc khả thi là phụ thuộc hoàn toàn và phụ thuộc bộ phận (hay phụ thuộc không khả thi). Do vậy, để trình bày được ngắn gọn, kí hiệu phụ thuộc khả thi chỉ dùng một loại là phụ thuộc hoàn toàn, nhưng được áp dụng cho cả hai loại phụ thuộc bộ phận.
- Tính phản xạ: với mọi hoạt động A thì ta có A → A.
Chứng minh: Dựa vào định nghĩa của cả hai loại phụ thuộc khả thi ở trên ta dễ
dàng suy ra tính khả thi hoặc không khả thi của một hoạt động phụ thuộc vào chính nó.
- Tính bất đối xứng: với hai hoạt động A và B cho trước, nếu A → B, thì chưa chắc
B → A.
Chứng minh: Tính chất này có thể được chứng minh thông qua một ví dụ về phụ
thuộc khả thi là Atomic(S,T,O) → AbstractT(S,O), nhưng không thể chắc chắn được điều ngược lại là AbstractT(S,O) → Atomic(S,T,O) (xem thêm về một số dạng phụ thuộc khả thi ở phần sau).
- Tính bắc cầu: với ba hoạt động A, B, C. Nếu A → B và B → C thì A → C. Chứng minh: Ta sẽ chứng minh cho hai trường hợp:
o Các phụ thuộc thuộc này là phụ thuộc hoàn toàn: khi đó, nếu A khả thi thì từ A → B suy ra B cũng khả thi. Sau đó từ B → C thì C cũng khả thi. Suy ra A → C;
o Các phụ thuộc là phụ thuộc bộ phận (phụ thuộc không khả thi): khi đó, nếu A không khả thi thì từ A ⇀ B suy ra B cũng không khả thi. Sau đó từ B ⇀ C thì C cũng không khả thi. Suy ra A ⇀ C.
Các tính chất riêng của phụ thuộc khả thi
Đây là các tính chất áp dụng riêng cho từng loại phụ thuộc khả thi, nên ký hiệu cũng dùng đúng cho từng loại phụ thuộc khả thi.
1. Atomic(S, T, O) → AbstractT(S, O);
Chứng minh: Nếu Atomic(S, T, O) khả thi thì theo định nghĩa về khả thi, ∃ s ∈ S, t
∈ T và o ∈ O sao cho từ s và t có thể tạo ra o. Do đó hiển nhiên ta cũng có AbstractT(S, O) cũng khả thi vì ít nhất đã tồn tại T ∈ Atomic(S, T, O) mà Atomic(S, T, O) khả thi.
2. Atomic(S, T, O) → AbstractS (T, O);
3. AbstractT (S, O) → Abstract(O);
4. AbstractS (T, O) → Abstract(O);
Chứng minh: Chứng minh cho các dạng phụ thuộc 2, 3 và 4 tương tự như ở dạng 1.
5. Cho hai hoạt động A và B. Nếu A ↔ B (A và B là tương đương về chức năng) thì A → B và B → A;
Chứng minh: Do A và B là tương đương về chức năng, nên theo định nghĩa này
chúng có chung đầu vào (S và T) và chung đầu ra (O). Do đó, hiển nhiên là nếu A khả thi thì B cũng khả thi và ngược lại.
6. Nếu C({A1, A2, ..., An}, R) là hoạt động tập thể chỉnh thì: A1 ⇀C và An ⇀C;
Chứng minh: Do A1, An là các hoạt động con đóng vai trò lần lượt là đầu vào và đầu ra của C, nên nếu một trong hai hoạt động này mà không khả thi thì C cũng không
thể khả thi. Nhận xét : Thực ra tính chất này không chỉ đúng với A1 và An, mà có thể mở rộng cho các hoạt động Ak khác (với 2 ≤ k ≤ (n - 1)) sao cho path(A1,Ak) hoặc path(Ak, An) là đường dẫn duy nhất.
7. Cho C({A1, A2, ..., An}, R) là một hoạt động tập thể chỉnh. Khi đó ∃ một hoạt động đơn A(S, T, O) sao cho C → A.
Chứng minh: Ta chọn hoạt động A(S, T, O) sao cho subject(A1) = S, tool(A1) = T và objective(An) = O. Vì C là hoạt động chỉnh, nên với cách chọn A như trên, ta sẽ có
hai hoạt động có đầu vào và đầu ra giống nhau. Do đó, nếu C khả thi thì A cũng khả thi.
8. Cho hai hoạt động A1(S1, T1, O1) và A2(S2, T2, O2).
Nếu ∃ quan hệ in-out(A1, A2) thì A1 ⇀ A2;
Chứng minh: Vì ∃ quan hệ in-out(A1, A2), tức là đầu vào của A2 cũng là đầu ra của
A1, nên nếu A1 không khả thi thì cũng không tạo ra đầu ra của A1, tức là A2 cũng không khả thi.
9. Cho C({A1, A2, ..., An}, R) là một hoạt động tập thể chỉnh. C được gọi là hoạt động hợp lệ (valid) nếu nó phụ thuộc khả thi vào các hoạt động con của nó, tức là: A1, A2, ..., An → C. Còn trái lại ta nói C là không hợp lệ. Với hoạt động tập thể không hợp lệ, thì mặc dù tất cả các hoạt động con của nó đã khả thi, nhưng vẫn chưa xác định được bản thân hoạt động đó có khả thi không. Như vậy, hoạt động tập thể này không có ý nghĩa thực tiễn trong quá trình lập kế hoạch, nên sau này chúng ta chỉ quan tâm đến các hoạt động tập thể hợp lệ.
Một số hệ quả:
- Hệ quả 1: Một hoạt động tập thể là không khả thi nếu và chỉ nếu tồn tại ít nhất một hoạt động con của nó không khả thi.
Chứng minh: tính chất này là được suy trực tiếp từ tính chất 6 và tính chất 9 của
phụ thuộc khả thi. Nếu một hoạt động tập thể là không khả thi thì trong nó phải tồn tại ít nhất một hoạt động con không khả thi, vì nếu không, khi tất cả các hoạt động con của nó đều khả thi thì theo tính chất 9 hoạt động này phải khả thi, trái với giả thiết ban đầu. Trong trường hợp ngược lại, nếu hoạt động tập thể có chứa ít nhất một hoạt động con không khả thi thì theo tính chất 6, hoạt động này cũng không khả thi. Suy ra điều phải chứng minh.
- Hệ quả 2: Một hoạt động tập thể là khả thi nếu và chỉ nếu tất cả các hoạt động con của nó đều khả thi.
Chứng minh: tính chất này cũng là được suy ra từ tính chất 6 và tính chất 9 của phụ
thuộc khả thi. Nếu hoạt động tập thể là khả thi thì tất cả các hoạt động con của nó phải khả thi, vì trái lại, nếu tồn tại ít nhất một hoạt động con không khả thi thì theo tính chất 6 hoạt động tập thể này cũng không khả thi, trái với giả thiết ban đầu. Trong trường hợp ngược lại, nếu tất cả các hoạt động con của hoạt động tập thể là khả thi thì theo tính chất 9 hoạt động tập thể này cũng khả thi. Suy ra điều phải chứng minh.
- Hệ quả 3: Cho trước hai hoạt động A(S, T, O) và A’(S’, T’, O’). Nếu O = O’ và S
⊆ S’ và T ⊆ T’ thì A → A’;
Chứng minh: Nếu A khả thi, thì theo định nghĩa khả thi, sao cho từ s và t có thể
tạo ra o. Mà theo giả thiết O = O’ và S ⊆ S’ và T ⊆ T’, nên , tức là A’ cũng khả thi. Nhận xét: ta cũng dễ thấy rằng tính chất này chính là sự khái quát cho các tính chất 1, 2, 3 và 4 ở trên.
2.1.4 Kế hoạch
Khái niệm cơ bản
Định nghĩa 2-8. Kế hoạch P, ký hiệu P(LA, F), là một cấu trúc gồm hai thành phần:
• LA = {A1, A2,...,An}: tập các hoạt động, trong đó có một hoạt động đóng vai trò là hoạt động gốc, là hoạt động đầu tiên được tạo ra của kế hoạch và cũng bắt đầu từ hoạt động này, các hoạt động khác cũng lần lượt được sinh ra. Sau này ta quy ước chọn A1 làm hoạt động gốc;
• F = {Ai → Aj | Ai, Aj ∈ LA}: tập các phụ thuộc khả thi (PTKT). Phụ thuộc khả thi sẽ đóng vai trò sản sinh ra các hoạt động mới. Từ hoạt động Aj sẽ sinh ra hoạt động Ai sao cho Ai → Aj; Tương tự như cấu trúc cây, ta gọi nút Aj là nút cha và nút Ai là nút con. Tuy nhiên, khác với cấu trúc cây, một nút con trong cấu trúc kế hoạch có thể có nhiều nút cha.
Chú ý: mặc dù ở tập F ta sử dụng ký hiệu → cho phụ thuộc khả thi hoàn toàn, nhưng ở
đây là mang ý nghĩa phụ thuộc khả thi nói chung, tức là có thể là phụ thuộc khả thi hoàn toàn hoặc bộ phận. Nên ta gọi F là tập phụ thuộc khả thi (PTKT). Đồng thời sau này, trong trường hợp thông thường không cần có sự phân biệt rõ giữa hai loại phụ thuộc khả thi, ký hiệu này cũng sẽ được dùng để biểu diễn phụ thuộc khả thi nói chung.
Hình 2-13 biểu diễn cho một kế hoạch, trong đó bao gồm các nút biểu diễn cho các hoạt động (bao gồm cả hoạt động đơn và hoạt động tập thể) và ký hiệu → biểu diễn cho các phụ thuộc khả thi.
nút VÀ nút HOẶC
Hình 2-21:Biểu diễn cho một kế hoạch.
Do có hai loại phụ thuộc khả thi là phụ thuộc hoàn toàn (phụ thuộc thực sự khả thi) và phụ thuộc bộ phận (phụ thuộc không khả thi) tương đối độc lập, nên trong một kế hoạch cũng thường được biểu diễn ở hai dạng:
• Kế hoạch khả thi: là kế hoạch chỉ chứa các phụ thuộc hoàn toàn, như được biểu diễn ở Hình 2-13. Từ hệ quả 2 của phụ thuộc khả thi (một hoạt động tập thể là khả thi khi và chỉ khi tất cả các hoạt động con của nó là khả thi), để nhấn mạnh tính khả thi của một nút biểu diễn một hoạt động tập thể phụ thuộc vào tất cả các nút con của nó, ta thêm một ký hiệu ♦ (quả trám đậm) vào nút đó (biểu diễn đây là một nút VÀ (and)). Còn các nút không có ký hiệu này sẽ là nút HOẶC (or) (là nút biểu diễn các hoạt động đơn). Như vậy, kế hoạch khả thi có thể được biểu diễn bằng một đồ thị VÀ/HOẶC, như được biểu diễn trên hình 2-14.
Hình 2-22: Biểu diễn kế hoạch khả thi bằng đồ thị VÀ/HOẶC.
• Kế hoạch không khả thi: là kế hoạch chỉ chứa các phụ thuộc bộ phận (phụ thuộc không khả thi), như được biểu diễn ở Hình 2-15. Cũng từ hệ quả 1 của phụ thuộc khả thi (một hoạt động tập thể là không khả thi khi và chỉ khi tồn tại ít nhất một hoạt động con của nó không khả thi), kế hoạch không khả thi cũng có thể được biểu diễn bởi một đồ thị VÀ/HOẶC. Trong đó các nút VÀ biểu diễn các hoạt động đơn, và các nút HOẶC biểu diễn các hoạt động tập thể (xem hình 2-16).
Hình 2-24: Biểu diễn kế hoạch không khả thi bằng đồ thị VÀ/HOẶC.
Ví dụ 2–9: Xét kế hoạch P cho bài toán sắp xếp một dãy số L. Mục đích của bài toán là xây dựng một modul cho phép sắp xếp một dãy L gồm N số theo thứ tự tăng dần. Quá trình xây dựng kế hoạch P(LA, F) là quá trình cập nhật dần tập hoạt động LA và tập phụ thuộc khả thi F như sau:
1. LA = Sort(, L, Ls); F =∅; Kế hoạch P ban đầu chỉ có một hoạt động Sort(, L, Ls) với mục đích xây dựng hoạt động Sort sao cho chuyển dãy đầu vào L thành dãy đầu ra được sắp xếp Ls, nhưng hiện vẫn chưa biết sẽ dùng chủ thể (ở đây là loại modul nào).
2. Do có các giải thuật sắp xếp khác nhau như SelectionSort, MergeSort, nên áp dụng dạng PTKT 2 (Atomic(S,T,O → AbstractS(T,O)) ta bổ sung thêm các hoạt động SelectionSort(SelectionModul, L, LS) và MergeSort(MergeModul, L, Ls) và hai PTKT SelectionSort(SelectionModul, L, LS) → Sort(, L, LS) và MergeSort(MergeModul, L, LS) → Sort(, L, LS). Tức là lúc này ta sẽ có:
LA = {Sort(, L, Ls), SelectionSort(SelectionModul, L, LS), MergeSort(MergeModul, L, LS);
F = {SelectionSort(SelectionModul, L, LS) → Sort(, L, LS), MergeSort(MergeModul, L, LS) → Sort(, L, LS);
3. Quá trình xây dựng cứ tiếp tục như vậy cho đến khi có được một kế hoạch như được biểu diễn trong Hình 2-17.
Hình 2-25: Kế hoạch cho việc xây dựng giải thuật sắp xếp.
Ví dụ 2-10: Được phát triển từ ví dụ 2-9, nhưng trong kế hoạch ở đây hướng đến việc xác định tính khả thi của việc cài đặt dịch vụ lưới thực hiện việc sắp xếp này. Hình 2-18 biểu diễn cho kế hoạch này. Có thể nhận thấy, kế hoạch này khá giống với kế hoạch của ví dụ 2-9, vì hai kế hoạch này có mục tiêu tương tự nhau là cần đưa ra một cài đặt cho giải thuật sắp xếp. Tuy nhiên, kế hoạch trong ví dụ này cụ thể hơn so với ví dụ 2-9, với hoạt động ban đầu Sort(GS, L, Ls) nhắm vào việc cài đặt một dịch vụ lưới GS, không còn mơ hồ, chưa được xác định như hoạt động ban đầu Sort(_, L, Ls) của ví dụ 2-9. Điều này cũng giúp cho việc xây dựng kế hoạch đơn giản và nhanh chóng hơn, vì các yêu cầu càng cụ thể thì việc xác định các thành phần như chủ thể và công cụ sẽ dễ dàng hơn. Như trong ví dụ này, khi đã xác định mục tiêu là dịch vụ vụ lưới, ta có thể tập trung ngay vào các chủ thể (những người lập trình) và công cụ (ngôn ngữ/môi trường lập trình) phù hợp cho cài đặt dịch vụ lưới.
Hình 2-26: Kế hoạch cho việc xây dựng Dịch vụ lưới của giải thuật sắp xếp.
Tính khả thi của kế hoạch
Một trong những mục tiêu của việc xây dựng kế hoạch là xác định tính khả thi của nó. Sau đây là một định nghĩa về tính chất này.
Định nghĩa 2-9. Tính khả thi của kế hoạch: Cho kế hoạch P({A1,A2,...,An},F). Tính khả thi của P được quyết định bởi tính khả thi của hoạt động gốc của nó, tức là:
- P({A1, A2,...,An},F) là khả thi ↔ A1 khả thi.
- P({A1, A2,...,An},F) là không khả thi ↔ A1 không khả thi.
Định nghĩa 2-10. Giá trị một đường dẫn: Cho đường dẫn pl=path(A1, A2,...,An) (tức là
∀i=1..(n-1) Ai → Ai + 1). Khi đó giá trị của pl, ký hiệu val(pl), là giá trị trạng thái state(Ai) của mọi nút Ai (một trong các giá trị Khả Thi (FEASIBLE), Không Khả Thi (INFEASIBLE), Bất Định (UNKNOWN)), với i=1..n. Tức là:
val(pl) = { state(Ai)| i = 1..n} Ta cũng ký hiệu: val(pl, Ai) = state(Ai);
Chú ý : khái niệm đường dẫn được dùng ở đây là khái niệm đường dẫn thông thường
trong đồ thị, với các cạnh là các phụ thuộc khả thi. Nó khác với khái niệm đường dẫn được định nghĩa trong Định nghĩa 2-4, mà trong đó mỗi cạnh biểu diễn một quan hệ phụ thuộc Vào-Ra.
Đối với một kế hoạch, ta chỉ quan tâm đến một trong hai trạng thái là khả thi (FEASIBLE) và không khả thi (INFEASIBLE), nên sau này ta cũng chỉ quan tâm đến hai trạng thái này của một hoạt động.
Dựa theo tính chất của phụ thuộc khả thi, ta có thấy giá trị một đường dẫn phụ thuộc vào giá trị của hoạt động đầu tiên. Cụ thể là với đường dẫn path(A1, A2, ..., An), nếu A1 là khả thi thì tất cả các nút còn lại cũng khả thi. Ngược lại, nếu A1 không khả thi thì các nút còn lại cũng không khả thi (ở đây chúng ta đã đơn giản hóa cách tính giá trị đường dẫn, vì thực sự