p align="left">На анализируемой сети выбирается произвольный узел. Далее находят смежные ему узлы и соединяют с ним. Это происходит до тех пор, пока сеть не представится в виде одного узла - “точки” (в случае если, сеть связана) или множества узлов (если сеть не связана). Разработанный на основе всего выше изложенного алгоритм программы, в общем виде, отобразим на рисунке 2.1. Опишем с начала переменные, используемые в этом алгоритме: i, e и j - переменные используемые в циклах типа for - next основной процедуры расчета надежности сети; PlasResult - хранит число благоприятных исходов; x( ) - динамический массив, равномерно распределенных в интервале (0, 1) чисел; Nnoi - хранит текущий номер испытания; maxNnoi - хранит общее число испытаний; PP - хранит значение вероятности события - сеть связна; Imeny - хранит номер случайно выбранного узла; S( ) - динамический массив, для хранения номеров смежных узлов; Nnew - хранит информацию о наличии новых смежных вершин; sngStartWork(1, 2) - массив дат начала и конца расчета надежности сети; sngStartWorkSEC - хранит число секунд расчета надежности сети; bar - промежуточная переменная для хранения текущего номера испытаний. Рисунок 2.1 - Алгоритм расчета структурной надежности сети Отобразим более подробно алгоритмы тех процедур, которые непосредственно участвуют в определении события - сеть связна. Алгоритмы этих процедур разместим в порядке их вызова основной программой расчета структурной надежности сети связи методом статистического моделирования. Порядок вызова этих процедур и краткое описание их задачи сведем в таблицу 2.1. Таблица 2.1 - Процедуры определения связности сети |
Имя процедуры | Задача процедуры | | VektStrok Nnew, Imeny, S, A | Соединение смежных узлов | | SvjazNet Imeny, A, p | Проверка на единичность полученной вектор-строки | | FinishAnswer A, PlasResult, Imeny, p, S, Nnew | Вынесение решения о связности сети, проверка наличия новых смеж-ных узлов для формирования нового массива смежных узлов | | |
Рисунок 2.2 - Алгоритм процедуры “ VektStrok ” Рисунок 2.3 - Алгоритм процедуры “ SvjazNet ” Рисунок 2.4 - Алгоритм процедуры “ FinishAnswer ” 2.2.2 Алгоритм интерфейсной части программы расчета надежности сети методом статистического моделирования Приведем рисунок алгоритма программы интерфейса. 2.3 Разработка программы расчета структурной надежности методом статического моделирования 2.3.1 Разработка расчетной части программы расчета структурной надежности сети Option Explicit Dim A (200, 200) As Single, p As Integer Public maxNnoi As Single, flgstopuser As Boolean Private Sub firstStepp (A( ) As Single, x( ) As Single) Dim n As Integer Dim i As Integer Dim j As Integer n = 1 For i = 1 To ((FrmSSN.kolvouzlov) - 1) '4 For j = i + 1 To (FrmSSN.kolvouzlov) '5 If A (i, j) > 0 Then If x (n) < A (i, j) Then A (i, j) = 1 Else A (i, j) = 0 End If n = n + 1 End If A (j, i) = A (i, j) Next j Next i End Sub Private Sub VektStrok (Nnew, Imeny As Integer, S( ) As Integer, A( ) As Single) Dim k As Integer Dim j As Integer For k = 1 To (FrmSSN.kolvouzlov) If S (k) > 0 Then For j = 1 To (FrmSSN.kolvouzlov) A (Imeny, j) = A (Imeny, j) + A (k, j) If A (Imeny, j) > 1 Then A (Imeny, j) = 1 End If Next j End If Next k Nnew = 0 End Sub Private Sub SvjazNet (Imeny As Integer, A( ) As Single, p As Integer) Dim j As Integer p = 1 For j = 1 To (FrmSSN.kolvouzlov) If A (Imeny, j) = 0 Then p = 0 Exit Sub End If Next j End Sub Private Sub FinishAnswer (A( ) As Single, PlasResult As Integer, Imeny As Integer, p _ As Integer, S() As Integer, Nnew As Integer) Dim j As Integer Dim Pm (1 To 6) As Integer Dim Nbg As Integer, nUlvekt As Integer If p <> 0 Then PlasResult = PlasResult + 1 Exit Sub End If Nbg = 0 Nnew = 0 nUlvekt = 0 For j = 1 To (FrmSSN.kolvouzlov) If A (Imeny, j) = 1 Then Pm (j) = j Else: nUlvekt = nUlvekt + 1 End If Next j If nUlvekt = (FrmSSN.kolvouzlov) Then Exit Sub End If For j = 1 To (FrmSSN.kolvouzlov) If Pm (j) <> S (j) Then S (j) = Pm (j) Nnew = Nnew + 1 End If Next j End Sub Private Sub FormirNLmassWork ( ) Dim initm As Integer For initm = 1 To FrmSSN.kolvolin FrmSSN.numUZmu initm, FrmSSN.kolvouzlov, 2, na1, na2 A (na1, na2) = FrmSSN.UvmLN (initm) A (na2, na1) = A (na1, na2) Next initm End Sub Public Sub cmdrasch_workmod ( ) Dim i As Integer, j As Integer Dim PlasResult As Integer, e As Integer Dim x( ) As Single, C As Integer Dim Nnoi As Integer Dim PP As Currency, Imeny As Integer Dim S ( ) As Integer Dim Nnew As Integer Dim sngStartWork (1, 1 To 2) As Date Dim sngStartWorkSEC As Single, bar As Integer frmBrWk.PrgBarWSind.Min = 0: frmBrWk.PrgBarWSind.Max = 100 frmBrWk.PrgBarWSind.Visible = False frmBrWk.LblSwrE(1).Caption = 0 PlasResult = 0 ReDim Preserve x (FrmSSN.kolvolin) ReDim Preserve S (FrmSSN.kolvouzlov) Randomize For Nnoi = 1 To maxNnoi DoEvents If MdlWorkSpase.flgstopuser = True Then Exit For If Nnoi = 1 Then sngStartWork(1, 1) = Now sngStartWorkSEC = Timer frmBrWk.LblSwrE(1).Caption = sngStartWork(1, 1) End If For e = 1 To FrmSSN.kolvolin x (e) = Rnd Next e firstStepp A, x'1 Imeny = (((FrmSSN.kolvouzlov) - 1) * Rnd) + 1 S (Imeny) = Imeny For j = 1 To FrmSSN.kolvouzlov If A (Imeny, j) = 1 Then S (j) = j End If Next j VektStr: VektStrok Nnew, Imeny, S, A'2 SvjazNet Imeny, A, p'3 FinishAnswer A, PlasResult, Imeny, p, S, Nnew'4 If Nnew <> 0 Then GoTo VektStr End If For i = 1 To FrmSSN.kolvouzlov S (i) = 0 For j = 1 To FrmSSN.kolvouzlov A (i, j) = 0 Next j Next i bar = Nnoi frmBrWk.PrgBarWSind.Value = ((bar / maxNnoi) * 100) frmBrWk.PrgBarWSind.Visible = True Next Nnoi If MdlWorkSpase.flgstopuser = True Then Exit Sub PP = (PlasResult / maxNnoi) sngStartWorkSEC = (Timer - sngStartWorkSEC) sngStartWork (1, 2) = Now: frmBrWk.LblSwrE(0).Caption = sngStartWork(1, 2) UserFormVorkClosed sngStartWorkSEC, maxNnoi, PP, sngStartWork End Sub Private Sub UserFormVorkClosed (sngStartWorkSEC, maxNnoi, PP, sngStartWork) Dim work As Integer, TimeWork As String Dim bufchench1 As Date, bufchench2 As Currency If sngStartWork (1, 1) <> sngStartWork (1, 2) Then If (sngStartWork (1, 2) - sngStartWork (1, 1)) > sngStartWorkSEC _ And (sngStartWork (1, 2) - sngStartWork (1, 1)) < 1 Then GoTo 12 bufchench1 = (sngStartWork(1, 2) - sngStartWork(1, 1)) TimeWork = Str(bufchench1) Else 12: bufchench2 = sngStartWorkSEC TimeWork = Str (0) & Str (bufchench2) & " секунды" End If work = MsgBox("Расчет структурной надежности закончен !" & vbCrLf & Chr$(13) & "Число испытаний : " & maxNnoi & vbCrLf & "Вероятность связности : " & PP & vbCrLf & "Расчет длился около : " & TimeWork, vbInformation + vbOKOnly, " ") sngStartWork(1, 1) = 0: sngStartWork(1, 2) = 0 sngStartWorkSEC = 0: frmBrWk.PrgBarWSind.Value = 0 Unload frmBrWk End Sub 2.3.2 Разработка интерфейсной части программы расчета структурной надежности сети Интерфейсная часть программы состоит из четырех частей, а именно: первая, основная часть, располагается в файле формы основного окна “ FrmSSN ”; следующая часть располагается в файле формы окна расчета структурной надежности “ frmBrWk ”; третья часть программы находится в файле формы окна конфигурирования координатной сетки “ FrmPrWeb ”; четвертая, последняя, часть программы - в файле формы окна ввода числовой характеристики выбранной линии “ FrmNwORsZ ”. Приведем листинги данных частей, интерфейсной части программы расчета структурной надежности сети, в этом же порядке. Первая часть Option Explicit Public kolvouzlov As Integer, needFRsave As Boolean Public kolvolin As Integer Dim znak As Boolean, zamok As Boolean Dim x1 As Integer, y1 As Integer Dim x2 As Integer, y2 As Integer Dim MasKoLuZv(1 To 200, 1 To 5) As Single Dim keeCH As Boolean Dim deletealluz As Boolean, deletealllinsv As Boolean Dim keeAB As Boolean, testimonial As Boolean Dim testNyn As Boolean, change As Boolean Dim mlinesSV(1 To 400, 1 To 10) As Single, SFALNAME As String Const myORno As String = "sns" Dim zapros As Boolean Public poweb As Boolean Public shwebx As Single, shweby As Single Public bJampWeb As Boolean Private Sub svayzy (x1, x2, y1, y2, iduzla, Index, mlinesSV, kolvolin) Dim i As Integer, j As Integer On Error GoTo metSVx If deletealllinsv = True And kolvolin > 0 Then FrmSSN.Enabled = False FrmSSN.MousePointer = 3 For i = 1 To kolvolin For j = 1 To 10 mlinesSV(i, j) = 0 Next j: Next i kolvolin = 0 Else For i = 1 To kolvolin If mlinesSV(i, 1) = 0 Then mlinesSV(i, 1) = iduzla: mlinesSV(i, 2) = Index mlinesSV(i, 3) = x1: mlinesSV(i, 4) = y1 mlinesSV(i, 5) = x2: mlinesSV(i, 6) = y2 mlinesSV(i, 7) = 0 mlinesSV(i, 8) = 0: mlinesSV(i, 9) = 0 '-номера вершин (новые) mlinesSV(i, 10) = 0 '-вес линии Exit Sub End If Next i End If FrmSSN.Enabled = True FrmSSN.MousePointer = 0 brcoutSVX: Exit Sub metSVx: MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
|