Модель бензоколонки

1


ЛАБОРАТОРНАЯ РАБОТА № 2

МОДЕЛЬ БЕНЗОКОЛОНКИ

ВВЕДЕНИЕ

Представим ситуацию: предприниматель собирается вложить деньги в строительство новой бензоколонки, однако точного представления о том, сколько автомашин будет ежедневно заправляться на этой колонке, у него нет. Их число, вероятно, может колебаться в некотором диапазоне. Но он хотел бы ориентировочно знать, какова должна быть оптимальная структура бензоколонки и на получение какой прибыли можно рассчитывать.

На эти вопросы можно дать ответы с помощью математической модели. Поскольку входные данные имеют неопределенный характер, это должна быть статистическая модель.

Все начинается с разработки концептуальной модели. Прежде всего нужно выбрать математическую схему, которая ближе всего подходит к такой экономической системе, как бензоколонка. Нужно также установить, что является входными параметрами модели, а что выходными характеристиками. Далее нужно выбрать показатель и критерий эффективности будущей экономической системы.

Потом нужно разработать алгоритм и составить программу на алгоритмическом языке, отладить ее и убедиться в том, что она обеспечивает получение достоверных результатов. Наконец, нужно выбрать конкретные исходные данные и провести серию расчетов при разных значениях входных параметров. Анализ результатов моделирования позволит дать ответ на все вышеперечисленные вопросы.

Для описания работы бензоколонки больше всего подходит схема системы массового обслуживания, или сокращенно СМО. Для таких систем характерны три отличительные особенности:

  1. имеется поток клиентов, желающих быть обслуженными (в данном случае это поток автомашин);

  2. имеются устройства или агрегаты, которые обеспечивают удовлетворение заявок клиентов (в данном случае одна или несколько раздаточных колонок);

  3. имеется определенный набор правил обслуживания клиентов (в данном случае можно, например, считать, что все клиенты равноправны, т. е. никто не имеет права на заправку вне очереди).

СМО различаются прежде всего по числу мест или каналов обслуживания (одноканальная, двухканальная и т. д.).

Предприниматель пока не знает, сколько раздаточных колонок выгоднее иметь. Если они будут простаивать, он будет терпеть убытки. Значит, в модели нужно сделать число каналов обслуживания переменным, т. е. включить его в состав входных параметров. В задачу моделирования будет входить определение оптимального числа каналов. Оно будет зависеть от соотношения между средним временем между поступлением заявок (приезд автомашин) и средним временем обслуживания (время заправки), которое нужно задать как входные характеристики модели.

Среднее время обслуживания можно определить, понаблюдав за работой какой-нибудь действующей бензоколонки. А среднее время между соседними заявками зависит от интенсивности потока автомашин на том участке дороги, где будет бензоколонка. Среднее количество автомашин, которые будут заправляться, необходимо оценить приближенно. Нужно выбрать подходящий для типичного потока автомашин на данном участке дороги закон распределения случайных величин времени между соседними автомашинами, заезжающими на заправку. Опыт показывает, что лучше всего такой поток описывается показательным распределением с заданным средним значением случайной величины. А возможные значения случайного времени между соседними заявками будут определяться в модели с помощью датчика случайных чисел.

Но время обслуживания тоже не постоянно для всех автомашин. Это случайная величина, и нужно определить закон ее распределения. Понаблюдав за работой действующей бензоколонки, можно установить эмпирическое распределение реального времени обслуживания. Но при построении первого варианта модели чаще всего обычно выбирают одно из стандартных распределений, которое ближе всего подходит к полученному эмпирическому распределению. В дальнейшем модель может быть уточнена.

Для начала остановимся на показательном распределении. Мы уже выбрали его для времени между соседними заявками. Там было одно среднее значение для времени между заявками, а здесь другое - для времени обслуживания.

Для построения модели нужно также высказать предположение о том, как будут себя вести клиенты, если им придется стоять в очереди. В СМО обычно описывается один из трех вариантов режима ожидания: с неограниченным ожиданием; с ограниченным ожиданием и без ожидания.

В нашем случае больше подойдет вариант с ограниченным ожиданием. При этом достаточно ввести в модель в качестве входной переменной максимальное время ожидания. Тогда в процессе моделирования заявка с временем ожидания, превышающим максимально допустимое, будет покидать систему необслуженной.

Мы ввели почти все входные переменные. Осталось только ограничить период функционирования системы. Нужно ввести время начала и время конца работы, чтобы расчеты каждой случайной реализации проводились в одинаковых условиях.

Набор выходных характеристик зависит от того, что мы примем в качестве показателя эффективности процесса функционирования системы. Это, между прочим, самый важный момент в процессе создания концептуальной модели исследуемой системы.

