Bài toán xác định trực giao hóa các toán tử logic

Một phần của tài liệu (LUẬN văn THẠC sĩ) một số thuật toán đánh giá độ tin cậy của hệ thống (Trang 51)

CHƯƠNG 2 : MỘT SỐ THUẬT TOÁN ĐÁNH GIÁ ĐỘ TIN CẬY

2.4 Bài toán xác định trực giao hóa các toán tử logic

Có thể nói giai đoạn trực giao hóa là giai đoạn phức tạp nhất của quá trình tính toán độ tin cậy của hệ thống.

Vì từ một ngôi (kí hiệu f(x)) được gọi là trực giao nhau khi và chỉ khi kết quả chúng bằng 0. Tuy nhiên nếu vị từ mà ta xét không phải là vị từ một ngôi mà là vị từ n ngôi (kí hiệu là f(x1,x2,….xn)) thì chúng được gọi là trực giao khi và chỉ khi các phần tử của chúng là trực giao và cho kết quả bằng 0. Vậy phương pháp trực giao chính là phương pháp biến đổi logic sao cho kết quả các toán tử đểu bằng 0.

Trong mục này tôi sẽ nói rõ về phương pháp trực giao hóa và các thuật toán sử dụng để trực giao.

2.4.1 Phương pháp giảm thiểu các hàm đại số logic đối với hình thức trực giao và trực giao không lặp giao và trực giao không lặp

Thuật toán nay dựa trên triển khai các hàm logic cho kết quả là các hàm logic đã trực giao, trực giao không lặp và trường hợp đặc biệt đó là chuẩn tắc tuyển trực giao.

Thuật toán cụ thể như sau:

1.Xét hàm f(x) và thống kê số lần xuất hiện của mỗi biến xi

(i=1,2,3…,n) dưới dạng sau: M ={m1, m2,….,mn}

2.M được sắp xếp tăng dần khi đó mn là tần suất xuất hiện nhiều nhất tương ứng với biến xi nào đó.

3.Đối với mỗi biến xi ta sẽ thực hiện phép tách sau:

F(x1,…,xi,….xn) = 𝑥̅𝑖 f(x1,…,0,…xn) ∨ xif(x1,...,1,…xn) = 𝑥̅𝑖fi(0)˅ xi fi(1). 4.Áp dụng các luật của đại số logic làm tối thiểu, đơn giản hóa hàm fi(0)

và fi(1). Kết quả có thể nhận được sẽ thuộc 1 trong 4 trường hợp sau: - Kết quả là hằng số 0 hoặc 1.

- Một hàm được đưa về chuẩn tắc tuyển trực giao. - Không có biến nào bị lặp lại trong hàm logic.

- Nếu có biến bị lặp lại trong hàm logic thì được loại bỏ bớt đi, chỉ viết 1 lần. 5.Nếu kết quả hàm đã có sự kết hợp của trường hợp 1 và 2 thì việc chuyển hàm logic thành trực giao coi như xong. Nếu kết quả ở trường hợp 3 thì tiếp tục áp dụng các luật biến đổi logic để hoàn tất việc trực giao hàm logic. Nếu kết quả là trường hợp 4 thì tiếp tục quay trở lại bước 1, thực hiện các phép biến đổi đưa về hàm trực giao. Chắc chắn thủ tục này sẽ dừng vì biến xn là hữu hạn. Khi đó hàm logic đã trực giao.

Quá trình thực hiện thuật toán cắt giảm đối với các hình thức trực giao này tương đối mất thời gian. Tuy nhiên thuật toán này lại có ưu điểm đó là vẫn nhanh hơn các phương pháp tìm kiếm truyền thống, các hàm thu được bằng cách áp dụng các luật biến đổi logic sau khi áp dụng thuật toán thì hầu như sẽ không bị thay đổi nữa.

b, Thuật toán trực giao hóa theo công thức của Poresky:

Thuật toán trực giao hóa theo công thức của Poresky gồm các bước sau: 1.Hàm logic được viết dưới dạng chuẩn tắc tuyển như sau:

F(xn) = K1∨ K2∨….∨ Kj ∨….∨ KR

Trong đó: Kj là mệnh đề sơ cấp có số thứ tự là j.

2. Tất cả các biến trong hàm logic khi được viết dưới dạng chuẩn tắc tuyển thì phải được sắp xếp theo thứ tự tăng dần, bắt đầu từ bậc thấp nhất của biến.

