Xây dựng chƣơng trình trực giao hoá hàm đại số logic

Một phần của tài liệu Nghiên cứu bài toán tính độ tin cậy của hệ thống thông qua cấu trúc của hệ thống (Trang 47 - 50)

3.1.2.1 Các yêu cầu đối với chƣơng trình và xác định các vấn đề

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. Vấn đề ở đây là tìm kiếm độ tin cậy cấu trúc của hệ thống phức tạ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.

Tham số đầu ra của chƣơng trình không phải là thực hiện chức năng của một hệ thống phức tạp mà là hàm đại số logic đã đƣợc giảm thiểu, viết dƣới dạng trực giao hoặc trực giao không lặp.

Các tham số hàm trực giao đƣợc mô tả nhƣ hình 3.3 dƣới đây:

Hình 3.3: Mô hình chức năng trực giao hoá hàm logic đại số

3.1.2.2 Phân tích và lựa chọn thuật toán trực giao hoá

Nhiệm vụ của chƣơng trình là tìm tất cả các đƣờng đi giữa 2 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ể đƣợc 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 đã đƣợc trình bày trong phần 2.3.1 thì ta thấy thuật toán trực giao hoá 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 sử dụng trong thuật toán là:

1

1 2 j n 1 2 1 2 3 1 n 1 n

K K K . K K K K K K K ... K ...K K Công thức có thể viết dƣới dạng khác nhƣ sau:

K1 K2 … Kj …. Kn = …v = Hàm đại số logic Hàm trực giao

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:

= v x1* v x1* x2 * v . . . v x1* x2* x3* . . .* .

3.1.2.3 Thiết kế các hàm chức năng cho thuật toán trực giao hoá

Chƣơng trình giải quyết một số vấn đề liên quan đến dữ liệu: Phƣơng pháp lƣu trữ dữ liệu và các kết quả, ...

Nhƣ phần trƣớc ta đã nói sau khi thực hiện hàm Find sẽ cho ta 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 Leng.

Trong khi thực hiện thuật toán trực giao hoá 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 một 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 hoá cũng tƣơng tự hàm Find:

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

unsigned int LengК[maxN]

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

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

void ortogonal(

unsigned int K1[maxN][maxK], //input unsigned int i_line,

unsigned int AB[maxN][maxK], //output unsigned int &i_line_AB,

unsigned int Leng_AB[maxN] );

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

Một phần của tài liệu Nghiên cứu bài toán tính độ tin cậy của hệ thống thông qua cấu trúc của hệ thống (Trang 47 - 50)