Эффективность - это часто употребляемое слово, смысл которого не всегда правильно трактуется. В теории эффективности показателем эффективности называют меру степени достижения поставленной цели.

Предприниматель вкладывает средства в строительство бензоколонки с целью получения прибыли. Но строительство сопряжено и с расходами, которые зависят от структуры бензоколонки, т. е. от количества раздаточных колонок. Нужно выбрать такой показатель эффективности, который отражал бы влияние на прибыль не только доходов, но и расходов. В первом варианте модели можно предположить, что все будущие клиенты будут заправлять примерно одно и то же количество бензина. Тогда доход будет определяться по формуле:

Дох = С>1> * N>обс.ср>,

где Дох - средний доход за период функционирования системы;

С>1> - средняя стоимость заправки одной автомашины;

N>обс.ср> - среднее число заправленных автомашин.

Расходы можно оценить по данным о стоимости строительства действующих бензоколонок. Предположим, что расходы связаны с числом каналов N>K> некоторой функциональной зависимостью:

Расх = F(N>K>).

Итак, показатель эффективности для нашей модели имеет вид:

Эфф = Дох - Расх.

Можно сформировать безразмерный показатель эффективности. Поделим доход и расход на коэффициент С>1>. Получим следующее выражение для показателя эффективности:

С>отн.ср> = N>обс.ср> – F1(N>K>),

где С>отн.ср> - средняя относительная прибыль;

F1(N>) - безразмерная функциональная зависимость расходов от числа каналов.

Но, кроме показателя эффективности, существует еще критерий эффективности. В теории эффективности критерием эффективности называют правило, с помощью которого выбирается наивыгоднейший вариант структуры моделируемой системы. Если имеется несколько показателей эффективности, то критерий объединяет их в единое выражение.

В данном случае показатель один, а поэтому в качестве критерия естественно принять условие достижения максимума этого показателя. На практике это означает, что нужно перебрать несколько вариантов структуры модели при разных значениях входных параметров и установить, при каких условиях выбранный нами показатель эффективности будет достигать максимума. Для наглядности можно привести выражение для определения величины критерия эффективности. Оно будет иметь вид:

Критерий эффект. = ,

Где u – порядковый номер варианта расчета, принадлежащий множеству U.

Однако в самой алгоритмической модели эта формула использоваться не будет. Ею должен руководствоваться исследователь, производящий расчеты различных вариантов при переменных значениях входных параметров модели.

1. КОНЦЕПТУАЛЬНАЯ МОДЕЛЬ

Пусть имеется система массового обслуживания с переменным числом каналов N>K>, которое может принимать любое значение в диапазоне от одного до трех. Входной поток заявок - простейший, следовательно, время между соседними заявками имеет показательное распределение с известным математическим ожиданием (средним значением) Т>з.ср>.

Время обслуживания заявки в любом канале - величина случайная, имеющая показательное распределение с известным средним временем обслуживания Т>обс.ср>.

Все заявки однородны и независимы.

Правило (дисциплина) обслуживания состоит в том, что очередная заявка поступает в тот канал, который раньше других освободился. Если время ожидания начала обслуживания превышает заданную величину Т>ож.>>max>, то заявка покидает систему необслуженной. Период функционирования СМО характеризуется величиной T>кон>.

Таким образом, входными характеристиками модели являются: число каналов N>K>, среднее время между соседними заявками T>з.ср>, среднее время обслуживания заявки Т>обс.ср>, максимально допустимое время ожидания Т>ож.>>m>>ах>, период работы системы Т>кон.>, число случайных реализаций моделируемого процесса N>p>.

Выходной характеристикой модели является среднее число обслуженных заявок N>обс.ср>

Выбор показателя и критерия эффективности

В качестве показателя эффективности работы системы целесообразно выбрать среднюю прибыль, определяемую по формуле

С>c>> = С>1> * N>обс.ср> – С>2>(N>K>),

(1)

где С>1> - чистая прибыль, полученная в результате обслуживания одной заявки;

С>2>(N>K>) - издержки обслуживания всех заявок, зависящие от числа каналов.

Разделим обе части равенства (1) на величину С>1>. Получим следующее выражение для расчета показателя эффективности:

,

(2)

где C>c>>р.отн> - средняя относительная прибыль.

Величину С>2>/С>1> (отношение издержек обслуживания к чистой прибыли, полученной в результате обслуживания одной заявки) будем рассматривать как функцию числа каналов.

Предположим, что возможными вариантами этой функциональной зависимости являются: а - линейная зависимость; б - возрастающая зависимость с положительной 2-й производной и в - возрастающая зависимость с отрицательной 2-й производной (рис. 1).

Рис.1. Зависимости отношения С>2>/С>1>, от N> : а - первый вариант; б - второй вариант; в - третий вариант