3.Dạng chuẩn tắc tuyển được viết dưới dạng công thức Poresky như sau: F(xn) = K1∨ K2∨….∨Kj∨….∨ KR=K1∨ 𝐾̅1K2 ∨ 𝐾̅1𝐾̅2K3∨…… ∨ 𝐾1

̅̅̅… 𝐾̅̅̅̅̅̅𝑅−1𝐾 𝑅

4. Khai triển công thức ta được dạng trực giao không lặp của hàm ban đầu. Ta thấy rằng việc sử dụng thuật toán đưa hàm logic về dạng chuẩn tắc tuyển đã trực giao này khá phức tạp trong việc triển khai các toán tử. Số lượng các biến khi khai triển là khá dài. Tuy nhiên đây chính là một cách để phát triển chương trình trực giao hóa của hàm logic trên máy tính.

Thuật toán trực giao hóa theo công thức của Poresky có thể sử dụng dưới dạng hình thức sửa đổi một chút như sau:

1.Hàm logic được viết dưới dạng chuẩn tắc tuyển như sau: F(xn) = K1 ˅ K2 ˅ …˅ Kj ˅ ….˅ KR

2.Từ dạng trực giao ta sử dụng công thức De Morgan để tiếp tục biến đổi về dạng:

f(xn) = (𝐾̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅𝐾1̅̅̅ … 𝐾2 ̅̅̅̅)𝑅

3.Kết quả nhận được sau khi loại bỏ hết các biến lặp ta được dạng trực giao không lặp của hàm logic ban đầu. Dựa vào kết quả thu được ta sẽ dễ dàng tính các hàm xác suất.

b.Thuật toán cắt giảm hàm đại số logic bằng cách đưa về dạng chuẩn tắc tuyển

Như ta đã biết DPNF – Dạng chuẩn tắc tuyển hoàn toàn được coi như một dạng chuẩn tắc tuyển đã được trực giao hóa, vì vậy ta có thể sử dụng nó để cắt giảm hàm logic. Thuật toán này gồm các bước:

1.Đây là hàm của dạng chuẩn tắc tuyển.

2.Tìm các phép hội sơ cấp xuất hiện trong dạng chuẩn tắc tuyển. 3.Tìm tất cả các tập hợp được phủ bởi một phép hội sơ cấp.

4.Khai triển tất cả các tập hợp, ta sẽ được hàm ban đầu trong dạng chuẩn tắc tuyển hoàn toàn.

Từ dạng chuẩn tắc tuyển hoàn toàn ta có thể dễ dàng tính được các hàm xác suất. Tuy nhiên nếu một hàm được viết dưới dạng chuẩn tắc tuyển thì sẽ dài hơn khi được viết ở dạng đã được trực giao, đây chính là một nhược điểm của thuật toán để đưa một hàm logic về dạng chuẩn tắc tuyển hoàn toàn. Nhưng việc triển khai một hàm logic về dạng chuẩn tắc tuyển hoàn toàn lại đơn giản trong việc lập trình bằng máy tính.

2.4.2 Các quy tắc chuyển đổi sang dạng xác suất trong dạng chuẩn tắc tuyển. tuyển.

Bất kỳ một sự kiện phức tạp nào cũng có thể viết được dưới dạng hàm logic với các phép toán logic. Xác suất của hàm f(xi) luôn bằng 1, dưới dạng kí hiệu là P[f(xi)]=1.

Khi các hàm logic đã được chuyển đổi về dạng chuẩn tắc tuyển trực giao thì ta có thể tính xác suất của hàm một cách đơn giản theo quy tắc sau:

1.Các kí hiệu phép cộng và nhân logic được thay thế bởi dấu các phép cộng và nhân đại số.

2. Các kí hiệu xi và 𝑥̅𝑖 được thay thế bằng các xác suất Pi và Qi tương ứng. Quá trình chuyển đổi về hàm xác suấttheo quy tắc sau:

1.Sử dụng công thức De Morgan để đưa về dạng chuẩn tắc hội, không chưa phép logic nào.

2.Các ký hiệu phép cộng và nhân logic được thay thế bởi dấu các phép cộng và phép nhân đại số.

3. Các kí hiệu xi và 𝑥̅𝑖 được thay thế bằng các xác suất Pi và Qi tương ứng. 4.𝑃̅(𝑓=1) được thay thế bằng 1-𝑃̅(𝑓=1)

2.4.3 Xây dựng chương trìnhtrực giao hóa hàm đại số logic

a. Các yêu cầu:

- Chương trình được thiết kế để thực hiện các chức năng của nó đối với trạng thái hoạt động tốt, được biểu diễn dưới dạng hàm logic đã được trực giao hoặc trực giao không lặp.

