Файл: Маршрутное такси (Узел QUEUE моделирует очередь транзактов).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 29.06.2023

Просмотров: 79

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Функция GEOWAYопределяет расстояние между точками A и B по их географическим координатам.

Для данной задачи получен следующий граф (рис.1).

Рис.1. Граф модели

Принцип работы узла delet: вошедший в него транзакт семейства «такси» становится транзактом семейства «пассажиры», входящие следом. Как только в узел войдет заданное количество транзактов пассажиров, они поглотятся, а транзакт «тележка» переходит в следующий узел; транзакты, собранные в нее, перестают существовать как заявки на обслуживание в системе.

Опишем работу модели. Генератор 7 (рис. 1) создает транзакты, имитирующие пассажиров. Интервал прихода пассажиров в соответствии с теоремой о суперпозиции потоков событий имеет экспоненциальное распределение. Интервал генерации транзактов, имитирующих такси, имеет нормальное распределение (обоснование: маршрут такси состоит из множества отрезков, поэтому имеют место условия центральной предельной теоремы, даже если на маршруте несколько машин). Использование в описании генератора 8 нормального закона распределения интервала генерации означает, что время между приездами такси на остановку чаще оказывается ближе к своему среднему значению и реже - дальше от него (чем больше отклонение интервала от среднего, тем реже это бывает).

Узлы 1 и 5 имитируют соответственно очереди пассажиров и такси. Ключ 6 в начале работы модели находится в открытом состоянии (по умолчанию), а ключ 2 закрывается при приходе в очередь 1 первого транзакта-пассажира. Это делается для того, чтобы в узел delet первым вошел транзакт-такси, а не пассажир (иначе пассажир станет «тележкой»).

Как только в delet войдет первый транзакт-такси, ключ 6 закрывается, а ключ 2 одновременно с ним открывается. Теперь выходящие из генератора 6 транзакты-такси стоят в очереди 5, а транзакты-пассажиры заходят в узел delet (идет заполнение такси). Когда в узле delet накопятся 10 транзактов-пассажиров, транзакт-такси перейдет в терминатор (заполненное такси уедет). После этого ключ 6 открывается, чтобы в delet мог зайти следующий транзакт-такси, а ключ 2 в это же время закрывается, чтобы транзакты-пассажиры стояли в очереди 1 до прихода в delet транзакта-такси.

Таким образом, ключи 2 и 6 в модели всегда находятся в противоположных состояниях: если один открыт, то другой закрыт. Тем самым чередуется доступ к узлу delet разных типов транзактов-такси и пассажиров.

Рассмотренный принцип «тележки» позволил эффективно решить задачу взаимного исключения и координации процессов «производительпотребитель».


В результате выполнения программы был сгенерирован следующий код C++:

#include <Pilgrim.h>

forward

{

int fw;

modbeg("nonamed", 109, none, (long)time(NULL), none, none, none,none, 2);

ag("Запросы такси", 101, none, expo, 1, none, none, 103);

ag("Приходы такси", 102, none, norm, 8, 2,7, 10, 104);

network(dummy, dummy)

{

top(103):

queue("Очередь", none, 105);

place;

top(104):

queue("Такси ждет?", none, 106);

place;

top(105):

key("Есть такси?", 107);

place;

top(106):

key("Стоянка свободна?", 107);

place;

top(107):

if( 1 )

{

fw=108;

}

else

if( 1 )

{

fw=105;

}

else

{

fw=106;

}

delet("Вход в такси", none, none, none, none, fw);

place;

top(108):

term("Такси уехало");

place;

fault(123);

}

modend("pilgrim.rep", 1, 8, page);

return 0;

}

Анализ результатов

Результаты моделирования выводятся в виде таблицы.

Были получены следующие результаты:

Расшифруем названия столбцов.

№ узла – смысл очевиден.

Тип узла – смысл очевиден (ag, serv, key, queue, term, creat, delet, proc, dyna, send, direct, attach,manage);

Точка – номер последней точки пространства, в которой находится узел типа creat, delet или proc в момент окончания моделирования;

Загрузка – подсчитывается коэффициент использования транзактами узлов типа serv, key или proc в процентах. Если производятся пространственные перемещения узлов типа proc, creat или delet, то подсчитывается пройденный путь (для пространств типа geo путь считается в километрах). Узел key используется, когда через него проходят транзакты. Для узла attach это - коэффициент использования ресурса.

M[t] среднее – среднее значение времени задержки транзакта в узле или иной интервал времени, зависящий от типа узла:

1) для serv - это среднее время пребывания в узле (оно может быть больше времени обслуживания у неприоритетных транзактов при u=abs, т.е. при наличии приоритетных транзактов и правила абсолютных приоритетов);

2) для queue, send и attach - это среднее время задержки в очереди;

3) для ag - это среднее время между двумя сгенерированными транзактами;

4) для term или delet - это среднее время существования уничтоженных транзактов;

5) для key - это среднее время пребывания в закрытом состоянии;

6) для creat и dynam - всегда нулевое значение;

7) для proc при r=none, r=norm, r=expo или r=unif - это среднее время пребывания в узле (оно может быть больше времени обслуживания транзакта при переводе узла в пассивное состояние);

8) для proc при r=geo или r=dcr - это суммарное время пребывания транзакта в узлах dynam и proc с учетом возможных возвратов транзактов из proc в dynam


C[t] вариации - отношение дисперсии этого интервала к квадрату среднего значения времени задержки (коэффициент вариации, возведенный в квадрат). Для очереди коэффициент вариации равен среднему размеру группы транзактов, приходящих о очередь одновременно (при достаточно большом значении).

Счетчик входов - число транзактов, прошедших через узел, либо число сгенерированных транзактов (для ag или creat), либо уничтоженных (для term или delet). Для key - число выданных команд hold.

Кол.кан. – число каналов в узле.

Ост.тр. - количество транзактов, которые остались в узле в момент завершения моделирования;

Состояние узла в этот момент - состояние узла в момент окончания прогона модели: узел может быть «открыт» или «закрыт» для входа очередного транзакта (узлы serv и key), «активен» или «пассивен» (узел proc).

Сервер открыт, есть в нем есть хотя бы один свободный канал.

Для узлов send и attach в данном поле таблицы указывается остаток и дефицит ресурса (литеры «S» и «D» соответственно).

Заключение

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

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

Список использованной литературы

  1. Афанасьев М.Ю., Суворов Б.П. Исследование операций в конкретных ситуациях. - М.: Изд-во МГУ, 1999.
  2. Березин Д.А. Компьютерное моделирование систем массового обслуживания. Учебно-методическое пособие. Екатеринбург: Изд-во УрГУ, 2005
  3. Варфоломеев В.И. «Алгоритмическое моделирование элементов экономических систем». - М.: Финансы и статистика, 2000г.
  4. Емельянов А.А., Власова Е.А. Имитационное моделирование экономических процессов. - М. Московский международный институт эконометрики, информатики, финансов и права. 2002. – 92 с.
  5. Кеольтон В., Лод А. «Имитационное моделирование. Классика CS» издание 3-е, 2004г.;
  6. Кобелев Б.Н. Основы имитационного моделирования сложных экономических систем. - М.: Дело, 2003.