1. Пользовательская функция СХЕМАГР
Формулы финальных вероятностей P(S = Si) = pi, i = 0, 1, … , n, схемы гибели и размножения приведены в [1], сведения по VBA Excel изложены в [2, 3]. Программный код пользовательской функции СХЕМАГР, возвращающей финальные вероятности, приведен в листинге 1.1.
Листинг 1.1. Код функции СХЕМАГР и ее описания
Function СХЕМАГР(Загрузки As Variant) As Variant
n = UBound(Загрузки)
ReDim L(0 To n)
ReDim p(0 To n)
p(0) = 1:L(0) = 1
For i = 1 To n
L(i) = L(i - 1) * Загрузки(i):p(0) = p(0) + L(i)
Next
p(0) = 1 / p(0)
For i = 1 To n
p(i) = L(i) * p(0)
Next
СХЕМАГР = p
End Function
Sub InstallFunc1()
Application.MacroOptions Macro:="СХЕМАГР", Description:=
"Возвращает финальные вероятности схемы гибели и " & _
"размножения по заданным загрузкам состояний, " & _
"начиная с состояния 0"
End Sub
Пример 1.1. В схеме гибели и размножения выполняются соотношения: λ0=1, λ1=2, λ2=3, μ1=0,5, μ2=1,5, μ3=2,5. Найти финальные вероятности.
Выделяется диапазон А1:D1, вызывается пользовательская функция СХЕМАГР и вводятся данные (рис. 1.1).
Рис. 1.1. Применение функции СХЕМАГР в примере 1.1
Команда Ctrl+Shift+Галочка (Ввод) возвращает в выделенном диапазоне значения финальных вероятностей (рис. 1.2).
Рис. 1.2. Финальные вероятности в примере 1.1
2. Пользовательская функция ЭРЛАНГ
Финальные вероятности n-канальной СМО с отказами находятся по формулам Эрланга [1, с. 351]. Характеристики эффективности системы:
Рпростой = р0, Ротк = рn, Q = 1 – рn, А= λ(1 – рn), k=ρ(1-pn),
k – среднее число занятых каналов. Код пользовательской функции ЭРЛАНГ, возвращающей финальные вероятности n-канальной СМО с отказами и значения параметров Q, А, k, приведен в листинге 2.1.
Листинг 2.1. Код функции ЭРЛАНГ и ее описания
Function ЭРЛАНГ(Инт_заяв, Инт_обсл, Каналов, _
P_F As String) As Variant
n = Каналов
ReDim L(0 To n)
ReDim p(0 To n)
Dim c(1 To 3)
p(0) = 1:L(0) = 1
For i = 1 To n
L(i) = L(i - 1) * Инт_заяв / Инт_обсл / i
p(0) = p(0) + L(i)
Next
p(0) = 1 / p(0)
For i = 1 To n
p(i) = L(i) * p(0)
Next
c(1) =1 - p(n):c(2) = Инт_заяв * c(1)
c(3) = Инт_заяв / Инт_обсл * c(1)
Select Case P_F
Case “P”
ЭРЛАНГ = p
Case “F”
ЭРЛАНГ = c
End Select
End Function
Sub InstallFunc2()
Application.MacroOptions Macro:="ЭРЛАНГ", Description:=
"При Р возвращает финальные вероятности, при F – " & _
"значения Q, A и среднее число занятых каналов " & _
"СМО с отказами"
End Sub
Пример 2.1. В 2-канальной СМО с отказами λ=8, μ=6.
Найти: 1. Финальные вероятности; 2. Относительную пропускную способность; 3. Абсолютную пропускную способность; 4. Среднее число занятых каналов.
Выделяется диапазон А1:С1, вызывается пользовательская функция ЭРЛАНГ, вводятся числовые данные и “P” (рис. 2.1).
Рис. 2.1. 1-е применение функции ЭРГАНГ в примере 2.1
Команда Ctrl+Shift+Галочка (Ввод) возвращает в выделенном диапазоне значения финальных вероятностей (рис. 2.2).
Рис. 2.2. Финальные вероятности в примере 2.1
Выделяется диапазон А3:С3, вызывается пользовательская функция ЭРЛАНГ, вводятся числовые данные и “F” (рис. 2.3).
Рис. 2.3. 2-е применение функции ЭРГАНГ в примере 2.1
Команда Ctrl+Shift+Галочка (Ввод) возвращает в выделенном диапазоне значения пунктов 2-4 (рис. 2.4).
Рис. 2.4. Значения пунктов 2–4 примера 2.1
3. Пользовательская функция ОЧЕРЕДЬ
Код пользовательской функции ОЧЕРЕДЬ, возвращающей вероятность простоя n-канальной СМО с очередью, вероятность отказа, среднее число заявок в очереди, среднее число заявок в системе, среднее время ожидания заявки в очереди, среднее время пребывания заявки в системе, приведен в листинге 3.1.
Листинг 3.1. Код функции ОЧЕРЕДЬ и ее описания
Function ОЧЕРЕДЬ(Инт_заяв, Инт_обсл, _
Каналов, Условия_0_m) As Variant
Dim c(0 To 5) As Single
Dim w As Single, n As Integer, m As Integer, h As Integer
Dim x As Single, y As Single, S() As Single
w = Инт_заяв / Инт_обсл
n = Каналов:m = Условия_0_m:ReDim S(0 To n + 1)
h = Application.WorksheetFunction.Fact(n)
x = 1:S(0) = 1
For i = 1 To n + 1
If i < n + 1 Then
S(i) = S(i - 1) * w / i:x = x + S(i)
Else
S(i) = S(i - 1) * w / n / (1 - w / n)
y = x + S(i) * (1 - (w / n) ^ m):x = x + S(i)
End If
Next
x = 1 / x:y = 1 / y
If Условия_0_m = 0 Then
c(0) = x:c(1) = 0
c(2) = w ^ (n + 1) * x / h / n / (1 - w / n) ^ 2
c(3) = w ^ (n + 1) * x / h / n / (1 - w / n) ^ 2 + w
Else
c(0) = y
c(1) = w ^ (n + m) * y / h / n ^ m
c(2) = y * w ^ n * (w / n - (m + 1) * (w / n) ^ _
(m + 1) + m * (w / n) ^ (m + 2)) / h / (1 - w / n) ^ 2
c(3) = y * w ^ n * (w / n - (m + 1) * (w / n) ^ _
(m + 1) + m * (w / n) ^ (m + 2)) / h / + _
(1 - w / n) ^ 2 + w * (1 - c(1))
End If
c(4) = c(2) / Инт_заяв
c(5) = c(3) / Инт_заяв
ОЧЕРЕДЬ = c
End Function
Sub InstallFunc3()
Application.MacroOptions Macro:="ОЧЕРЕДЬ", Description:=
"Возвращает вероятность простоя n-канальной СМО " & _
"с очередью, вероятность отказа, средние " & _
"значения заявок в очереди, заявок в системе, " & _
"время в очереди, время в системе"
End Sub
Параметр Условие_0_m принимает значение 0, если очередь неограниченная, иначе значение параметра равно числу мест в очереди.
Пример 3.1. В 1-канальной СМО с неограниченной очередью λ=2, μ=3. Найти: 1. Вероятность простоя; 2. Вероятность отказа; 3. Среднее число заявок в очереди; 4. Среднее число заявок в системе; 5. Среднее время ожидания заявки в очереди; 6. Среднее время пребывания заявки в системе.
Выделяется диапазон 1х6, например, диапазон А1:F1, вызывается функция ОЧЕРЕДЬ и вводятся данные (рис. 3.1).
Рис. 3.1. Применение функции ОЧЕРЕДЬ в примере 3.1
Команда Ctrl+Shift+Галочка (Ввод) возвращает в выделенном диапазоне значения требуемых параметров (рис. 3.2).
Рис. 3.2. Полученные результаты в примере 3.1
Пример 3.2. Решить задачу примера 3.1, если число каналов обслуживания равно 2, а число мест в очереди равно 3.
Выделяется диапазон А1:F1, вызывается функция ОЧЕРЕДЬ и вводятся данные (рис. 3.3).
Рис. 3.3. Применение функции ОЧЕРЕДЬ в примере 3.2
Возвращаемые результаты показаны на рисунке 3.4.
Рис. 3.4. Полученные результаты в примере 3.2