Ôtômat thời gian của bếp ga

Một phần của tài liệu luận văn: phân tích, thiết kế và cài đặt kiểm chứng một hệ thời gian thực (đh quốc gia hà nội) (Trang 25 - 31)

Yêu cầu an toàn của bếp gas: tỉ lệ của tổng thời gian rò gas không vượt quá một phần hai mươi của một đoạn thời gian quan sát bất kỳ không ngắn hơn một phút.

Yêu cầu an toàn của bếp gas được đặc tả bằng công thức LDI như sau:

1) Gọi l là độ dài đoạn thời gian quan sát, ta có l  60 và l =  Leak +  NLeak. 2) Theo yêu cầu an toàn thì  Leak  (1/20) x l.

Từ (1) và (2) ta có công thức LDI đặc tả yêu cầu an toàn của bếp gas: l  60  19 x  Leak -  NLeak  0.

Chương 3. PHÂN TÍCH, THIẾT KẾ BỘ CÔNG CỤ KIỂM CHỨNG MÔ HÌNH

Mục tiêu của chương này là phân tích, thiết kế và cài đặt một bộ công cụ phần mềm để thực hiện kiểm chứng mô hình hệ thống thời gian thực được đặc tả bằng ôtômat thời gian có thỏa mãn các tính chất mong muốn của hệ thống được đặc tả bằng công thức LDP, LDI hay không.

Một thuật toán kiểm chứng được đưa ra trong [2] gồm các bước:

 Từ input đầu vào là lưới các ôtômat, xây dựng ôtômat hợp song song

 Từ ôtômat hợp xây dựng đồ thị phân miền.

 Từ đồ thị phân miền xây dựng ôtômat trọng số.

 Duyệt đồ thị trọng số và trả lời câu hỏi của bài toán

Các phần tiếp theo dưới đây sẽ mô tả cách thức trong chương trình này xây dựng thuật toán cho các bước nói trên.

3.1. Các thuật toán

3.1.1. Thuật toán xây dựng ôtômat hợp song song

Bài toán: Cho một hệ các ôtômat Ai = (Li, l0i, i, Xi, Ii, Ei), i = 1,2,3,… Hãy xây dựng ôtômat hợp song song đạt được từ các ôtômat thành phần Ai.

Ý tưởng thuật toán: thuật toán được xây dựng theo kỹ thuật duyệt đồ thị theo

chiều sâu. Thuật toán gồm 2 hàm, hàm 1 createOtomatParallelFrom2Otomat(A1, A2)

xây dựng ôtômat hợp song song đạt được từ 2 ôtômat bất kỳ, hàm 2

createOtomatParallel() sẽ gọi hàm createOtomatParallelFrom2Otomat(A1, A2) để tạo

ra một ôtômat hợp song song đạt được từ n > 1 ôtômat thành phần.

Hàm createOtomatParallelFrom2Otomat(A1, A2) xây dựng ôtômat hợp song

song đạt được từ 2 ôtômat bất kỳ A1, A2 được xây dựng theo kỹ thuật duyệt đồ thị theo chiều sâu đồng thời đối với 2 ôtômat như sau:

Bước 1: Ban đầu khởi tạo các thành phần của ôtômat hợp song song A = (L, l0,

, X, I, E) như sau: L = , E = , I = ,  = , X = X1  X2, l0 = {l01, l02}.

Bước 2: Xuất phát từ tập các đỉnh xuất phát của ôtômat thành phần A1, A2: l0 = {l01, l02}, và khi đó ta có L = { l0}.

Bước 3: Với mỗi đỉnh li = {li1, li2} L, nếu tồn tại phép chuyển ei= < li,i,ai,λi, li’>. Nếu ei là phép chuyển đồng bộ (tức ei E1 và ei E2) thì li’ = {li’1, li’2} thỏa mãn 2 điều kiện I(li’) = I(li’1)  I(li’2) ≠  và i= i1∩ i2 ≠ . Nếu ei là phép chuyển cục bộ (tức hoặc ei  E1 hoặc ei  E2) thì li’ = {li’1, li2} (hoặc li’ = {li1, li’2}), I(li’) = I(li’1) (hoặc I(li’) = I(li’2)) và i= i1(hoặc i= i2).

Khi đó nếu li’  L thì thêm li’ vào L, nếu phép chuyển ei E thì thêm ei vào E. và ưu tiên phép chuyển đồng bộ trước. Tức là nếu ailà nhãn (hành động) đồng bộ thì phải thực hiện phép chuyển đồng bộ.