- Tham số đầu vào của chương trình là hàm đại số logic được thiết lập từ tập các biến mà mô tả đặc điểm chắc năng của một trạng thái hoạt động tốt trong một hệ thống phức tạp. Chương trình là một quá trình thực hiện hiệu quả việc chuyển đổi một hàm đại số logic sang một hình thức trực giao hoặc trực giao không lặp.

b.Phân tích và lựa chọn thuật toán trực giao:

Nhiệm vụ của chương trình là tìm tất cả các đường đi giữa hai nút trong ma trận liên kết, giả sử chúng ta có n con đường, những con đường này có thể mô tả dưới dạng K1, K2, …,Kn phân biệt. Rõ ràng nếu hàm đại số logic được viết dưới dạng: K1˅ K2˅ ... ˅ Kn thì đó chính là dạng chuẩn tắc tuyển của nó.

f(x) = K1˅ K2˅ ... ˅Ki˅... ˅ Kn

trong đó Ki = x1* x2* ...*xm với i = {1..n}.

Trong các thuật toán trực giao hóa đã được trình bày trong phần 2.3.1 ta sẽ thấy thuật toán trực giao hóa theo công thức Poresky là phù hợp để viết chương trình hơn cả. Công thức Poresky có thể sử dụng trong thuật toán là:

K1 ˅ K2 ˅ …˅ Kj ˅ ….˅ Kn = 𝐾1˅𝐾̅̅̅𝐾1 2˅𝐾̅̅̅𝐾1̅̅̅𝐾2 3˅ … ˅𝐾̅̅̅ … 𝐾1 ̅̅̅̅̅̅𝐾𝑛−1 𝑛 Công thức trên có thể viết dưới dạng khác như sau:

K1 ˅ K2 ˅ …˅ Kj ˅ ….˅ Kn =𝐾1˅ 𝐾̅̅̅𝐾1 2˅ 𝐾̅̅̅𝐾1̅̅̅𝐾2 3˅ … ˅ 𝐾1 ̅̅̅ … 𝐾̅̅̅̅̅̅𝐾𝑛−1 𝑛 =𝐾1˅ (𝐾̅̅̅˅𝐾1 2(𝐾̅̅̅˅𝐾2 3( 𝐾̅̅̅(… 𝐾3 ̅̅̅̅̅̅˅𝐾𝑛−1 𝑛) … ) Ki có thể là một biến nhưng cũng có thể là một tập các biến: Ki = x1* x2* ...*xm

khi đó 𝐾̅𝑖 sẽ được tính như sau:

𝐾̅𝑖 = 𝑥̅̅̅1v x1* 𝑥̅̅̅2 v x1* x2 * 𝑥̅̅̅̅3v . . . v x1* x2* x3* . . .* 𝑥̅̅̅̅𝑚.

c. Thiết kế các hàm chức năng cho thuật toán trực giao hóa:

Như phần trước ta đã nói, sau khi thực hiện hàm Find sẽ cho tất cả các đường đi giữa đỉnh đầu và đỉnh cuối. Tất cả các đường đi được lưu trong ma trận hai chiều K, với i_line dòng, chiều dài mỗi đường đi được lưu trong ma trận chiều dài Leng.

Trong khi thực hiện thuật toán trực giao hóa ta đã sử dụng các thuật toán cắt giảm, vì kết quả vẫn phải là các đường đi đã được trực giao hoặc trực

giao không lặp nên ta vẫn lưu mỗi đường đi vào một mảng, tập tất cả các đường đi được lưu vào ma trận. Vì vậy tham số đầu vào và đầu ra của hàm thực hiện thuật toán trực giao hóa cũng tương tự như hàm Find:

Unsigned int K[maxN] [maxK] Unsigned int i_line,

Unsigned int lengK[maxN]

Ta sử dụng ngôn ngữ lập trình C++ để phát triển hàm trực giao hóa. Dưới đây sẽ là một phần của hàm:

/* Funtion Otogoral: Truc giao hoa tat ca thanh phan cua K1, ket qua luu trong ma tran A, ma van giu duoc dang chuan tac tuyen truc giao.*/

Void otogoral (

Unsigned int K1[maxN] [maxk] //input

Unsigned int i_line,

Unsigned int lengK1[maxN],

Unsigned int A[maxN][maxK], //output

Unsigned int $i_line_A, Unsigned int lengA[maxN],

2.4.4 Kết luận:

Chương này nói đến các yêu cầu để thiết lập, hướng giải quyết và xây dựng các hàm chức năng của bài toán –xây dựng hệ thống tính toán độ tin cậy và khả năng sống sót (khả năng hoạt động an toàn) của hệ thống. Với những gì đã xây dựng được ở trên thì chúng ta có thể tính toán độ tin cậy và khả năng sống sót của bất cứ hệ thống nào. Tuy nhiên ngay từ bước đầu việc chuyển đổi từ sơ đồ cầu trúc logic sang ma trận liên kết nếu không được thực hiện chính xác thì kết quả thu được sẽ không chính xác. Hướng phát triển của chương trình là xây dựng một giao diện đồ họa để nâng cao khả năng tương tác giữa người và hệ thống làm việc.

Chương trình đã xây dựng đáp ứng được cơ bản các yêu cầu của bài toán, nhưng trong quá trình phát triển chương trình vẫn còn nhược điểm chưa khắc phục được đó là việc sử dụng ma trận lưu trữ tất cả các đường đi tìm được giữa hai nút trong đồ thị làm cho ma trận liên kết đầu vào cũng phải được giới

và cũng là để tiết kiệm tài nguyên bộ nhớ chương trình (nếu kích thước của ma trận liên kết lớn khoảng 23x23 thì chương trình chạy khá lâu và kết quả xuất ra file out quá lớn - cỡ hàng Gb).

CHƯƠNG 3: BÀI TOÁN THỰC NGHIỆM ĐÁNH GIÁ HỆ THỐNG

Hiện nay, các hệ thống tính toán kỹ thuật đang dần được ứng dụng rộng rãi trong các lĩnh vực hoạt động khác nhau của đời sống con người. Đặc biệt ngày càng nhiều hệ thống máy chủ được sử dụng để quản lý, xử lý và chịu trách nhiệm về các đối tượng làm việc theo thời gian thực. Các hệ thống này được biết đến trong nhiều lĩnh vực: hệ thống kiểm soát nhà máy điện hạt nhân, hệ thống máy tính trong hệ thống ngân hàng, các công ty chứng khoán, hệ thống máy tính trên máy bay, hệ thống thông tin liên lạc vệ tinh,… Những hệ thống như vậy cần phải có tính chất: khả năng phục hồi và khả năng sống sót trong suốt thời gian hoạt động của hệ thống vì những thất bại của nó có thể rất tốn kém và để lại những hậu quả nguy hiểm.

Tuy nhiên với sự phát triển của Internet, máy tính hiện nay, bên cạnh số người sử dụng và các dịch vụ mạng gia tăng đồng nghĩa với việc các máy chủ phải hoạt động với cường độ lớn hơn. Mặc dù các máy chủ được cấu hình tự động để chia tải theo thuật toán định tuyến tuy nhiên việc quá tải giữa các máy chủ có thể hoàn toàn có thể xảy ra với số lượng truy cập tăng đột biến hoặc hacker thực hiện các cuộc tấn công DDOS vào các máy chủ trong thời gian cao điểm, dịch vụ cung cấp cho người dùng có thể ngưng trệ. Do đó cần thiết phải đưa ra một phương án dự phòng phù hợp để nâng cao độ tin cậy cho hệ thống máy chủ. Dựa vào lý thuyết về độ tin cậy để phân tích, tính toán và đưa ra phương án dự phòng thích hợp, đồng thời sẽ sử dụng các thuật toán để tính toán độ tin cậy cho hệ thống với phương án dự phòng này.

3.1 Phát biểu bài toán

Trong thực tế cấu trúc hệ thống mạng công ty HOYA khá phức tạp gồm nhiều tầng, nhiều lớp máy chủ khác nhau. Tuy nhiên trong khuân khổ luận văn tác giả chỉ xét một hệ thống Production Server ( Hệ thống máy chủ sản xuất)

trò san tải cho máy chủ chính – Secondary server và một máy chủ giữ vai trò dự phòng cho hai máy chủ kia. Trong quá trình hoạt động của hệ thống, khi máy chủ chính hoạt động quá tải hoặc gặp trục trặc khi vận hành, theo cơ chế cân bằng tải được cấu hình mặc định của hệ thống, máy chủ dự phòng sẽ thực hiện san tải hoặc thay thế, làm việc như một máy chủ chính. Trường hơp cả hai máy chủ chính và máy chủ dự phòng đều không đáp ứng được nhu cầu do yêu cầu tải tăng quá cao khi gặp cuộc tấn công DOS/DDOS với quy mô lớn. Có rất nhiều phương pháp sử dụng để đảm bảo độ tin cậy nhưng trong khuân khổ luận văn này tôi chỉ đưa ra hai phương pháp tiêu biểu nhất là dự phòng tích cực và dự phòng nhân đôi.

Hình 5: Sơ đồ hệ thống công ty HOYA Trong đó:

- 1,2: là các máy chủ - 3: máy trạm

Giải pháp:

1. Phương án dự phòng tích cực: thêm 01 máy chủ 2. Phương án dự phòng nhân đôi: thêm 02 máy chủ

3.2 Mô hình dự phòng tích cực 3.2.1 Đặc tả hệ thống

Sử dụng phương pháp dự phòng tích cực để thêm 01 máy chủ vào hệ thống máy chủ sản xuất của công ty HOYA như đã trình bày ở chương 3 – Phần 3.1. Khi đó hệ thống sẽ được mô tả như sau:

.

Hình 3.1: Đồ thị liên kết hệ thống

Trong đó:

- 1,2,3: là các server - 4: client

Yêu cầu đặt ra của bài toán:

Tính xác suất hệ thống hoạt động an toàn trong thời gian t.

Sử dụng thuật toán tìm kiếm theo chiều sâu, bắt đầu từ nút 1 lần lượt tìm kiếm qua các đỉnh còn lại của đồ thị hệ thống ta sẽ có:

F(1,4) = 1 4 12  4 12 3  4 1 3  2 4 1 4 F(2,4) = 2 4 2  3  4.

2  1  4 2  1 3 4 F(3,4) = 3 4 3  2  4 3  2 1  4 3  1  4

Để nút số 4 nhận tín hiệu từ 3 máy chủ số 1, số 2 và số 3 khi đó hàm đánh giá độ tin cậy của hệ thống sẽ có dạng:

F(x) = F(1,4) ˅ F(2,4) ˅ F(3,4)

Sử dụng thuật toán trực giao hóa để chuyển đổi mô hình logic sang đại số F(1 4) = x1.x4 ( x2 ˅ x2.x3 ˅ x3.x2 ˅ x3)

= x1.x4 ( x2 ˅ x3 ˅ x2.x3 )

Áp dụng thuật toán Poresky ở chương 2 mục 2.4.1 để đưa về dạng chuẩn tắc tuyển như sau:

K1 = x2 K2 = x3 K3 = x2.x3 K4 = x1.x4 => F(14) = [ K1 ˅ K2 ˅ K3 ] K4 = [ K1 ˅ K̅̅̅̅1.K2 ˅ ̅̅̅̅K1. K̅̅̅̅2.K3 ] K4 = [ x2 ˅ x̅̅̅2.x3 ˅ x̅̅̅2. x̅̅̅3.x2.x3] x1.x4 = x1.x4 (x2 ˅ x̅̅̅2.x3 ) (I) Áp dụng tương tự với F(24) và F(34) ta có: F(2  4) = x2.x4 (x3 ˅ x̅̅̅3.x1 ) (II) F(3  4) = x3.x4 (x1 ˅ x̅1.x2 ) (III) Từ (I), (II) và(III) ta có:

F(x) = x1.x4 (x2 ˅ ̅̅̅x2.x3 ) ˅ x2.x4 (x3 ˅ x̅̅̅3.x1 ) ˅ x3.x4 (x1 ˅ x̅1.x2 ) = x4 (x1.x2 ˅ x1.̅̅̅x2.x3 ˅ x2.x3 ˅ x1.x2. x̅̅̅3 ˅ x1.x3 ˅ x̅1.x2.x3 ) = x4 (x1.x2 ˅ x1.̅̅̅x2.x3 ˅ x̅1.x2.x3 ˅ x1.x2. x̅̅̅3 ˅ x2.x3 ˅ x1.x3 )

= x4 (x1.x2 ˅ x2.x3 ˅ x1.x3 ) (IV) Ta giả định độ tin cậy các máy chủ bằng nhau và bằng P.

Khi đó:

P(x1) =P( x2 = P(x3) = P

Độ tin cậy của hệ thống từ (IV) sẽ là:

Psystem = P1 = P (P2 + P2 + P2 ) = 3P3 (V) Theo lý thuyết chương 1 – [1.3] thì bất kỳ hệ thống nào đều có thể quy về một trong hai sơ đồ khối đơn giản là nối tiếp hoặc song song.

Một phần của tài liệu (LUẬN văn THẠC sĩ) một số thuật toán đánh giá độ tin cậy của hệ thống (Trang 51)

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

(73 trang)