Рис.7. Зависимость оптимального числа каналов nkот параметров Тз.ср и Тобс.ср
4. ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ
В интегральной среде VisualBasic 5.0 создайте программу «Модель бензоколонки», текст которой приведен ниже. Произведите отладку программы с целью ликвидации формальных ошибок. Произведите проверку программы расчетом. Подставьте те же исходные данные, которые были выбраны в приведенном выше примере. Убедитесь в том, что результаты расчетов практически совпадают. Произведите самостоятельное исследование закономерностей функционирования фирмы с помощью алгоритмической модели. Выберите исходные данные, проведите расчеты и проанализируйте результаты моделирования.
1. Стартовая форма frmForm1
1.1. Таблица свойств формы 1 (макет на рис. 2)
Объект | Свойства | Установки |
Форма 1 | NameCaption | FrmForm1Модель СМО с 1,2 или 3 каналами |
Командная кнопка 1 | NameCaption | Command1Расчет |
Командная кнопка 2 | NameCaption | Command2Расчет |
Командная кнопка 3 | NameCaption | Command3Выход |
1.2. Процедуры обработки прерываний
Private Sub Command1_Click()
Nkan = Val(txtNk): TZcp = Val(txtTzs): TObcp = Val(txtTobs)
TWmax = Val(txtTwm): Nr = Val(txtNp)
Call Model2
End Sub
Private Sub Command2_Click()
FrmForm1.txtResult = “”
End Sub
Private Sub Command3_Click()
End
End Sub
2. Форма frmForm2
2.1. Таблица свойств формы 2
Объект | Свойства | Установки |
Форма 2 | NameEnabled | Form2False |
2.2. Процедура обработки прерываний
Private Sub Form2_Load()
End Sub
3. Модули общего назначения
‘Описание констант и массивов
PublicConstTfin = 10 ‘время окончания работы
PublicConstNzMax = 40 ‘максимальное число заявок
PublicTz(Nzmax) ‘массив времени поступления заявок
PublicNob(3) AsInteger‘число обслуженных заявок в каналах
PublicTKO(3) ‘время окончания обслуживания заявок
Public TScp, Tobcp, Twmax, Tkmin, TH, TK, z, Ts
Public Snob As Long, Iz As Integer, Nz As Integer, Ir As Integer
Public Nr As Integer, J As Integer, Nkan As Integer, Jmin As Integer 180
Public Sub Model2()
‘Главный модуль
Snob = 0 ‘сумматор числа обслуженных заявок
frmForm1.Enabled = False: FrmForm1.Visible = False
frmForm2.Enabled = True: FrmForm2.Visible = True
ForIr = 1 ToNr‘начало цикла случайных реализаций
frmForm2.Cls‘очистка окна формы 2
frmForm2.CurrentX = 600: frmForm2.CurrentY = 200
frmForm2.Print “Расчет ” & Ir & “-й реализации” ‘вывод показаний ‘счетчика числа реализаций в окно формы 2 ‘обнуление локальных переменных
Nz = 0 ‘обнуление числа заявок
Nob(1) = 0: Nob(2) = 0: Nob(3) = 0 ‘обнуление числа обслуженных заявок
TKO(1) = 0: TKO(2) = 0: TKO(3) = 0 ‘время окончания обслуживания
‘заявок в 1, 2 и 3-м каналах
CallZAJAVKA‘процедура «Поток заявок»
ForIz = 1 ToNz‘начало цикла обслуживания заявок
‘выбор номера канала
TKmin = TKO(1)
For J = 1 To Nkan
If TKO(J) < Tkmin Then Tkmin = TKO(J): Jmin = J
NextJ
CallSERVICE‘процедура обслуживания заявки
NextIz‘конец цикла обслуживания заявок
‘суммарное число обслуженных заявок:
Snob = Snob + Nob(1) + Nod(2) + Nob(3)
NextIr‘конец цикла реализаций
FrmForm2.Enabled = False: FrmForm2.Visible = False
FrmForm1.Enabled = True: FrmForm1.Visible = True
‘показательэффективности:
Cont = Snob/Nr – 1 + 0.5 * Nkan – 0.5 * Nkan * Nkan
frmForm1.txtResult = Format$(Cont, “#.##”)
End Sub
SubSAJAVKA
‘Процедура «Поток заявок»
T = 0 ‘модельное время
ForJ = 1 ToNzmax‘начало цикла формирования заявок
z = Rnd(1) ‘случайная величина с равномерным распределением
Ts = T – TZcp * Log(z) ‘случайное время поступления заявки
IfTs > TfinThenExitFor‘условие прекращения приема заявок
Nz = Nz + 1 ‘счетчик числа заявок
Tz(Nz) = Ts‘фиксированное время поступления заявки
T = Ts‘изменение модельного времени
NextJ‘конец цикла формирования заявок
End Sub
Sub SERVICE
‘Процедура «Обслуживания заявок»
J = Jmin‘номер канала
DTWait = 0 ‘начальное значение времени ожидания
TH = Tz(Iz) ‘время начала обслуживания
IfTz(Iz) < TKO(J) Then‘проверка необходимости коррктировки
‘корректировка времени начала обслуживания:
DTWait = TKO(J) – Tz(Iz) ‘период ожидания
If DTWait > Twmax Then Exit Sub
‘время начала обслуживания
TH = TKO(J)
EndIf
Z = Rnd(1) ‘случайная величина с равномерным ‘распределением в интервале (0,1)
TK = TH – Tobcp * Log(z) ‘время окончания обслуживания
If TK > Tfin Then
TKO(J) = Tfin: Exit Sub
EndIf
Nob(J) = Nob(J) + 1 ‘увеличение числа обслуженных заявок
TKO(J) = TK‘время окончания обслуживания
End Sub