BÀI TẬP LỚN SỐ 2 MÔN MÔ HÌNH HÓA
1. Nội dung đề bài
Đề số 35: Định kỳ ôtô phải mang đến trạm kiểm tra và sửa chữa. Xác suất ôtô phải
qua sửa chữa là p. Thời gian sửa chữa tùy thuộc vào mức độ hỏng hóc và thời gian
trung bình sửa chữa 1 ôtô là Ttb giờ. Sau khi sửa chữa ôtô lập rời khỏi trạm ngay
lập tức . Hãy mô phỏng trạm sửa chữa nói trên:
- Thời gian để kiểm tra hết 100 ôtô
- Số ôtô phải qua sửa chữa
- Thời gian để sửa chữa hết tất cả các ôtô phải qua sửa chữa, cho biết
λ 1/giờ 0,1 0,2 0,3 0,4
Ttb, giờ 0,25 0,5 0,25 0,5
2. Phân tích đề bài và tóm tắt phương pháp mô hình hóa
Phân tích đề bài
Hệ thống gồm các phần tử nối nối tiếp
Độ tin cậy của hệ thống không thể vượt quá độ tin cậy của phần tử nhỏ nhất
1
n
i
Pi
=
∏
Nâng cao độ tin cậy bằng cách nâng cao độ tin cậy của khâu yếu nhất.
Ta sử dụng phương pháp tạo số ngẫu nhiên có phân bố mong muốn. Ở bài toán này
ta sử dụng hàm tạo số ngẫu nhiên trong khoảng (0,1)
Tóm tắt phương pháp mô hình hóa
Các bước thực hiện:
• Xác định phân bố của dòng sự kiện.
1
1
0
≥
START
Nhập số liệu
p, λ, Ttb
tong = 0, i=0
U=Rnd*1
λ
i=i+1 , tong = tong + t
µ
tongsc = tongsc + tsc
i<100
IN KET QUA
STOP
• Thực hiện tạo ra số ngẫu nhiên dựa theo phân bố của dòng sự kiện.
• So sánh kết các giá trị ngẫu nhiên vừa tạo được với mốc chuẩn nào đó
để thu được một trạng thái cần xem xét.
• Thử nghiệm nhiều lần như trên để thu được tập các kết quả về hệ ngẫu
nhiên cần mô phỏng. Nếu số lần thử nghiệm càng lớn thì tính chính
xác càng cao.
3. Phân tích các biến ngẫu nhiên
Sự hỏng hóc của các phần tử là hoàn toàn ngẫu nhiên
Số phần tử hỏng hóc cũng ngẫu nhiên. Thời điểm xảy ra hỏng hóc cũng là ngẫu
nhiên không thể biết trước được. Ta coi dòng sự kiện về sự hỏng hóc của các phần
tử là dòng tối giản vì:
* Dòng dừng: cường độ xảy ra hỏng hóc = const
* Không hậu quả: các sự kiện xảy ra có tính độc lập
* Toạ độ: tại mỗi thời điểm chỉ có một sự kiện xảy ra
Hệ thống gồm 3 phần tử mắc nối tiếp có các hệ số tin cậy theo lý thuyết. Để đánh
giá độ tin cậy của chúng, ta lấy các biến ngẫu nhiên , , với ~ U(0,1) để so sánh. Sau
nhiều lần lấy các bộ số đó, ta so sánh và . Như vậy các biến ngẫu nhiên trong bài
này là
4. Phân tích thuật giải
• p1, p2, p3 là độ tin cậy của các phần tử trên lý thuyết. Ta tính độ tin cậy của
hệ thống lý thuyết:
1
n
i
Pi
=
∏
• Lấy số ngẫu nhiên ~ U(0,1)
và là các biến trung gian có giá trị ban đầu bằng 0
N là số lần thử (N = 100, 1000, 3000)
Ta so sánh nếu và và thì = , ngược lại ta tính = +1. So sánh đến khi nào
i = N
• Độ tin cậy thực nghiệm =
• Chọn số lần thử nghiệm N= 100, 1000, 3000
5. Lưu đồ thuật toán
2
6. Điều kiện mô phỏng
- Số lần so sánh N phải đủ lớn ( N> 100)
- p1, p2, p3 đã cho theo lý thuyết
- Điều kiện mô phỏng: ~ U(0,1), ~ U(0,1), i< N
3
- và < 1 , sai số giữa hai giá trị không quá lớn
7. Viết chương trình mô phỏng
Dùng Visual Basic 6.0
Option Explicit
Const e = 2.71828
Dim u As Double
Dim lamda As Double
Dim Ttb As Double
Dim p As Double
Dim xecohuhong(1 To 100) As Boolean
Dim Timeforchecking(1 To 100) As Double
Dim Tchecking As Double
Dim Tmending As Double
Dim Timeformending(1 To 100) As Double
Dim Tongsoxephaisua As Long
Dim soxedasua(0 To 100) As Long
Dim Tongthoigiansua As Double
Dim Tongthoigiankiemtra As Double
Dim i As Long 'su dung trong cac vong lap
Dim i1 As Long 'nt
Dim i2 As Long 'nt
Dim i3 As Long 'nt
Dim i4 As Long 'nt
Dim biendem As Long ' biendem co tac dung lien ket mang cac
4
'thong so da tinh toan de truyen so lieu vao chuong trinh
'duoc thuc hien trong cac timer
Dim a As Double
'bien darun giup kiem tra chuong trinh da chay lan nao chua
Dim Dacapnhatthongso As Boolean
Dim darun As Boolean
Private Sub Cmdexit_Click()
Dim a As Double
a = MsgBox("Do you want to exit?", vbQuestion + vbYesNo, " Exit?")
If a = 6 Then
End
End If
End Sub
Private Sub CmdReport_Click()
'Neu chuong trinh chua chay lan nao thi nut lenh nay
'se co tac dung nhu la nut len run cua chuong trinh vay
'**********************************************
If Not darun Then
darun = True
If Not Dacapnhatthongso Then
capnhatthongso
End If
5
Khoitaotudau
Tinhtoan
Timer1.Enabled = True
End If
'**********************************************
Label14.Caption = CStr(Round(Tongsoxephaisua, 2))
Label15.Caption = CStr(Round(Tongthoigiankiemtra, 2))
Label16.Caption = CStr(Round(Tongthoigiansua, 2))
End Sub
Private Sub CmdRun_Click()
'chay moi thi cac thong so cua 100 xe da thay doi, vi vay ma
'cac nhan thong so cua 100 xe phai duoc xoa di
'***********************************************
Label14.Caption = ""
Label15.Caption = ""
Label16.Caption = ""
'***********************************************
darun = True
If Not Dacapnhatthongso Then
capnhatthongso
End If
Khoitaotudau
Tinhtoan
6
Timer1.Enabled = True
End Sub
Private Sub Command1_Click()
Text1.Text = "0.1"
Text2.Text = "0.25"
Text3.Text = "0.2"
lamda = 0.1
Ttb = 0.25
p = 0.2
Khoitaotudau
End Sub
Private Sub Form_Load()
Form1.Move 0, 0, Screen.Width, Screen.Height
Form1.DrawWidth = 1
Form1.Line (25, 25)-(Screen.Width - 25, 25), RGB(1000, 0, 1000)
Form1.Line (Screen.Width - 25, 25)-(Screen.Width - 25, Screen.Height - 25),
RGB(1000, 0, 1000)
Form1.Line (Screen.Width - 25, Screen.Height - 25)-(25, Screen.Height - 25),
RGB(1000, 0, 1000)
Form1.Line (25, Screen.Height - 25)-(25, 25), RGB(1000, 0, 1000)
Khoitaotudau
End Sub
7
Private Sub khoitaothongso()
Text1.Text = "0.1"
Text2.Text = "0.25"
Text3.Text = "0.2"
lamda = 0.1
Ttb = 0.25
p = 0.2
Dacapnhatthongso = False
darun = False
End Sub
Private Sub Khoitaotudau()
Timer1.Enabled = False
Timer2.Enabled = False
Timer3.Enabled = False
'***********************************************
' dua cac tranh o to tro ve vi tri chuan bi chay
For i = 1 To 16
Image3(i).Move -15, 0, 0, Picture2.Height
Next i
Image3(0).Move -15, 0, Picture2.Width, Picture2.Height
'***********************************************
'Khoi dong lai vi tri thanh progress
'***********************************************
Picphantram.Move -Picprogress.Width, 0, Picprogress.Width, Picprogress.Height
8
'***********************************************
'Khoi tao lai gia tri hien thi tren cac nhan
'***********************************************
Label6.Caption = " 0"
Label7.Caption = " 0"
Label8.Caption = " 0"
Label9.Caption = " 0"
Label14.Caption = " "
Label15.Caption = " "
Label16.Caption = " "
Label17.Caption = " Welcome!"
'***********************************************
'Dua oto ve vi tri san sang chay
'***********************************************
Picture3.Move (-Picture3.Width)
'***********************************************
End Sub
Private Sub capnhatthongso()
Dacapnhatthongso = True
lamda = CDbl(Text1.Text)
Ttb = CDbl(Text2.Text)
p = CDbl(Text3.Text)
End Sub
Private Sub Tinhtoan()
9
'khoi dong lai cac thong so
biendem = 0
i = 0
i1 = 0
i2 = 0
i3 = 0
'Tinh toan va ghi cac gia tri tuc thoi vao mot mang gia tri
'***********************************************
For i = 1 To 100
u = Rnd
Tchecking = -1 / lamda * Log(u) / Log(e)
Timeforchecking(i) = Tchecking
u = Rnd
If u >= p Then
xecohuhong(i) = True
soxedasua(i) = soxedasua(i - 1) + 1
Else
soxedasua(i) = soxedasua(i - 1)
xecohuhong(i) = False
End If
If xecohuhong(i) then
u = Rnd
Tmending = -Ttb * Log(u) / Log(e)
Timeformending(i) = Tmending
10
Else
Timeformending(i) = 0
End if
Next i
'***********************************************
'Tinh tong cac thong so tuc thoi vao cac bien se hien thi
'trong bang Report
'***********************************************
Tongsoxephaisua = soxedasua(100)
Tongthoigiansua = 0
Tongthoigiankiemtra = 0
For i = 1 To 100
Tongthoigiansua = Tongthoigiansua + Timeformending(i)
Tongthoigiankiemtra = Tongthoigiankiemtra + Timeforchecking(i)
Next i
'***********************************************
End Sub
Private Sub Image3_Click(Index As Integer)
End Sub
Private Sub Text1_Change()
Dacapnhatthongso = False
11
darun = False
End Sub
Private Sub Text1_Validate(Cancel As Boolean)
If Not IsNumeric(Text1.Text) Then
Cancel = True
End If
End Sub
Private Sub Text2_Change()
Dacapnhatthongso = False
darun = False
End Sub
Private Sub Text2_Validate(Cancel As Boolean)
If Not IsNumeric(Text2.Text) Then
Cancel = True
End If
End Sub
Private Sub Text3_Change()
Dacapnhatthongso = False
darun = False
End Sub
12
Private Sub Text3_Validate(Cancel As Boolean)
If Not IsNumeric(Text3.Text) Then
Cancel = True
End If
End Sub
Private Sub Timer1_Timer()
Picture3.Move Picture3.Left + 30
If Picture3.Left >= 6000 Then
Picture3.Left = -Picture3.Width
'tang bien dem len 1 de goi so lieu moi trong mang so lieu da tinh
biendem = biendem + 1
'hien thi cac thong so tren cac nhan tu mang da tinh toan
'****************************************************
Label6.Caption = " " & CStr(biendem)
Label8.Caption = ""
Label9.Caption = ""
'****************************************************
Timer1.Enabled = False
'checking
Label17.Caption = " Checking "
'Hien thi thoi gian kiem tra oto tren man hinh
Label8.Caption = " " & CStr(Round(Timeforchecking(biendem), 3)) & " h"
13
'Khoi dong timer2 de bat dau qua trinh kiem tra oto
Timer2.Enabled = True
End If
End Sub
'Timer2 dung dieu khien hinh anh oto thay doi lien tuc
'*************************************************
Private Sub Timer2_Timer()
If i1 <> 16 Then
i2 = i1 + 1
End If
If i1 = 16 Then
i2 = 0
End If
Image3(i2).Move Image3(i2).Left, Image3(i2).Top, Image3(i2).Width + 40
Image3(i1).Move Image3(i1).Left + 40, 0, Image3(i1).Width - 40
If Image3(i2).Width >= Picture2.Width Then
'dua buc tranh ve ben trai chuan bi cho vong lap lai sau
Image3(i1).Move -15, 0, 0
'tang i1 de chuyen doi sang buc tranh tiep theo
i1 = i1 + 1
' dua ra thong bao ve thong so lien quan den chiec xe hien tai
Label7.Caption = " " & CStr(soxedasua(biendem))
Label9.Caption = " " & CStr(Round(Timeformending(biendem), 3)) & " h"
'thong bao xe hong can phai sua chua
14
'hoac xe khong co hu hong > OK
If xecohuhong(biendem) Then
Label17.Caption = " Need to repair!"
Else
Label17.Caption = "Your car is OK"
End If
'dung lai doi sua chua
Timer2.Enabled = False
'Khoi dong timer3 de bat dau qua trinh sua chua
Timer3.Enabled = True
End If
If i1 > 16 Then
i1 = 0
End If
'***************************************************
End Sub
Private Sub Timer3_Timer()
'Bien i3 i4 co tac dung la cac bien dem thoi gian tao ra
'cac ham tre thoi gian theo y muon
i3 = i3 + 1
i4 = i4 + 1
If i4 >= 100 Then
15
If xecohuhong(biendem) Then
If Picphantram.Left < 0 Then
Label17.Caption = " Being repaired "
Picphantram.Move Picphantram.Left + 10
i3 = 0
End If
'sau khi sua chua xong dua ra thong bao completed
'***************************************
If Picphantram.Left >= 0 And i3 = 0 Then
Label17.Caption = " Completed! "
End If
'***************************************
End If
End If
If i3 >= 200 Then
i4 = 0
If biendem < 100 Then
Label17.Caption = " Welcome!"
Timer3.Enabled = False
Timer1.Enabled = True
End If
16
'Kiem tra xong 100 xe roi thi hien thi bang report thong bao
'cho nguoi thi hanh biet ket qua chay cua chuong trinh
'*******************************************************
If biendem >= 100 Then
Label17.Caption = " Welcome! "
Label14.Caption = Tongsoxephaisua
Label15.Caption = Tongthoigiankiemtra
Label16.Caption = Tongthoigiansua
Timer3.Enabled = False
End If
'*******************************************************
i3 = 0
Picphantram.Left = -Picphantram.Width
End If
End Sub
17
8. Thiết kế giao diện
18
9. Kết quả
10. Nhận xét, biện luận
Chương trình mô phỏng chạy đạt yêu cầu. Giao diện đảm bảo các yêu cầu :
nhập thông số của hệ từ bàn phím, in và lấy kết quả dưới dạng số và biểu đồ.
Kết quả thay đổi khi thông số đầu vào khác nhau, các giá trị thực nghiệm và
lý thuyết xấp xỉ bằng nhau cho thấy lý thuyết gần với thực nghiệm.
19
11. Tài liệu tham khảo
[1]. Kỹ năng lập trình VisualBasic 6- Nguyễn Tiến Dũng- NXB Thống Kê-
2001
[2]. Giáo trình mô hình hóa hệ thống-Khoa Điện Điện Tử Tàu Biển- Trường
Đại Học Hàng Hải-2011
20