Để giải quyết một số phép toán cộng và nhân ta sử dụng một số quy tắc trong toán logic sau: - x.x = x hay x˅x = x; 9 7 8 10 4 7 8 10 5 7 8 10 4 5 7 8 10
- x+x = x hay x x = x; - = 0, hay = 0;
- Nếu xi * K(xi) = K(xi) thì * K(xi) = 0, trong đó K(xi) là một phép tuyển mà có liên quan đến biến logic xi .
Dƣới đây ta sẽ phát triển hai hàm chức năng có liên quan đến các phép nhân giữa một vector với một số.
Để giải quyết biến xi’, ta sẽ coi biến xi’ nhƣ một biến xj mà i+j = 2*maxK, trong đó maxK chính là kích cỡ của ma trận (i = 0,1,2,...,maxK-1).
/* function rule3:
Ham nhan so a voi vector A, ket qua chieu dai cua vector A se bi thay doi phu thuoc vao viec them hay khong them phan tu a trong vector A (neu a nam trong A thi khong can them, neu a khong co trong A thi se them a vao vi tri phu hop trong A)
Ham nay se tra lai gia tri flazok = 1 neu so a la so “nghich dao” voi mot so nao do trong А, nguoc lai flazok = 0.
*/
void rule3 (
unsigned int a,
unsigned int A[maxK], unsigned int &LengA, unsigned int &flazok); --- /* function rule4:
Ham nhan so a voi vector A, ket qua luu lai tren vector B.
Ham nay se tra lai gia tri flazok = 1 neu so a la so “nghich dao” voi mot so nao do trong А, nguoc lai flazok = 0.
*/
void rule4 (
unsigned int a,
unsigned int A[maxK], unsigned int LengA, unsigned int B[maxK],
unsigned int &LengB,
unsigned int &flazok); // Neu В = 0 thi flazok = 1;
Dựa vào 2 hàm rule3 và rule4 đã có ở trên ta xây dựng đƣợc hàm nhân ma trận nhƣ sau:
/* Function rule2: Ham nhan dong a voi chieu dai Leng_a voi ma tran A va ket qua luu lai tren ma tran A. */
void rule2 (
unsigned int a[maxK], unsigned int Leng_a,
unsigned int A[maxN][maxK], unsigned int LengA[maxN], unsigned int &i_line);
Để có các tham số đầu vào nhƣ kích thƣớc ma trận, ... thì ta phải xây dựng đƣợc hàm đọc ma trận từ file đầu vào. Ta sẽ xây dựng hai hàm Loadfile và ReadMatrix.
/* Function LoadFile: Doc du lieu Input tu file du lieu dau vao: doc ma tran lien ket, kick co ma tran, Index SOURCE, Index DESTINATION.
*/
void LoadFile(
unsigned int A[maxK][maxK], // Ma tran lien ket unsigned int &N, // Kich co ma tran unsigned int &i_source, // Index SOURCE
unsigned int &i_destination; // Index DESTINATION ---
/* Function ReadMatrixA: Doc ma tran lien ket A voi kick co N tu file dau vao Input. */
void ReadMatrixA(
unsigned int A[maxK][maxK], // Ma tran lien ket
unsigned int &N); // Kich co ma tran
Việc tính toán độ tin cậy cũng nhƣ khả năng sống sót của một hệ thống phức tạp là rất cần thiết để đảm bảo hiệu năng của hệ thống. Để làm đƣợc điều này ta sẽ đi xây dựng hàm chức năng tính toán giá trị xác suất từ giá trị logic sang giá trị đại số. Ở đây
ta phải xây dựng hai hàm khác nhau vì một hàm (Function_algebra) ta sẽ coi nhƣ vector x là không đổi, còn một hàm (Function Function1_algebra) thì vector x là tuỳ biến vì còn phụ thuộc vào thời gian t.
/* Function_algebra: Nhan gia tri sac xuat cua ham dai so-logic.*/ float Function_algebra(
unsigned int A[maxN][maxK], unsigned int i_line,
unsigned int LengA[maxN], unsigned int General[maxK], unsigned int LengG,
float x[maxK]); ---
/* Function Function1_algebra: Nhan gia tri sac xuat ham dai so – logic trong su phu thuoc vao thoi gian t.
*/
float Function1_algebra(
unsigned int A[maxN][maxK], unsigned int i_line,
unsigned int LengA[maxN], unsigned int General[maxK], unsigned int LengG,
float x[maxK], unsigned int N, unsigned int t);
Nhƣ phần các ví dụ trên đã nói, sau khi tìm đƣợc tất cả các đƣờng đi giữa hai nút trong ma trận liên kết thì ta phải tách từng dòng của ma trận thành phần chung của tất cả các dòng và phần riêng của mỗi dòng đó, sau đó sắp xếp từng phần riêng của mỗi dòng thuộc ma trận đó theo thứ tự các biến tăng dần và chiều dài đƣờng đi tăng dần. Nhƣ vậy ta sẽ đi xây dựng đƣợc hai chức năng sau:
/* Function func2: Tach ma tran K thanh K1 va K2, ma K2 la phan chung cua cac dong tu ma tran K, K1 la phan con lai cua cac dong sau khi tach*/
void func2 (
unsigned int K[maxN][maxK], unsigned int Leng[maxN], unsigned int i_line,
unsigned int K1[maxN][maxK], unsigned int LengK1[maxN], unsigned int N,
unsigned int K2[maxK], unsigned int &LengK2); ---
/* Function sort: Sap xep ma tran A, ket qua dua ra ma tran A moi theo chieu dai tang dan cua cac dong tren ma tran*/
void sort(
unsigned int A[maxN][maxK], unsigned int i_line,
unsigned int LengA[maxN] ); Ví dụ: Sử dụng tiếp ví dụ 2 ở phần 3.1.3. Ta có ma trận lƣu trữ các đƣờng đi là: 1 6 9 15 1 6 7 8 10 15 1 6 4 7 8 10 15 1 6 7 5 8 10 15 1 6 4 7 5 8 10 15
Sau khi sử dụng hai hàm Function func2 và Function sort ta đƣợc kết quả phần chung của các con đƣờng và phần riêng của từng đƣờng nhƣ sau:
Phần chung 1 6 15 Phần riêng 9 6 7 10 4 7 8 10 5 7 8 10 4 5 7 8 10
Hệ thống đƣợc coi là làm việc có hiệu quả khi và chỉ khi ngƣời sử dụng cuối luôn nhận đƣợc tín hiệu từ nguồn phát, có thể tại thời điểm này chỉ nhận tín hiệu của 1 nguồn phát nhƣng ở thời điểm khác nó lại nhận tín hiệu từ nhiều nguồn phát khác nhau. Vì vậy ta cần xây dựng thêm hàm chức năng để giải quyết vấn đề phát sinh đó là phép cộng và phép nhân logic.
+ Biểu thức của phép cộng logic như sau:F(x) = F1(x) ˅ F2(x)
Dƣới đây là một vài thuộc tính của hàm chức năng đƣợc phát triển cho phép cộng logic:
/* function sum_F1_F2: Tinh tong AB – la tong cua phep cong logic giua 2 ma tran A va B */ void sum_F1_F2(
unsigned int A[maxN][maxK], unsigned int i_line_A,
unsigned int LengA[maxN], unsigned int B[maxN][maxK], unsigned int i_line_B,
unsigned int LengB[maxN], unsigned int AB[maxN][maxK], unsigned int &i_line_AB,
unsigned int LengAB[maxN]);
Biểu thức: F(x) = F1(x) ˅ F2(x) với F1(x), F2(x) là kết quả của hàm tìm kiếm tất cả các đƣờng đi giữa hai nút trong ma trận liên kết. F1(x), F2(x) cũng là các ma trận lƣu các đƣờng đi tìm đƣợc.
Ví dụ: Ta xét F1(x) là ma trận chứa tất cả các đƣờng đi từ nguồn phát 1 đến đích là đỉnh 15 và F2(x) là ma trận chứa tất cả các đƣờng đi từ nguồn phát 2 đến đích là đỉnh 15. F1(x) F2(x) 1 6 9 15 2 7 6 9 15 1 6 7 8 10 15 2 7 4 6 9 15 1 6 4 7 8 10 15 2 7 8 10 15 1 6 7 5 8 10 15 2 7 5 8 10 15 1 6 4 7 5 8 10 15 Vậy F(x) = F1(x) ˅ F2(x) sẽ có dạng sau: 1 6 9 15 2 7 6 9 15 2 7 8 10 15 1 6 7 8 10 15 2 7 4 6 9 15 2 7 5 8 10 15 1 6 4 7 8 10 15 1 6 7 5 8 10 15 1 6 4 7 5 8 10 15
Dƣới đây là một vài thuộc tính của hàm chức năng đƣợc phát triển cho phép nhân logic:
/* Function mult_F1_F2: Nhan hai ma tran A va B, duoc ket qua la ma tran AB */
void mult_F1_F2 (
unsigned int A[maxN][maxK], unsigned int i_line_A,
unsigned int LengA[maxN], unsigned int B[maxN][maxK], unsigned int i_line_B,
unsigned int LengB[maxN], unsigned int AB[maxN][maxK], unsigned int &i_line_AB, unsigned int LengAB[maxN]);
Biểu thức: F(x) = F1(x) * F2(x) với F1(x), F2(x) là kết quả của hàm tìm kiếm tất cả các đƣờng đi giữa hai nút trong ma trận liên kết. F1(x), F2(x) cũng là các ma trận lƣu các đƣờng đi tìm đƣợc.
Ví dụ: Ta xét F1(x) là ma trận chứa tất cả các đƣờng đi từ nguồn phát 1 đến đích là đỉnh 15 và F2(x) là ma trận chứa tất cả các đƣờng đi từ nguồn phát 2 đến đích là đỉnh 15. F1(x) F2(x) 1 6 9 15 2 7 6 9 15 1 6 7 8 10 15 2 7 4 6 9 15 1 6 4 7 8 10 15 2 7 8 10 15 1 6 7 5 8 10 15 2 7 5 8 10 15 1 6 4 7 5 8 10 15
F(x) = F1(x) * F2(x) sẽ có dạng sau: 1 2 6 7 9 15 1 2 6 7 4 9 15 1 2 6 7 8 9 10 15 1 2 6 7 5 8 10 15 1 2 6 7 4 6 9 15 1 2 6 7 4 8 9 10 15 1 2 6 7 5 8 9 10 15 1 2 6 7 4 5 8 10 15 1 2 6 7 4 5 8 9 10 15
Nhƣ ta đã trình bày ở chƣơng 1, mỗi một hệ thống đều đặc trƣng bởi cƣờng độ hỏng hóc (λ) của các phần tử trong hệ thống đó. Ngày trƣớc với khoa học công nghệ còn hạn chế thì λ của các phần tử là tƣơng đối lớn cỡ 10-2
hoặc 10-3, nhƣng ngày nay λ này đã đƣợc giảm đi rất nhiều chỉ vào khoảng 10-7hoặc nhỏ hơn nữa.
Trong luận văn này có đề cập đến việc tính xác suất để hệ thống làm việc an toàn trong thời gian t ( P(t)=e-λt ), xác suất hệ thống gặp sự cố (Q(t)=1-e-λt
), ...Các phép tính xác suất này đều có liên quan đến giá trị λ (tuỳ từng thời điểm khác nhau). Chính vì những yêu cầu khi tính toán các giá trị xác suất đó đặt ra cho ta một vấn đề cần giải quyết là cần phải xây dựng hàm chức năng tính toán giá trị e-λt
tại mỗi thời điểm t khác nhau đối với từng phần tử của hệ thống.
/* Function Intension: Su phu thuoc cua X vao thoi gian t, thong qua gia tri cuong do hong hoc cua no.
*/
void Intension( float x[maxK], unsigned int N,
unsigned int t );
Trong phần trƣớc ta có nói đến việc phải trực giao hoá các hàm logic, để phát triển chƣơng trình ta viết thêm hàm chức năng
Function_source_destination để đƣa ra các hàm logic về dạng chuẩn tắc tuyển trực giao đƣợc lƣu trong ma trận AB và vector General:
/* Function Function_source_destination: Dua ra cac ham logic truc giao, duoc luu lai trong ma tran AB va vector General
*/
void Function_source_destination(
unsigned int source, // Index source - nguon
unsigned int destination,// Index destination - dich unsigned int General[maxK],
unsigned int &LengG,
unsigned int A[maxK][maxK], // Ma tran lien ket unsigned int N, // kich co ma tran lien ket
unsigned int AB[maxN][maxK],// ma tran luu ket qua unsigned int &i_line_AB, // so dong trong ma tran AB
unsigned int Leng_AB[maxN]);// Chieu dai cua tung dong trong ma tran AB
3.4 Đặc tả hệ thống
Ví dụ nhƣ hệ thống chăm sóc khách hàng. Thực tế chính là các nhân viên chăm sóc khách hàng, làm việc trong một hệ thống chăm sóc khách hàng hiện đại (gọi là call center hay contact center). Công việc chính của call agent là: Trả lời khách hàng bất cứ thông tin gì họ cần, qua điện thoại, qua email, qua fax, qua text chat, hay thậm chí là voice chat, truyền hình di động; Xử lý các sự cố trực tiếp; Điều tra thị trƣờng; Điều hành hệ thống bán hàng qua hotline, hỗ trợ đại lý; Tham gia vào quá trình thiết kế sản phẩm dịch vụ…
Nếu dùng từ tiếng việt “điện thoại viên” để chỉ các Call Agent hiện nay đã không còn chính xác do ảnh hƣởng của Internet và việc ứng dụng các tiến bộ của công nghệ thông tin trong hoạt động kinh doanh, do phƣơng thức truyền thông giữa Call Agent và khách hàng không chỉ giới hạn ở điện thoại mà còn có thể qua email, qua fax, qua chat… Tuy nhiên hình thức phổ biến nhất ở Việt Nam hiện nay vẫn là dùng thoại, đó đó ngƣời ta quen gọi các Call Agent là điện thoại viên và công việc chính của các Call Agent vẫn là giải đáp các thắc mắc của khách hàng.Tƣơng tự nhƣ thế khái niệm về CallCenter ngày nay mang nghĩa rộng hơn trƣớc. Đó không chỉ là trung tâm để liên lạc qua điện thoại mà là "trung tâm chăm sóc khách hàng từ xa" của các công ty, đặc biệt là các công ty đa quốc gia.Đó là khu vực tràn ngập trong các dữ liệu, bao gồm thông tin của khách hàng (đƣợc tổng hợp từ các cuộc điện thoại, email, fax), các thông tin về đặt hàng, hóa đơn, chi tiết sử dụng dịch vụ và mua hàng…, là nơi tập hợp những nhân viên chuyên nghiệp xử lý các nhu cầu của khách hàng thông qua các kênh truyền thông nhƣ hệ thống điện thoại, email và các phƣơng tiện truyền thông trực tuyến khác để hƣớng dẫn, cung cấp và giải pháp thông tin nhằm tạo sự hài lòng cho khách hàng đồng thời giảm đƣợc chi phí vận hành và tối đa hóa lợi nhuận. Nhƣng toàn bộ những dữ liệu mà các Call Agent sử dụng đƣợc từ máy cá nhân của mình coi nhƣ đang sử dụng trên máy chủ thông qua các công nghệ tiên tiến hiện nay.
Để đƣợc khái quát hơn tôi sẽ sử dụng chƣơng trình tính toán đã mô tả trong chƣơng để tính toán độ tin cậy cũng nhƣ khả năng vận hành an toàn của hệ thống máy chủ đƣợc mô tả nhƣ hình 3.6 dƣới đây:
0 6 7 4 1 2 3 5 8 11 9 10 13 12 17 14 16 15 Hình 3.6 Đồ thị liên kết của hệ thống Trong đó: - 0: Là máy chủ (server);
- 1,2,3: Là các máy chủ thứ cấp mà kết nối trực tiếp với server; - 4,5: Các đƣờng truyền;
- 6,7,8: Các Bus;
- 9,10, ... ,14: Các trạm trung chuyển;
- 15,16,17: Các máy trạm (client) là ngƣời sử dụng cuối. Yêu cầu đặt ra của bài toán là:
Tính xác suất của hệ thống hoạt động an toàn trong thời gian t và thời gian hoạt động an toàn trung bình (thời gian trung bình đến lúc sảy ra sự cố lần đầu tiên) ? (tức là ta phải tìm P(t) và THD)
Biết cƣờng độ hỏng hóc của các phần tử trong hệ thống máy chủ trên nhƣ sau: - i = 10-4 (1/giờ) với i = (1, 2, 3,15,16,17);
- i = 10-5 (1/giờ) với i = (4,5,6,7,8); - i = 10-4 (1/giờ) với i = (9, ..., 14);
Giả sử để ngƣời sử dụng ở nút 15 nhận đƣợc tín hiệu từ một trong ba máy chủ thứ cấp số 1, số 2 và số 3, khi đó hiệu suất tổng sẽ có dạng sau:
F= f1,15 ˅f2,15˅f3,15 (1)