Bước 4: Thuật toán dừng khi không còn đỉnh mới để di chuyển nữa.

Để cài đặt thuật toán này ta sử dụng một ngăn xếp S để lưu lại đường đi, mỗi phần tử S gồm 2 thành phần:

1) Thành phần 1: Tên vị trí x và tập Ax các đỉnh kề của đỉnh x trong của ôtômat A1 chưa được thăm bởi đỉnh {x, y} của ôtômat A.

2) Thành phần 2: Tên vị trí y và tập Ay các đỉnh kề của đỉnh y trong của ôtômat A2 chưa được thăm bởi đỉnh {x, y} của ôtômat A.

Ví dụ: Ngăn xếp S được thể hiện bằng cấu trúc mảng trong ngôn ngữ lập trình PHP như sau:

$S = array(

i => array( //thông tin đỉnh thứ i+1 trong đường đi x => array(vx1,v x2,…,v xk), //đỉnh x và các đỉnh kề với x y => array(vy1,v y2,…,v yk) //đỉnh y và các đỉnh kề với y ),

);

Các biến toàn cục được sử dụng trong thuật toán gồm có: <x, y> chỉ đỉnh cuối cùng của S, <xnext1, ynext2> chỉ đỉnh tiếp theo sẽ bổ sung vào S, Syschr lưu tập các nhãn đồng bộ của 2 ôtômat A1, A2. Hàm Adj(x, Ai) trả về tập các đỉnh kề của đỉnh x trong ôtômat Ai. Hàm getSyschr(A1, A2) trả về tập các nhãn chuyển đồng bộ. Hàm Push(<x, y>, Adj(x, A1), Adj(y, A2), S) thêm đỉnh <x, y> và tập Ax = Adj(x, A1), Ay = Adj(y, A2) vào cuối S. Hàm getSucc(x, y, xnext1, ynext2, S, Syschr) tìm và trả về đỉnh <x, y> đỉnh cuối trong S và đỉnh tiếp theo <xnext1, ynext2> thêm vào S (lưu ý: mỗi đỉnh <xnext1, ynext2> chỉ xuất hiện 1 lần trong S) đồng thời loại xnext1 khỏi tập Ax

và loại ynext2 khỏi Ay. Hàm pop(S) loại phần tử cuối ra khỏi S. Cuối cùng thuật toán trả về ôtômat hợp song song A của 2 ôtômat A1, A2. Sơ đồ các thuật toán

createOtomatParallelFrom2Otomat(A1, A2) và createOtomatParallel được cho trong

{Input: A1 = (L1, l01, 1, X1, I1, E1), A2 = (L2, l02, 2, X2, I2, E2) {Output: Ôtômat hợp song : A = (L,l0,  ,X,I,E)}

Function createOtomatParallelFrom2Otomat(A1, A2): Otomat; begin

//Khởi tạo otomat hợp song song A

L = ; l0 = {l01,l02};  = ; X = X1  X2; I = ; E = ; S = ;

Syschr = getSyschr(A1, A2);

push(<l01,l02>, Adj(l01, A1), Adj(l02, A2), S);

Thêm mới đỉnh < l01,l02> với hệ số LDI là tổng các hệ số LDI của 2 đỉnh l01,l02 và bất biến I(l01)  I(l01) vào L;

while S ≠  do begin

getSucc(l1, l2,lnext1,lnext2, S, Syschr); if lnext1 = null hoặc lnext2 = null then begin

pop(S); loop; {quay lui} end;

if I(lnext1)  I(lnext2) ≠  then begin

Bổ sung <lnext1,lnext2> với hệ số LDI là tổng các hệ số LDI của 2 đỉnh lnext1,lnext2 và bất biến I(lnext1)  I(lnext2) vào L;

end;

if {e = (<l1, l2>, , a, λ, <lnext1,lnext2>) có  ≠ } then begin

Bổ sung cung (<l1, l2>,<lnext1,lnext2>) có nhãn a, ràng buộc 

và tập các đồng hồ reset λ vào E; end;

if (<lnext1,lnext2>  S) then begin

push(<lnext1,lnext2>, Adj(lnext1, A1), Adj(lnext2, A2), S); end;

end; return A; end;

{Input: Ai = (Li, l0i, i, Xi, Ii, Ei), i = 1,2,…, n} {Output: Ôtômat hợp song : A = (L,l0,,X,I,E)} Function createOtomatParallel: Otomat; begin for i = 1 to n do begin if (i == 1) then begin A = createOtomatParallelFrom2Otomat(Ai, Ai+1); end; if (i > 1) then begin A = createOtomatParallelFrom2Otomat(A, Ai+1); end; end; return A; end;

Bảng 3.2: Thuật toán xây dựng ôtômat hợp song song tổng quát 3.1.2. Thuật toán xây dựng đồ thị vùng đạt được nguyên 3.1.2. Thuật toán xây dựng đồ thị vùng đạt được nguyên

Thuật toán xây dựng đồ thị vùng đạt được nguyên được mô tả trong bảng 4.1 ở trang 65 trong Luận án tiến sĩ Toán học của TS. Phạm Hồng Thái như sau.

{input: ôtômat thời gian A}

{output: đồ thị vùng đạt được nguyên RG =(V,E)} Function Integral-Reachability-Graph;

Begin

V = {<s0,π0>}; E = ; while (true) do begin

if mọi đỉnh trong V đã được thăm then exit; lấy v = <s,π>  V là đỉnh chưa được thăm; for với mỗi phép chuyển e = (s, φ ,a,λ,s’) do begin

for d =0 to K do begin

if (π + d)[λ := 0] |= I(s’) then loop; π’ =(π + d)[λ := 0];

if <s’,π’>  V then bổ sung <s’,π’> vào V; if (<s,π>,<s’,π’>)  E then begin

bổ sung e = (<s,π>,<s’,π’>) vào E; if π + d = πK then l(e)=u(e)=d; else begin l(e)=d; u(e)=; end; end ;

end; end;

đánh dấu <s,π> đã được thăm; end ;

End.

Bảng 3.3: Thuật toán xây dựng đồ thị vùng đạt được nguyên

3.1.3. Thuật toán xây dựng đồ thị trọng số G phục vụ kiểm chứng LDI

Ý tưởng: Tư tưởng cơ bản trong xây dựng đồ thị trọng số G là “rời rạc hóa” đồ thị đạt được nguyên RG bằng cách xây dựng mỗi cung (vi,vj,[l,u]) sẽ được thay bằng một họ các đường đi nối vi, vj sao cho độ dài (trọng số) của các đường đi lần lượt là các số nguyên l, l+1, … , u. Tức cung (vi,vj,[l,u]) được cụ thể hóa thành u-l-1 đường đi nối vi, vj thể hiện tính rời rạc hóa được của LDI. Điều này được thực hiện trên giả thiết RG không chứa cung vô hạn.

Thuật toán xây dựng đồ thị trọng số G = (V,E,) từ RG = (V1,E1) (không chứa cung vô hạn) được thực hiện theo các bước sau:

Bước 1: V = V1, E = E1.

Bước 2: Đối với mỗi cung e = (vi,vj,[lij,uij]) tập đỉnh V, cung E và hàm trọng số

: V  E  R của G được mở rộng thành: 1. V = V  { 1, 2,..., uij1 ij ij ij v v v } và (vijk ) = cvi , với k = 0,1,2,…, uij-1 (với qui ước vij0 cho vi và uij

ij

v cho vj),

3. E = E  {(vijk,vijk1)|k=0..uij-1}, và (vijk,vijk1) = 1, k = 0..uij-1, 4. E = E  {(vijk,vj)|k = lij..uij-1}, và (vijk,vj) = 0, k = lij..uij-1. Chú ý: Trường hợp lij  uij đồ thị sẽ có 2 cung từ uij1

ij

v đến vj, một cung có trọng số 1 và cung còn lại có trọng số 0 (xem hình bên dưới). Để đảm bảo G là đồ thị đơn ta sẽ “chia đôi” cung có trọng số 0 thành 2 cung bằng cách thêm đỉnh uij

ij

v và cung này

được thay bằng 2 cung ( uij1

ij

v , uij

ij

v ) và ( uij

ij

v ,vj). Thuật toán này sẽ được cụ thể hóa trong phần cài đặt, xem cài đặt này trong phần Phụ lục A.

Hình sau đây minh họa cho việc xây dựng G từ một đồ thị RG đơn giản với 2 cung.

Một phần của tài liệu luận văn: phân tích, thiết kế và cài đặt kiểm chứng một hệ thời gian thực (đh quốc gia hà nội) (Trang 25 - 31)

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

(71 trang)