Выберем второй вариант. Примем в качестве конкретной зависимости издержек обслуживания от числа каналов следующую функцию:

.

(3)

Итак, для расчета показателя эффективности будем использовать зависимости (2) и (3).

В качестве критерия выбора наивыгоднейшей структуры СМО примем оптимальное число каналов, обеспечивающее максимум средней относительной прибыли:

.

(4)

где N>K>* - наивыгоднейшее число каналов.

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 в начале каждой случайной реализации обнуляет локальные переменные, к которым относятся: число заявок, поступающих в одной реализации N>z>, число обслуженных заявок в каждом из трех каналов 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>обс>(J>min>).

Оператор 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>время поступления очередной заявки T>3>(J>3>).

Рис.5. Схема алгоритма формирования заявок

Оператор 2 производит проверку занятости канала. Начальное значение времени освобождения канала Т>ко>>j> приравнивается нулю в главном модуле в блоке обнуления локальных переменных.

Если канал занят, то оператор 3 определяет время ожидания T>ож> как разность времени освобождения канала Т>ко>>j> и времени поступления заявки T>3>(J>3>). Оператор 4 проверяет условие, что время ожидания Т>ож> превышает допустимое Т>ож.>>max>. Если это условие выполняется, то управление передается на конец процедуры и заявка остается необслуженной.

Оператор 5 служит для коррекций времени начала обслуживания заявки. Оно теперь должно равняться времени освобождения канала Т>ко>>j>. Оператор 6 обращается к датчику случайных чисел с равномерным распределением в интервале (0,1), который вырабатывает возможное значение случайной величины z. Оператор 7 определяет возможное значение времени окончания обслуживания заявки Т>.

Оператор 8 проверяет условия окончания периода обслуживания, а оператор 9 фиксирует тот факт, что данный канал будет занят до конца рабочего дня. Оператор 10 увеличивает на единицу число обслуженных заявок в j-м канале и фиксирует время освобождения канала.

Рис. 6. Схема алгоритма процедуры обслуживания заявок

3. ПРИМЕР РЕШЕНИЯ ЗАДАЧИ МОДЕЛИРОВАНИЯ

Рассмотрим пример решения задачи исследования системы массового обслуживания с помощью разработанной алгоритмической модели. Выберем следующие входные параметры:

  • среднее время между заявками Т>з.ср> = 1 ч;

  • максимальное время ожидания Т>ож.>>max>. = 0,25 ч;

  • число случайных реализаций N>p> = 5000.

Варьируемые переменные:

  • среднее время обслуживания заявок Т>обс.ср> = 0,5; 1; 2; 4 ч;

  • число каналов обслуживания N>K>> >= 1; 2; 3.

Результаты расчетов приведены в табл. 1.

Таблица 1

N>вар>

N>K>

Т>обс.ср>

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 ч, наибольшая прибыль достигается при числе каналов N>K>=2.

Проведенные исследования показали, что оптимальное число каналов зависит от соотношения между величинами среднего времени между соседними заявками и среднего времени обслуживания (рис. 7).

Рис.7. Зависимость оптимального числа каналов n>k>> >от параметров Т>з.ср> и Т>обс.ср>

4. ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ

В интегральной среде Visual Basic 5.0 создайте программу «Модель бензоколонки», текст которой приведен ниже. Произведите отладку программы с целью ликвидации формальных ошибок. Произведите проверку программы расчетом. Подставьте те же исходные данные, которые были выбраны в приведенном выше примере. Убедитесь в том, что результаты расчетов практически совпадают. Произведите самостоятельное исследование закономерностей функционирования фирмы с помощью алгоритмической модели. Выберите исходные данные, проведите расчеты и проанализируйте результаты моделирования.

Программа моделирования бензоколонки

  1. Стартовая форма frmForm1

    1. Таблица свойств формы 1 (макет на рис. 2)

Объект

Свойства

Установки

Форма 1

Name

Caption

FrmForm1

Модель СМО с 1,2 или 3 каналами

Командная кнопка 1

Name

Caption

Command1

Расчет

Командная кнопка 2

Name

Caption

Command2

Расчет

Командная кнопка 3

Name

Caption

Command3

Выход

    1. Процедуры обработки прерываний

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>

  1. Форма frmForm2

    1. Таблица свойств формы 2

Объект

Свойства

Установки

Форма 2

Name

Enabled

Form2

False

    1. Процедура обработки прерываний

Private sub> Form2_Load()

End sub>

  1. Модули общего назначения

‘Описание констант и массивов

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 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

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 To Nkan

If TKO(J) < Tkmin Then Tkmin = TKO(J): Jmin = 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) < TKO(J) Then ‘проверка необходимости коррктировки

‘корректировка времени начала обслуживания:

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>