ЛАБОРАТОРНАЯРАБОТА № 2
МОДЕЛЬБЕНЗОКОЛОНКИ
ВВЕДЕНИЕ
Представим ситуацию: предприниматель собирается вложить деньги встроительство новой бензоколонки, однако точного представления о том, сколькоавтомашин будет ежедневно заправляться на этой колонке, у него нет. Их число,вероятно, может колебаться в некотором диапазоне. Но он хотел бы ориентировочнознать, какова должна быть оптимальная структура бензоколонки и на получениекакой прибыли можно рассчитывать.
На эти вопросы можно дать ответы с помощью математической модели.Поскольку входные данные имеют неопределенный характер, это должна бытьстатистическая модель.
Все начинается с разработки концептуальной модели. Прежде всегонужно выбрать математическую схему, которая ближе всего подходит к такойэкономической системе, как бензоколонка. Нужно также установить, что являетсявходными параметрами модели, а что выходными характеристиками. Далее нужновыбрать показатель и критерий эффективности будущей экономической системы.
Потом нужно разработать алгоритм и составить программу наалгоритмическом языке, отладить ее и убедиться в том, что она обеспечиваетполучение достоверных результатов. Наконец, нужно выбрать конкретные исходныеданные и провести серию расчетов при разных значениях входных параметров.Анализ результатов моделирования позволит дать ответ на все вышеперечисленныевопросы.
Для описания работы бензоколонки больше всего подходит схемасистемы массового обслуживания, или сокращенно СМО. Для таких систем характернытри отличительные особенности:
1) имеется поток клиентов, желающих быть обслуженными (в данномслучае это поток автомашин);
2) имеются устройства или агрегаты, которые обеспечиваютудовлетворение заявок клиентов (в данном случае одна или несколько раздаточныхколонок);
3) имеется определенный набор правил обслуживания клиентов (в данномслучае можно, например, считать, что все клиенты равноправны, т. е. никто неимеет права на заправку вне очереди).
СМО различаются прежде всего по числу мест или каналовобслуживания (одноканальная, двухканальная и т. д.).
Предприниматель пока не знает, сколько раздаточных колоноквыгоднее иметь. Если они будут простаивать, он будет терпеть убытки. Значит, вмодели нужно сделать число каналов обслуживания переменным, т. е. включить егов состав входных параметров. В задачу моделирования будет входить определениеоптимального числа каналов. Оно будет зависеть от соотношения между среднимвременем между поступлением заявок (приезд автомашин) и средним временемобслуживания (время заправки), которое нужно задать как входные характеристикимодели.
Среднее время обслуживания можно определить, понаблюдав за работойкакой-нибудь действующей бензоколонки. А среднее время между соседними заявкамизависит от интенсивности потока автомашин на том участке дороги, где будетбензоколонка. Среднее количество автомашин, которые будут заправляться,необходимо оценить приближенно. Нужно выбрать подходящий для типичного потокаавтомашин на данном участке дороги закон распределения случайных величинвремени между соседними автомашинами, заезжающими на заправку. Опыт показывает,что лучше всего такой поток описывается показательным распределением с заданнымсредним значением случайной величины. А возможные значения случайного временимежду соседними заявками будут определяться в модели с помощью датчикаслучайных чисел.
Но время обслуживания тоже не постоянно для всех автомашин. Этослучайная величина, и нужно определить закон ее распределения. Понаблюдав заработой действующей бензоколонки, можно установить эмпирическое распределениереального времени обслуживания. Но при построении первого варианта модели чащевсего обычно выбирают одно из стандартных распределений, которое ближе всегоподходит к полученному эмпирическому распределению. В дальнейшем модель можетбыть уточнена.
Для начала остановимся на показательном распределении. Мыужевыбрали его для времени между соседними заявками. Там было одно среднеезначение для времени между заявками, а здесь другое — для времени обслуживания.
Для построения модели нужно также высказать предположение о том,как будут себя вести клиенты, если им придется стоять в очереди. В СМО обычноописывается один из трех вариантов режима ожидания: с неограниченным ожиданием;с ограниченным ожиданием и без ожидания.
В нашем случае больше подойдет вариант с ограниченным ожиданием.При этом достаточно ввести в модель в качестве входной переменной максимальноевремя ожидания. Тогда в процессе моделирования заявка с временем ожидания,превышающим максимально допустимое, будет покидать систему необслуженной.
Мы ввели почти все входные переменные. Осталось только ограничитьпериод функционирования системы. Нужно ввести время начала и время концаработы, чтобы расчеты каждой случайной реализации проводились в одинаковыхусловиях.
Набор выходных характеристик зависит от того, что мы примем вкачестве показателя эффективности процесса функционирования системы. Это, междупрочим, самый важный момент в процессе создания концептуальной моделиисследуемой системы.
Эффективность — это часто употребляемое слово, смысл которого невсегда правильно трактуется. В теории эффективности показателемэффективности называют меру степени достижения поставленной цели.
Предприниматель вкладывает средства в строительство бензоколонки сцелью получения прибыли. Но строительство сопряжено и с расходами, которыезависят от структуры бензоколонки, т. е. от количества раздаточных колонок.Нужно выбрать такой показатель эффективности, который отражал бы влияние наприбыль не только доходов, но и расходов. В первом варианте модели можнопредположить, что все будущие клиенты будут заправлять примерно одно и то жеколичество бензина. Тогда доход будет определяться по формуле:
Дох = С1 * Nобс.ср,
где Дох — средний доход за период функционирования системы;
С1 — средняя стоимость заправки одной автомашины;
Nобс.ср — среднее число заправленных автомашин.
Расходы можно оценить по данным о стоимости строительствадействующих бензоколонок. Предположим, что расходы связаны с числом каналов NK некоторой функциональнойзависимостью:
Расх = F(NK).
Итак, показатель эффективности для нашей модели имеет вид:
Эфф = Дох — Расх.
Можно сформировать безразмерный показатель эффективности. Поделимдоход и расход на коэффициент С1. Получим следующее выражениедля показателя эффективности:
Сотн.ср = Nобс.ср – F1(NK),
где Сотн.ср — средняя относительная прибыль;
F1(NК) — безразмерная функциональная зависимость расходов от числаканалов.
Но, кроме показателя эффективности, существует еще критерийэффективности. В теории эффективности критерием эффективности называютправило, с помощью которого выбирается наивыгоднейший вариант структурымоделируемой системы. Если имеется несколько показателей эффективности, токритерий объединяет их в единое выражение.
В данном случае показатель один, а поэтому в качестве критерияестественно принять условие достижения максимума этого показателя. На практикеэто означает, что нужно перебрать несколько вариантов структуры модели приразных значениях входных параметров и установить, при каких условиях выбранныйнами показатель эффективности будет достигать максимума. Для наглядности можнопривести выражение для определения величины критерия эффективности. Оно будетиметь вид:
Критерий эффект. = />,
Где u – порядковый номер варианта расчета, принадлежащий множеству U.
Однако в самой алгоритмической модели эта формула использоватьсяне будет. Ею должен руководствоваться исследователь, производящий расчетыразличных вариантов при переменных значениях входных параметров модели.
1. КОНЦЕПТУАЛЬНАЯ МОДЕЛЬ
Пусть имеется система массового обслуживания с переменным числомканалов NK, которое может принимать любое значение в диапазоне отодного до трех. Входной поток заявок — простейший, следовательно,время между соседними заявками имеет показательное распределение с известнымматематическим ожиданием (средним значением) Тз.ср.
Время обслуживания заявки в любом канале — величина случайная,имеющая показательное распределение с известным средним временем обслуживания Тобс.ср.
Все заявки однородны и независимы.
Правило(дисциплина) обслуживаниясостоит в том, чтоочередная заявка поступает в тот канал, который раньше других освободился. Есливремя ожидания начала обслуживания превышает заданную величину Тож.max, то заявка покидаетсистему необслуженной. Период функционирования СМО характеризуется величиной Tкон.
Таким образом, входными характеристиками модели являются: числоканалов NK, среднее время между соседними заявками Tз.ср, среднее времяобслуживания заявки Тобс.ср, максимально допустимое время ожидания Тож.mах, период работысистемы Ткон., число случайных реализаций моделируемогопроцесса Np.
Выходной характеристикой модели является среднее число обслуженныхзаявок Nобс.ср
Выбор показателя и критерия эффективности
В качестве показателя эффективности работы системы целесообразновыбрать среднюю прибыль, определяемую по формуле
Сcр = С1 * Nобс.ср – С2(NK), (1)
где С1 — чистая прибыль, полученная в результатеобслуживания одной заявки;
С2(NK) — издержки обслуживания всех заявок, зависящие от числаканалов.
Разделим обе части равенства (1) на величину С1. Получимследующее выражение для расчета показателя эффективности:
/>, (2)
где Ccр.отн— средняя относительная прибыль.
Величину С2/С1 (отношение издержек обслуживанияк чистой прибыли, полученной в результате обслуживания одной заявки) будемрассматривать как функцию числа каналов.
Предположим, что возможными вариантами этой функциональнойзависимости являются: а — линейная зависимость; б — возрастающаязависимость с положительной 2-й производной и в — возрастающаязависимость с отрицательной 2-й производной (рис. 1).
/>
Рис.1.Зависимости отношения С2/С1,от NК :а — первыйвариант; б — второй вариант; в — третий вариант
Выберем второй вариант. Примем в качестве конкретной зависимостииздержек обслуживания от числа каналов следующую функцию:
/>. (3)
Итак, для расчета показателя эффективности будем использоватьзависимости (2) и (3).
В качестве критерия выбора наивыгоднейшей структуры СМО примемоптимальное число каналов, обеспечивающее максимум средней относительнойприбыли:
/>. (4)
где NK*— наивыгоднейшее число каналов.
2. СХЕМЫ АЛГОРИТМОВ МОДЕЛИ
В качестве языка программирования для разработки компьютерноймодели рассматриваемого процесса выбран Visual Basic 5.0.
Общий вид (макет) стартовой формы показан на рис. 2. Видно, чтоона включает ряд объектов управления, среди которых имеются три командныекнопки: «Расчет», «Очистка» и «Выход». Это обстоятельство определяет структуруалгоритма процедур обработки прерываний, показанную на рис. 3.
После нажатия кнопки «Start» активизируется стартовая форма. С этого моментапрограмма находится в режиме ожидания действий пользователя.
Цифрой 1 (рис.3) обозначено действие, заключающееся вкорректировке исходных данных. Необходимые изменения вносятся в соответствующиетекстовые поля.
Цифрой 2 обозначено действие, заключающееся в нажатии (с помощьюмыши) кнопки «Расчет». В процедуре, связанной с этой кнопкой, оператор 3осуществляет перевод исходных данных из символьной формы в числовую. Затемоператор 4 обращается к модулю общего назначения «Model2». Схема алгоритма этогомодуля приведена на рис. 4.
/>
Рис. 2.Макет стартовой формы:
1 — текстовые поля; 2 — командные кнопки
После окончания работы модуля и выдачи на экран результатовмоделирования работа процедуры, связанной с кнопкой «Расчет», заканчивается.Программа вновь переходит в режим ожидания действий пользователя.
Цифрой 5 на схеме (рис.3) обозначено действие пользователя,заключающееся в нажатии кнопки «Очистка». В процедуре, связанной с ней,производится очищение текстового поля для вывода результата моделирования.Затем обычно производятся изменение исходных данных и проведение новых расчетовс использованием кнопки «Расчет».
/>
Рис.3.Схема алгоритма процедур обработки прерываний
Цифрой 7 на схеме обозначено действие пользователя, заключающеесяв нажатии кнопки «Выход». В результате работа программы прекращается.
Оператор 1 на рис. 4 обнуляет глобальную переменную SNобс — суммарное числообслуженных заявок. Оператор 2 активизирует окно формы № 2 и делает неактивнымокно формы № 1. Оператор 3 начинает циклический перебор случайных реализаций.Оператор 4 выводит на экран (в окно формы № 2) счетчик числа рассчитанныхреализаций.
Оператор 5 в начале каждой случайной реализации обнуляет локальныепеременные, к которым относятся: число заявок, поступающих в одной реализации Nz, числообслуженных заявок в каждом из трех каналов Nобс1, Nобс2, Nобс3, начальные значениявремени освобождения 1-го, 2-го и 3-го каналов Tок1, Tок2 и Tок3.
/>
Рис.4. Схема алгоритма модуля «Model2»
Оператор 6 обращается к автономной процедуре формирования потоказаявок. В результате работы этой процедуры формируется массив значений времени
[Тз(1), Тз(2), Тз(3),…, Тз(Nзi)],
где Nзi-общее число поступившихзаявок для i-йслучайной реализации.
Оператор 7 является началом цикла обслуживания заявок. Операторы8, 9, 10 и 11 производят выбор номера канала, который характеризуетсянаименьшим значением времени освобождения от обслуживания заявки.
Оператор 12 обращается к автономной процедуре обслуживанияочередной заявки. На выходе этой процедуры определяется число обслуженныхзаявок в выбранном канале Nобс(Jmin).
Оператор 13 служит для расчета суммарного числа обслуженных заявокпо рекурсивной формуле
SNобс = SNобс + Nобс.1 + Nобс.2 + Nобс.3.
После окончания цикла случайных реализаций оператор 14 возвращаетсвойство активного окна форме № 1. Оператор 15 рассчитывает и выводит на экранзначение выходной переменной — средней относительной прибыли по формуле
/>.
Схема алгоритма процедуры формирования заявок показана на рис. 5.
Оператор 1 устанавливает на нуль модельное время Т. Оператор2 является началом цикла формирования заявок. Оператор 3 обращается к датчикуслучайных чисел, который вырабатывает возможное значение случайной величины z, равномернораспределенной в интервале (0,1).
Оператор 4 определяет возможное значение случайной величинывремени поступления очередной заявки при условии, что среднее время междусоседними заявками равно Тз.cp. Оператор 5 проверяетусловие окончания процесса формирования заявок.
Оператор 6 подсчитывает число поступивших заявок, помещает времяпоступления каждой заявки в специальный массив и изменяет модельное время Т.
Схема алгоритма процедуры обслуживания заявок показана на рис. 6.
Оператор 1 обнуляет время ожидания начала обслуживания заявки Tож и присваивает времениначала обслуживания Tн время поступления очередной заявки T3(J3).
/>
Рис.5. Схема алгоритма формирования заявок
Оператор 2 производит проверку занятости канала. Начальноезначение времени освобождения канала Ткоj приравнивается нулю вглавном модуле в блоке обнуления локальных переменных.
Если канал занят, то оператор 3 определяет время ожидания Tож как разность времениосвобождения канала Ткоjи времени поступлениязаявки T3(J3). Оператор 4 проверяет условие, что время ожидания Тожпревышает допустимое Тож.max. Если это условиевыполняется, то управление передается на конец процедуры и заявка остаетсянеобслуженной.
Оператор 5 служит для коррекций времени начала обслуживаниязаявки. Оно теперь должно равняться времени освобождения канала Ткоj. Оператор 6 обращается кдатчику случайных чисел с равномерным распределением в интервале (0,1), которыйвырабатывает возможное значение случайной величины z. Оператор 7 определяетвозможное значение времени окончания обслуживания заявки Тк.
Оператор 8 проверяет условия окончания периода обслуживания, аоператор 9 фиксирует тот факт, что данный канал будет занят доконца рабочего дня. Оператор 10 увеличивает на единицу число обслуженных заявокв j-м канале и фиксирует время освобожденияканала.
/>
Рис. 6. Схема алгоритма процедуры обслуживания заявок
3. ПРИМЕР РЕШЕНИЯ ЗАДАЧИ МОДЕЛИРОВАНИЯ
Рассмотрим пример решения задачи исследования системы массовогообслуживания с помощью разработанной алгоритмической модели. Выберем следующиевходные параметры:
• среднее время междузаявками Тз.ср = 1 ч;
• максимальное времяожидания Тож.max. = 0,25 ч;
• число случайныхреализаций Np= 5000.
Варьируемые переменные:
• среднее времяобслуживания заявок Тобс.ср= 0,5; 1; 2; 4 ч;
• число каналовобслуживания NK= 1; 2; 3.
Результаты расчетов приведены в табл. 1.
Таблица 1
Nвар
NK
Тобс.ср
Cотн.ср 1 1 0,5 6,27 2 2 0,5 7,12 3 3 0,5 5,53 4 1 1 4,24 5 2 1 5,83 6 3 1 4,74 7 1 2 2,33 8 2 2 3,61 9 3 2 2,94 10 1 4 0,95 11 2 4 1,40 12 3 4 0,65
Следовательно, при выбранных исходных данных, в частности присреднем времени между соседними заявками, равном 1 ч, наибольшая прибыльдостигается при числе каналов NK=2.
Проведенные исследования показали, что оптимальное число каналовзависит от соотношения между величинами среднего времени между соседнимизаявками и среднего времени обслуживания (рис. 7).
/>
Рис.7. Зависимость оптимального числа каналов nkот параметров Тз.сри Тобс.ср
4. ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ
В интегральной среде Visual Basic 5.0 создайте программу«Модель бензоколонки», текст которой приведен ниже. Произведите отладкупрограммы с целью ликвидации формальных ошибок. Произведите проверку программырасчетом. Подставьте те же исходные данные, которые были выбраны в приведенномвыше примере. Убедитесь в том, что результаты расчетов практически совпадают. Произведитесамостоятельное исследование закономерностей функционирования фирмы с помощьюалгоритмической модели. Выберите исходные данные, проведите расчеты ипроанализируйте результаты моделирования.Программа моделированиябензоколонки
1. Стартовая форма frmForm1
1.1. Таблица свойствформы 1 (макет на рис. 2) Объект Свойства Установки Форма 1
Name
Caption
FrmForm1
Модель СМО с 1,2 или 3 каналами Командная кнопка 1
Name
Caption
Command1
Расчет Командная кнопка 2
Name
Caption
Command2
Расчет Командная кнопка 3
Name
Caption
Command3
Выход
1.2. Процедурыобработки прерываний
Private SubCommand1_Click()
Nkan =Val(txtNk): TZcp = Val(txtTzs): TObcp = Val(txtTobs)
TWmax =Val(txtTwm): Nr = Val(txtNp)
Call Model2
End Sub
Private SubCommand2_Click()
FrmForm1.txtResult= “”
End Sub
Private SubCommand3_Click()
End
End Sub
2. Форма frmForm2
2.1. Таблица свойствформы 2 Объект Свойства Установки Форма 2
Name
Enabled
Form2
False
2.2. Процедураобработки прерываний
Private SubForm2_Load()
End Sub
3. Модули общего назначения
‘Описание констант имассивов
Public Const Tfin = 10 ‘время окончания работы
Public Const NzMax = 40 ‘максимальное число заявок
Public Tz(Nzmax) ‘массиввремени поступления заявок
Public Nob(3) As Integer ‘число обслуженных заявок в каналах
Public TKO(3) ‘время окончания обслуживания заявок
Public TScp,Tobcp, Twmax, Tkmin, TH, TK, z, Ts
Public Snob AsLong, Iz As Integer, Nz As Integer, Ir As Integer
Public Nr AsInteger, J As Integer, Nkan As Integer, Jmin As Integer 180
Public SubModel2()
‘Главный модуль
Snob = 0 ‘сумматор числа обслуженныхзаявок
frmForm1.Enabled= False: FrmForm1.Visible = False
frmForm2.Enabled= True: FrmForm2.Visible = True
For Ir = 1 To Nr ‘начало цикла случайных реализаций
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-мканалах
Call ZAJAVKA ‘процедура «Поток заявок»
For Iz = 1 To Nz ‘начало цикла обслуживания заявок
‘выбор номера канала
TKmin = TKO(1)
For J = 1 ToNkan
If TKO(J)
Next J
Call SERVICE ‘процедура обслуживания заявки
Next Iz ‘конец цикла обслуживания заявок
‘суммарное числообслуженных заявок:
Snob = Snob +Nob(1) + Nod(2) + Nob(3)
Next Ir ‘конец цикла реализаций
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
Sub SAJAVKA
‘Процедура «Поток заявок»
T = 0 ‘модельное время
For J = 1 To Nzmax ‘начало цикла формирования заявок
z = Rnd(1) ‘случайная величина с равномерным распределением
Ts = T – TZcp *Log(z) ‘случайное время поступления заявки
If Ts > Tfin Then Exit For ‘условие прекращения приема заявок
Nz = Nz + 1 ‘счетчик числа заявок
Tz(Nz) = Ts ‘фиксированноевремя поступления заявки
T = Ts ‘изменение модельного времени
Next J ‘конец цикла формирования заявок
End Sub
Sub SERVICE
‘Процедура «Обслуживаниязаявок»
J = Jmin ‘номер канала
DTWait = 0 ‘начальное значениевремени ожидания
TH = Tz(Iz) ‘время началаобслуживания
If Tz(Iz)
‘корректировка времениначала обслуживания:
DTWait = TKO(J) – Tz(Iz) ‘период ожидания
If DTWait >Twmax Then Exit Sub
‘время началаобслуживания
TH = TKO(J)
End If
Z = Rnd(1) ‘случайная величина с равномерным ‘распределениемв интервале (0,1)
TK = TH – Tobcp* Log(z) ‘время окончания обслуживания
If TK >Tfin Then
TKO(J) = Tfin:Exit Sub
End If
Nob(J) = Nob(J) + 1 ‘увеличение числа обслуженныхзаявок
TKO(J) = TK ‘время окончанияобслуживания
End Sub