На некотором кольцевом городском маршруте с десятью остановками работают пять одиннадцатиместных и десять четырнадцатиместных микроавтобусов. Время движения между остановками имеет равномерное распределение на отрезке [2; 12] мин. На каждую остановку в соответствии с экспоненциальным законом распределения со средним значением 2мин. прибывают пассажиры и ожидают прибытия микроавтобуса. Микроавтобус, подъехав к остановке, увозит столько пассажиров, сколько имеется свободных мест. Если свободных мест нет, и никто не выходит, микроавтобус не останавливается. Вероятность, что пассажир проедет некоторое количество остановок, задана в табл. 2.4. Стоимость проезда составляет 30 рублей.
Табл. 2.4. Распределение вероятности проезда пассажиром определенного количества остановок
Вероятность | 0,1 | 0,15 | 0,2 | 0,25 | 0,3 |
Количество остановок |
Требуется промоделировать работу парка микроавтобусов на протяжении 16 часов. При этом необходимо оценить загруженность микроавтобусов, распределение времени поездки пассажиров и выручку всего парка микроавтобусов за рассматриваемый период.
|
|
На первом этапе решения поставленной задачи разработана таблица определений и выбора параметров (табл. 2.5).
Табл. 2.5. Таблица определений и выбора параметров
Элемент GPSS | Характеристика элемента |
1 усл. ед. времени | 1 секунда |
Транзакты | |
1-й сегмент | Таймер |
2-й сегмент | Микроавтобусы |
3й сегмент | Пассажиры |
Параметры | |
R=57601 | Продолжительность моделирования (в секундах) |
N1=5 | Количество одиннадцатиместных автобусов |
N2=10 | Количество четырнадцатиместных автобусов |
m1=25 | Мат.ожидание экспон. распр. времени прихода пассажиров |
m2=420 | Среднее время движения микроавтобуса между остановками |
d=300 | Отклонение от среднего времени движения |
p=30 | Стоимость проезда |
t1=10 | Время, необходимое на остановку и разгон автобуса |
t2=2 | Время входа и выхода пассажиров в микроавтобус и из него |
Концептуальная модель системы приведена на рис. 2.3.
Рис. 2.3. Концептуальная модель системы
Перечень блоков, используемых при моделировании, приведен на рис. 2.4.
Рис. 2.4. Блоки модели
Программа моделирования на языке GPSS с комментариями приведена ниже:
ostan function rn3,d5;задание распределения числа 0.1,3/0.25,4/0.45,5/0.7,6/1,7 остановок, которые едут люди
mat matrix,5,15;создание матрицы для
хранения величин
proezdtime table mp8,700,100,39;создание таблицы для получения распределения времени поездки
generate 57600,,1,2;таймер
savevalue 3,1;задание номера остановки, на
которую приходит пассажир
savevalue sredn,0;установка в ноль величины средней
занятости микроавтобуса
savevalue schet,0;установка в ноль временного
|
|
счетчика работы микроавтобусов
assign 1,1;
assign 2,1;
assign 3,5;
assign 4,15;
null msavevalue mat,p2,p1,0; в данном цикле задается
assign 1+,1; нулевое значение всем
loop 4,null; элементам матрицы mat
assign 1,1;
assign 4,15;
assign 2+,1;
loop 3,null;
terminate 1;
start 2;2 транзакта - 1й устанавливает начальные величины, 2й завершает моделирование
generate 300,,2,10;создание 14-местных микроавтобусов
savevalue 2+,1;увеличение номера данного
микроавтобуса на 1
assign 2,Х2;запись во 2-й параметр номера
микроавтобуса
msavevalue mat,3,p2,14;запись в 3-ю строку матрицы текущего числа свободных мест
msavevalue mat,5,p2,14;запись в 5-ю строку матрицы общего числа мест
transfer,marsh;отправка микроавтобуса на маршрут
generate 420,,,5;создание 11-местных микроавтобусов
savevalue 2+,1;увеличение номера данного
микроавтобуса на 1
assign 2, Х2;запись во 2-й параметр номера
микроавтобуса
msavevalue mat,3,p2,11;запись в 3-ю строку матрицы текущего числа свободных мест
msavevalue mat,5,p2,11;запись в 5-ю строку матрицы общего числа мест
transfer,marsh;отправка микроавтобуса на маршрут
marsh assign 3,1;начало маршрута, присвоение параметру 3 номера остановки, к которой подъехал автобус
assign 4,10;параметр 4 используется для цикличного проезда по 10-ти остановкам
proezd msavevalue mat,4,p2,p3;запись в 4-ю строку матрицы местоположения автобуса
test g mx$mat(3,p2),0,way;проверка наличия свободных мест
advance 10;если есть, то останавливаемся
test e mx$mat(2,p3),0;ждем, пока остановка освободится от предыдущего автобуса
msavevalue mat,2,p3,p2;открываем двери, записываем во 2-ю строку матрицы номер микроавтобуса, подъехавшего к остановке
test e (mx$mat(3,p2)#mx$mat(1,p3)),0;ждем пока закончатся свободные места или пассажиры на остановке
msavevalue mat,2,p3,0;закрываем двери, удаляем из 2-й строки номер автобуса
advance 10;трогаемся
mark 8;временная метка для подсчета средней занятости микроавтобусов
way advance 420,300;едем к следующей остановке
savevalue schet+,(mp8);суммируем время, которое микроавтобус был в пути
savevalue sredn+,(mp8#((100#mx$mat(5,p2)-100#mx$mat(3,p2)))/mx$mat(5,p2))
;подсчитываем число занятых мест
depart zagr,q$zagr;освобождаем очередь от предыдущего значения
queue zagr,(x$sredn/(x$schet/1));выводим через очередь текущее значение средней загруженности микроавтобусов
assign 3+,1;отправляем микроавтобус к следующей остановке
loop 4,proezd;и так 10 остановок
transfer,marsh;потом возвращаемся в начало
маршрута
generate (exponential(2,0,12));имитируем приход пассажиров
assign 5,Х3;присваиваем параметру 5 номер остановки, на которую пришел пассажир
savevalue 3+,1;увеличиваем номер остановки для следующего пассажира на 1
test e x3,11,ost1;11-й остановки нет, поэтому...
savevalue 3,1;отправляем пассажира на 1-ю
ost1 assign 6,(p5+fn$ostan-1);присваиваем параметру 6 номер остановки, после которой пассажир выйдет
test g p6,10,ost2;проверяем, не больше ли это число 10
assign 6-,10;если да, то отнимаем 10
ost2 msavevalue mat+,1,p5,1;увеличиваем число пассажиров на остановке, которое хранится в 1-й строке матрицы, на 1
test g mx$mat(2,p5),0;ждем прибытия микроавтобуса
assign 7,mx$mat(2,p5);записываем в параметр 7 номер микроавтобуса, в который пытается сесть пассажир
seize p5;входим в двери микроавтобуса на нашей остановке
advance 2;проходим в микроавтобус, 2 секунды
release p5;освобождаем двери
msavevalue mat-,1,p5,1;уменьшаем число людей на остановке
test g mx$mat(3,p7),0,ost2;если оказалось что в микроавтобусе нет мест, возвращаемся на остановку
msavevalue mat-,3,p7,1;в противном случае занимаем место
mark 8;временная отметка для сбора статистики о времени проезда
queue profit,30;очередь profit использована для получения прибыли с учетом всех микроавтобусов
priority 10;устанавливаем приоритет транзакта, равным 10
test e mx$mat(4,p7),p6;ждем остановки, после которой
надо выйти
assign 6+,1;записываем в 6-й параметр номер остановки, на которой надо выйти
test e p6,11,vyx;проверяем, чтобы число не
превышало 10
assign 6,1;если получается 11 присваиваем 1
vyx advance 120;готовимся к выходу на следующей остановке
msavevalue mat+,3,p7,1;освобождаем место
|
|
test e mx$mat(4,p7),p6;ждем остановки
tabulate proezdtime;собираем статистику о времени
проезда
seize p6;занимаем двери автобуса
advance 2;выходим
release p6;освобождаем двери
terminate 0;выход из модели