"Модель остановки маршрутного такси"
1.Определение проблемы
интервал пассажир такси остановка
Данный пример иллюстрирует принцип работы узла delet: первый вошедший в него транзакт становится как бы тележкой, в которую собираются транзакты, входящие следом.
Как только в узле наберется заданное количество транзактов, они уничтожаются, а первый переходит в следующий узел: тележка уезжает, а предметы, собранные в нее, перестают существовать как заявки на обслуживание в системе. Имеется остановка маршрутного такси. С определенными интервалами времени на остановку приходят пассажиры и подъезжают такси.
Такси уезжает, когда в него сядет 10 пассажиров. Если пришедший пассажир не обнаруживает стоящего такси, он встает в очередь на посадку. Если такси подъехало на пустую остановку, оно ждет пасажиров. Если такси подъехало, а на остановке уже стоит такси, оно встает в очередь такси.
Таблица. Параметры модели
ПараметрСреднее значениеИнтервал прихода пассажиров1 минутаИнтервал приезда такси10 минут
2.Схема модели
Схема данной модели представлена на рисунке 1.
Рис.1- схема модели
Интервал генерации транзактов, имитирующих такси, имеет нормальное распределение, так как остановку обслуживают такси из одного парка, а не нескольких. Использование в описании генератора 6 нормального закона распределения интервала генерации означает, что время между приездами такси на остановку чаще оказывается ближе к своему среднему значению и реже - дальше от него (чем больше отклонение интервала от среднего, тем реже это бывает).
Узлы 2 и 7 имитируют соответственно очереди пассажиров и такси. Ключ 8 в начале работы модели находится в открытом состоянии (по умолчанию), а ключ 3 закрывается при приходе в очередь 2 первого транзакта. Это делается для того, чтобы в узел delet первым вошел транзакт-такси, а не пассажир (иначе пассажир станет «тележкой»).
Как только в delet войдет первый транзакт-такси, ключ 8 закрывается, а ключ 3 открывается. Теперь выходящие из генератора 6 транзакты-такси стоят в очереди 7, а транзакты-пассажиры заходят в узел delet (идет заполнение такси). Когда в узле накопится 10 транзактов-пассажиров, транзакт-такси перейдет в терминатор (заполненное такси уедет). Ключ 8 открывается, чтобы в delet мог зайти следующий транзакт-такси. Ключ 3 закрывается, чтобы транзакты-пассажиры стояли в очереди 2 до прихода в delet транзакта-такси.
Таким образом, в модели ключи 3 и 8 всегда находятся в противоположных состояниях - если один открыт, то другой закрыт. Тем самым чередуется доступ к узлу delet разных типов транзактов - такси и пассажиров.
.Текст модели на языке С++
После описания всех узлов можно генерировать С++ файл. Далее создается выполняемый файл с помощью приложения Microsoft Developer Studio. Текс модели:
Таблица
#include float Pas=1.0; float Tax=10.0; float Mod_time=360.0; forward { modbeg("Маршр. такси", 108, Mod_time, (long)time(NULL), none,1, none, 4, 2); ag("Пассажиры", 107, none, expo, Pas, zero, zero, 101); ag("Такси", 108, none, norm, Tax, Tax/3, zero, 105); network(dummy, dummy) { top(101): t->ft=1; queue("Пассажиры", none, 102); place; top(102): if (addr[103]->tn==1) rels (102); else hold (102); key("Есть такси?", 103); place; top(103): delet("Посадка в такси", 1, 1, 0, 10, 104); rels(102); hold(106); place; top(104): term("Такси уехало"); hold(102); rels(106); place; top(105): queue("Такси", none, 106); place; top(106): key("Остановка свободна?", 103); place; fault(123); } modend("resultat1.doc", 1, 12, page); return 0; }
4.Получение результатов моделирования
*----------------------------*
| НАЗВАНИЕ МОДЕЛИ: Маршр. такси |
| ВРЕМЯ МОДЕЛИРОВАНИЯ: 361.71 Лист: 1 |
|--------------------------|
| | | | | | | 2 | | | | |
| No | Наименование | Тип |Точ-|Загруз-| M [t] | C [t] |Счетчик|Кол.|Оcт.|Состояние узла|
|узла| узла | узла | ка |ка(%=),| среднее |квадрат |входов |кан.|тр. |в этот момент |
| | | | |Путь(км) время |коэф.вар.|и hold | | | |
|----+---------------+------+----+-------+---------+---------+-------+----+----+--------------|
| | | | | | | | | | | |
| 101 Пассажиры queue - - 0.18 27.74 369 1 1 открыт |
| 102 Есть такси? key - %= 3.7 0.54 11.86 25 1 0 открыт |
| 103 Посадка в такси delet - - 0.18 27.74 368 2 1 закрыт |
| 104 Такси уехало term - - 68.09 0.26 24 0 0 открыт |
| 105 Такси queue - - 56.57 0.40 36 1 11 открыт |
| 106 Остановка свобо key - %= 97.6 14.12 0.10 25 1 0 закрыт |
| 107 Пассажиры ag - - 0.98 1.06 369 1 1 открыт |
| 108 Такси ag - - 9.79 0.08 37 1 1 открыт |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
*---------------------------------*
Из полученных результатов можно сделать вывод что:
üПришло 369 пассажиров на остановку;
üПодъехало 25 такси;
üВ такси село 368 пассажиров;
üОдно такси и один пассажир остались на остановке.
5.Эксперементальные показатели
Увеличим время прихода такси на остановку.
*------------------------------------------------*
| НАЗВАНИЕ МОДЕЛИ: Маршр. такси |
| ВРЕМЯ МОДЕЛИРОВАНИЯ: 360.02 Лист: 1 |
|----------------------------------------------|
| | | | | | | 2 | | | | |
| No | Наименование | Тип |Точ-|Загруз-| M [t] | C [t] |Счетчик|Кол.|Оcт.|Состояние узла|
|узла| узла | узла | ка |ка(%=),| среднее |квадрат |входов |кан.|тр. |в этот момент |
| | | | |Путь(км) время |коэф.вар.|и hold | | | |
|----+---------------+------+----+-------+---------+---------+-------+----+----+--------------|
| | | | | | | | | | | |
| 101 Пассажиры queue - - 4.99 2.07 353 1 1 открыт |
| 102 Есть такси? key - %= 52.3 5.23 0.95 36 1 0 открыт |
| 103 Посадка в такси delet - - 5.35 2.02 352 2 1 закрыт |
| 104 Такси уехало term - - 9.17 1.30 35 0 0 открыт |
| 105 Такси queue - - 4.60 2.36 37 1 1 открыт |
| 106 Остановка свобо key - %= 48.2 4.82 0.94 36 1 0 закрыт |
| 107 Пассажиры ag - - 1.02 1.02 353 1 1 открыт |
| 108 Такси ag - - 9.51 0.09 38 1 1 открыт |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
*-------------------------------------*
üУменьшилось ненамного число пассажиров (из-за уменьшения времени моделирования);
üЧисло такси увеличилось до 36 и уехало 35;
üВ такси село 352 пассажира.