66526

СОБЫТИЙНЫЕ МОДЕЛИ ДИСКРЕТНЫХ СИСТЕМ. ЯЗЫК МОДЕЛИРОВАНИЯ ESimPL

Лабораторная работа

Информатика, кибернетика и программирование

Ресурс может одновременно выделяться нескольким транзактам процессам. К статическим характеристикам процесса относятся: длительность; результат; потребляемые ресурсы; условия запуска активизации; условия останова прерывания.

Русский

2014-08-22

985 KB

3 чел.


Tu

Tu

Еi

Pj

A

B

К

И

N2

Н

N1

СМО

А3

Тz

Нпст

Пст

2

Тm

Св

Зан

P1

eнПм

eнП1

eзО1

eзС1

eна1

eкПм

Т0

eка1

Тob

eоC1

eкП1

еоО1

eзС1

eна1

Тob

А1

А2

А4

А5

Тz

Нпст

Пст

P2

Тm

Св

Зан

P1

eнПм

eнП1

eзО1

eзС1

eна1

eкпм

Т0

eка1

Тob

eоС1

eкП1

еоО1

eзС1

eна1

Тob

А1

А2

0

Е0

Е1

Е2

Е3

Е4

eкп

- / Тz

Е0

Е1

Е4

Е3

P1=Св / Тob

- / Т0

Е2

- / 0

P2=Нпст / Тob

- / Тm

Е J T

E1 J1 T1  

E0

E2 J2 T2  

    

En Jn Tn  

Обслуживание  в средстве S

Номера транзактов

E3

Ожидание в очереди Q

E3

E2

E1

Ожидание  в очереди Q

3

2

1

0

5251

5366

5591

10000

t

Обслуживание  в средстве S

Окончание процесса моделирования

Интервал времени, определяемый состояниями списков

НАЧАЛО

Инициирующая секция (Е0)

Управляющая секция

Событийная секция Е1

Событийная секция Еn

Событийная секция ЕN

КОНЕЦ

Список
событий

Список
транзактов

Инициализация системы

Объявление средства
equip1

Объявление очереди
queue1

Планирование Е1 через
время
Т0

Планирование Е4 через
время
Тм

Начало

Конец

Создание процесса current_process

Генерация приоритета
Pr

Планирование Е1 через
время
Тz

Планирование Е2 через
время
0

Начало

Конец

Свободно

Начало

Занятие средства
equip1

Занятие очереди
queue1

Планирование Е3 через
время
Тob

Конец

P1

Занято

Начало

Освобождение средства
equip1

Пуста

Планирование   Е3 через
время
Тob

Освобождение очереди
queue1

Непуста

Удаление процесса current_process

Конец

Активизация нового процесса current_process

P1

Занятие средства
equip1

Начало

Вывод результатов

Конец

1

2

3

4

СОБЫТИЙНЫЕ МОДЕЛИ ДИСКРЕТНЫХ СИСТЕМ.
ЯЗЫК МОДЕЛИРОВАНИЯ ESimPL

Цель работы

Изучение организации событийно-ориентированных моделей дискретных систем (ДС) на языке ESimPL.

Основные теоретические положения

Функциональные модели как композиция объектов

Функциональные математические модели дискретных систем (ДС) представляются в виде совокупности статических и динамических объектов [1].

К статическим объектам относятся средства, ресурсы и очереди и их композиции (СМО, сети массового обслуживания и т.п.). Статические объекты существуют постоянно в системе. Статическими объектами могут быть ЭВМ, отдельные устройства, программные средства.

СРЕДСТВО (канал) – это объект, в котором выполняется обслуживание (обработка) транзактов (заявок, задач), причем одновременно может обслуживаться только один транзакт. Средства имеют два состояния: "занято" и "свободно". Средства – это объекты, в которых выполняются операции.

РЕСУРС (память) – это объект (средство, запас), необходимый для выполнения процессов функционирования и распределяемый между ними. Ресурс может одновременно выделяться нескольким транзактам (процессам). Ресурс имеет состояния: «полностью свободен», «полностью занят» и множество состояний «частично занят». 

Ресурс может быть активным и пассивным.

Активный ресурс – это объект, в котором может выполняться обслуживание сразу нескольких заявок.

Пассивный ресурс – это объект, распределяемый между заявками, но обслуживание заявок в нем не происходит. Эти заявки обслуживаются в этом случае в средстве.

ОЧЕРЕДЬ – это объект, в котором транзакты ожидают обслуживания (обработки). В зависимости от детализации модели очереди могут иметь либо два состояния «занята» и «свободна», либо несколько состояний вида: «свободна», «занята одной заявкой», «занята двумя заявками» и т.д. вплоть до состояния «полностью занята».

К объектам динамического типа относятся транзакты, активности, процессы и события. Динамические объекты существуют не постоянно в системе, они создаются или появляются в системе и затем уничтожаются или уходят из системы. Основной характеристикой динамических объектов является время.

ТРАНЗАКТ (заявка) – это некоторый объект, сообщение (заявка на обслуживание), который поступает извне на вход системы и подлежит обслуживанию (обработке), то есть это динамический объект, проходящий обслуживание (обработку) в системе, требование на обслуживание.

В рамках одной имитационной модели могут рассматриваться транзакты нескольких типов. Каждый транзакт характеризуется соответствующим алгоритмом (процессом) обработки и необходимыми для его реализации ресурсами системы. Учитывая это, прохождение транзакта по системе можно в некоторых случаях рассматривать как последовательную активизацию процессов, реализующих его обработку («обслуживание заявки»).

СОСТОЯНИЕ – положение системы, совокупность (набор) значений внутренних параметров системы, множество наборов значений внутренних параметров системы. Все статические и динамические объекты системы, кроме событий, обладают состояниями.

АКТИВНОСТЬЮ является элементарное действие (операция, шаг) на данном уровне представления системы.

Активность характеризуется временем выполнения и потребляемыми ресурсами. Активности имеют два состояния: «выполняется» (существует) и «не выполняется» (не существует в данный момент модельного времени). Активность всегда связана со статическим объектом, которым она выполняется.

Логически связанный набор активностей образует ПРОЦЕСС, который  можно рассматривать как объект, вмещающий или инициирующий эти активности. Некоторый процесс может выступать в роли активности в процессе более высокого уровня.

Любой процесс характеризуется совокупностью статических и динамических характеристик.

К статическим характеристикам процесса относятся:

  •  длительность;
  •  результат;
  •  потребляемые ресурсы;
  •  условия запуска (активизации);
  •  условия останова (прерывания).

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

Динамической характеристикой процесса является его состояние (выполняется, не выполняется, активен, не активен (находится в состоянии ожидания ресурса)). Процесс может иметь два или более состояний.

СОБЫТИЕ представляет собой значимое мгновенное изменение функциональной модели, имеющее положение во времени и пространстве.

Возможны следующие события изменения:

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

К событиям изменения структуры системы относятся события создания, изменения и удаления объектов и связей, составляющих структуру системы.

События изменения состояний по виду объектов разделяются на две разновидности: 

  •  события изменения состояний динамических объектов или события следования, к ним относятся события изменения состояний процессов и активностей,
  •  события изменения состояний статических объектов или события изменения состояний, к ним относятся события изменения состояний статических объектов (средств, ресурсов и очередей), которые управляют выполнением активностей, относящихся к различным процессам.

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

Функционирование ДС представляется как процесс прохождения транзактов (заявок) через систему. При прохождении транзакта через систему он может поступать на обслуживание в некоторый статический объект (средство). Если этот объект был в состоянии "свободен", то он переходит в состояние "занят".

Если транзакт поступает на вход статического объекта, который уже занят обслуживанием другого транзакта, то возможно образование очереди на входе статического объекта. В некоторых функциональных моделях очередь включается в статический объект "средство". В этом случае статический объект характеризуется не только своим состоянием, но и наличием очереди. Очередь характеризуется своим состоянием, размером и  дисциплиной обслуживания заявок в очереди. Транзакт (заявка на обслуживание) в систему поступает извне. Поэтому составной частью функциональной модели, является модель источника входного потока транзактов, которая задает моменты появления транзактов и их параметры в модели.

Для описания функциональных моделей ДС существуют специальные языки. Эти языки разделяются на три вида [1]:

  •  языки, ориентированные на процессы;
  •  языки, ориентированные на события, к ним относится язык ESimPL;
  •  языки, ориентированные на активности.

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

Математическая модель ДС в виде событийного графа

Математическая модель в виде событийного графа используется для формализации процесса создания математической модели дискретной системы (ДС).

СОБЫТИЙНЫЙ ГРАФ представляет процесс функционирования ДС в терминах событий и отображает причинно-следственные связи между событиями и состоит из четырех типов вершин и четырех типов дуг (pис.1).

Вершины      Дуги

1)       1)

   

2)       2)

3)        3)

4)       4)

Рис.1. Условно-графические обозначения элементов событийного графа

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

Вершина второго типа Pj отображает условное разветвление по логическому условию Pj. В этой вершине вычисляется логическое выражение или набор логических выражений fPj, в зависимости от истинности которых происходит переход по соответствующему выходу вершины. Вершина может иметь любое количество входов и два или более выходов. Каждый выход вершины помечается соответствующим значением набора логических выражений fPj, например, 0 или 1, да или нет. Выход вершины может также помечаться состоянием анализируемого статического объекта.

Вершина третьего типа A отображает распараллеливание выполнения процесса. Вершина может иметь любое количество входов и выходов.

Вершина четвертого типа B отображает окончание распараллеливания выполнения процесса. В этой вершине вычисляется логическое выражение fB окончания распараллеливания, в зависимости от истинности которого происходит переход к следующей вершине событийного графа. Выделяются две типовые функции fB: И (And) и ИЛИ (Or). В случае функции И вершина, следующая за вершиной окончания распараллеливания процесса, выполняется если все параллельные потоки процесса завершены. В случае функции ИЛИ вершина, следующая за вершиной окончания распараллеливания процесса, выполняется если завершен хотя бы один из параллельных потоков процесса. Завершение остальных потоков не порождает выполнения вершины, следующей после вершины B. Вершина B может иметь любое количество входов и только один выход.

Дуга первого типа отображает причинно-следственную связь между событиями Ei и Ev без задержки во времени (Т = 0 ), то есть это дуга мгновенного следования события Ev после события Ei.

Дуга второго типа – с задержкой во времени Tu >= 0, то есть это дуга следования с задержкой. Дуга второго типа помечается величиной задержки Tu.

Дуга третьего типа отображает причинно-следственную связь отмены события Ev после события Ei без задержки во времени (Т = 0), то есть это дуга мгновенной отмены события Ev после события Ei.

Дуга четвертого типа – отображает причинно-следственную связь отмены события Ev после события Ei с задержкой во времени Tu >= 0, то есть это дуга отмены с задержкой события Ev после события Ei. Дуга четвертого типа помечается величиной задержки Tu.

Построение событийного графа

Построение событийного графа состоит из следующих шагов:

  1.  Выделение статических и динамических (процессов и активностей) объектов.
  2.  Определение состояний статических и динамических объектов и выделение событий.
  3.  Определение связей между событиями и построение событийного графа.

Первый шаг

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

Выделение средств и очередей может производиться по математической модели ДС в виде композиции СМО: каждому элементу СМО типа "канал обслуживания" ставится в соответствие элемент функциональной модели "средство", каждому элементу СМО типа "накопитель" – элемент "очередь" с теми же параметрами.

Активности и процессы выделяются по описанию процесса функционирования ДС, прежде всего по временной диаграмме процесса функционирования. Элементарные действия, время выполнения которых неравно нулю, отображаются активностями. Элементарные действия, время выполнения которых равно нулю (длительность настолько мала, что ею можно пренебречь), отображаются событиями. Связанные последовательности действий, начинающиеся с появления заявки (транзакта) в системе и заканчивающиеся уходом заявки (транзакта) из системы, объединяются в процессы.

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

Второй шаг

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

езSi – событие занятия средства Si,

еоSi – событие освобождения средства Si.

Конечная очередь Qh с максимальной длиной L имеет L+1 состояние и 2L изменений состояний, которым могут быть сопоставлены события. Однако, при составлении событийного графа удобнее выделять два состояния очереди: "занята данной заявкой" и "свободна от данной заявки". В этом случае возможны только два изменения состояния очереди, которым соответствуют два события:

езQh – событие занятия очереди Qh заявкой,

еоQh – событие освобождения очереди Qh заявкой.

Активности и процессы имеют по два состояния: "выполняется" и "не выполняется". Для них возможны два изменения состояний: с "не выполняется" на "выполняется" и наоборот. Этим изменениям сопоставляются следующие события:

енаj – событие начала активности аj,

екаj – событие конца активности аj,

енПu – событие начала процесса Пu,

екПu – событие конца процесса Пu.

Процессу моделирования Пм также соответствуют два события:

енПм – событие начала процесса моделирования Пм,

екПм – событие конца процесса моделирования Пм.

Третий шаг

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

Пример

На рисунке 2 приведен пример простейшей модели ДС в виде СМО, состоящей из бесконечного накопителя Н и канала К. Источник И генерирует  входной поток заявок на обслуживание N1, N2 – выходной поток обслуженных заявок.

Рис. 2. Система массового обслуживания

Соответствие элементов модели в виде СМО и в виде событийного графа для рассматриваемого примера приведено в таблице 1.

Таблица 1. Выделение объектов событийного графа

Модель СМО

Событийная модель

Шаг 1. Выделение
объектов

Шаг 2. Выделение событий

Статические объекты

События

Каналы обслуживания

Канал К

Средство equip1

eзС1,  eоС1

Накопители

Накопитель Н

Очередь queue1

eзО1,  eоО1

Действия

Динамические объекты

Обслуживание в К

Активность a1

eна1,  eка1

Последовательности действий

Процессы

Обслуживание заявки в СМО

Процесс обслуживания П1

eнП1, eкП1

Процесс моделирования Пм

eнПм, eкПм

Исходный событийный граф, представляющий имитационную модель процесса функционирования СМО приведен на рисунке 3.

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

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

Р1 – анализ состояния средства equip1, значения: Зан – "занято",
Св – "свободно";

Р2 – анализ состояния очереди queue1, значения: Пст – "пуста",
Нпст – "непуста".

Дуги второго типа помечаются величинами задержки:

Тm – время моделирования,

Т0 – время поступления первой заявки после начала моделирования,

Тz – интервал времени между поступлениями заявок,

Тob – время обслуживания заявки в канале (длительность активности).


Рис. 3. Исходный событийный граф имитационной модели СМО


Программная модель ДС на языке ESimPL

На следующем этапе математическая модель ДС в виде событийного графа преобразуется в программную модель на языке ESimPL. Это осуществляется в два шага:

  1.  преобразование событийного графа в программно-реализуемую форму,
  2.  построение программной модели путем интерпретации элементов событийного графа.

Программная модель на событийно-ориентированном языке представляет собой совокупность инициирующей, управляющей и событийных СЕКЦИЙ (блок-схема программной модели в приложении 3).

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

  1.  все дуги, соединяющие вершины внутри подграфов, являются дугами первого типа;
  2.  все дуги, соединяющие подграф с остальными подграфами событийного графа, являются дугами второго, третьего или четвертого типа;
  3.  подграф имеет не более одной точки входа;
  4.  внутри подграфа могут быть вершины третьего типа (начала распараллеливания процесса) с не более чем одной выходной дугой первого типа.

Таким образом, событийная секция объединяет группу событий, т.е. является сложным событием или МАКРОСОБЫТИЕМ.

Макрособытийная модель ДС

Взаимосвязанная последовательность событий, следующих друг за другом мгновенно (без задержки времени), может быть объединена в МАКРОСОБЫТИЕ. Макрособытию соответствует подграф событийного графа, внутри которого вершины соединены только дугами первого типа.

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

ТОЧКОЙ ВХОДА называется вершина подграфа, в которую входит одна или несколько дуг второго, третьего или четвертого типа. Вершина окончания распараллеливания процесса всегда является точкой входа подграфа.

ТОЧКОЙ ВЫХОДА подграфа называют вершину, из которой выходит дуга второго, третьего или четвертого типа. У подграфа макрособытия может быть несколько точек выхода или ни одной.

Выделим подграфы и соответствующие им макрособытия (событийные секции) для рассматриваемого примера (см. рис. 3). Для этого (рис. 4):

  •  заменим дугу первого типа A1P1 дугой второго типа с задержкой 0;
    •  преобразуем параллельное выполнение событий eзС1 и eна1 в последовательное: сначала событие eзС1, а затем – eна1;
    •  преобразуем параллельное выполнение события eкП1 и проверки условия P2 в последовательное: сначала событие eкП1, а затем – P2.

В результате этого мы получим следующие макрособытия:

Е0 – безусловное макрособытие начала моделирования, точек входа нет, одна точка выхода O1 – вершина А1;

Е1 – безусловное макрособытие поступления заявки в СМО, одна точка входа I1 - вершина eнП1, одна точка выхода O1 – вершина А2;

Е2 – условное макрособытие начала обслуживания заявки в СМО, одна точка входа I1 – вершина P1, одна точка выхода O1 – вершина eна1;

Е3 – условное макрособытие окончания обслуживания заявки в СМО, одна точка входа I1 – вершина eка1, одна точка выхода: O1 – вершина eна1;

Е4 – безусловное макрособытие окончания моделирования, одна точка входа I1 - вершина eкПм, точек выхода нет.

Подграфы макрособытий Е0 Е4 удовлетворяют вышеуказанным условиям. Макрособытия Е1 и Е2 могут быть объединены в одно макрособытие. В данном примере они разделены с точки зрения удобства моделирования.


Рис. 4. Событийный граф процесса функционирования СМО
в программно-реализуемой форме


Событийный граф, состоящий из макрособытий Е0Е4, приведен на
рисунке 5. Макрособытия связаны только дугами второго типа. Дуги помечаются парой
<условие> / <время>, прочерк означает безусловный переход. Если у макрособытия больше одного выхода, то они помечаются. Условие определяется как дизъюнкция С1С2СN, где n=(1, …, N) – номер пути (ветви) от точки входа макрособытия до рассматриваемой точки выхода, Сn= P1&P2&…&PK – конъюнкция условий следования Pk от точки входа до точки выхода макрособытия.

Рис. 5. Событийный граф на уровне макрособытий

В программной модели (приложение 4) каждому макрособытию (Е0 – Е4) соответствует процедура (событийная секция).

Содержание макрособытий.

Макрособытие Е0 (начало процесса моделирования):

  •  инициализация системы моделирования, начальная установка модельного времени (current_time = 0);
  •  определение средства – equip1 (имя при выводе на печать Ср);
  •  определение очереди – queue1 (имя при выводе на печать Оч);
  •  планирование события Е1 через время 0 для процесса моделирования Пм (Main_process) (на временной диаграмме имеет номер 0);
  •  планирование события Е4 через время Тm для процесса моделирования Пм (Main_process).

Макрособытие Е1 (начало процесса обслуживания заявки в СМО):

  •  создание нового текущего процесса current_process (процесса обслуживания заявки П1);
  •  генерация атрибутов процесса – приоритета процесса Pr;
  •  планирование события Е1 через время Тz для процесса моделирования Пм (Main_process);
  •  планирование события Е2 через время 0 для текущего процесса current_process.

Макрособытие Е2 (занятие средства):

  •  если состояние equip1 = 0 («свободно»), то:
    •  установить equip1 = 1 («занято»),
    •  запланировать событие Е3 через время Тob для текущего процесса current_process;
  •  если состояние equip1 = 1 («занято»), то поставить текущий процесс current_process в очередь queue1 в соответствии с приоритетом процесса Pr.

Макрособытие Е3 (конец процесса обслуживания заявки в СМО):

  •  освобождение средства – equip1 = 0;
  •  окончание текущего процесса обслуживания current_process (удаление из таблицы процессов);
  •  если состояние очереди «непуста» – L  ≥ 0 (длина очереди не 0), то:
    •  процесс J, стоящий в очереди queue1 первым, удалить из очереди, при этом удаленный из очереди процесс становится текущим процессом current_process,
    •  установить equip1 = 1 («занято»),
    •  планирование события Е3 через время Тob для текущего процесса current_process.

Макрособытие Е4 (конец процесса моделирования):

  •  вывести отчет о результатах моделирования.

В приложении 3 приведены блок-схемы программной модели и событийных секций (макрособытий). В приложении 4 приведен код программной модели на языке ESimPL.

Среда имитационного событийного моделирования ESimPL 

Среда имитационного событийного моделирования дискретных систем ESimPL включает CASE-средство разработки моделей и библиотеку поддержки имитационного моделирования (рис. 6).

Среда ESimPL ориентирована на процесс обучения, имеет графический ввод и вывод, что значительно снижает трудоемкость разработки, ввода и проверки модели, повышает наглядность процесса моделирования, позволяет проводить различные эксперименты с моделью, по ходу эксперимента изменять его условия и наблюдать за состоянием всех объектов и самой системы моделирования. Все это повышает эффективность обучения моделированию. Среда имитационного моделирования ESimPL базируется на использовании событийных графов [2, 3] для описания процесса функционирования исследуемой системы.

Рис. 6. Схема разработки имитационных событийных моделей в среде ESimPL

CASE-средство разработки моделей позволяет визуально моделировать поведение дискретных систем на языке событийных графов и генерировать код программной модели в виде совокупности процедур макрособытий на языке программирования высокого уровня с использованием библиотеки поддержки имитационного моделирования. Библиотека поддержки представляет собой совокупность классов на языке программирования модели.

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

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

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

Рис. 7. События изменений состояний объектов модели в среде ESimPL

Внутренними элементами, не представляемыми графически, являются статические и динамические объекты и переменные модели. Статическими объектами являются средства (каналы), очереди и ресурсы. Динамическими объектами – процессы и активности. Каждому объекту ставится в соответствие два события изменения состояния: занятие и освобождение для статического объекта (за исключением очереди, для которой добавляется событие удаления), начало и конец выполнения для динамического. Переменные разделяются на две разновидности: переменные, относящиеся ко всей модели в целом и переменные, индивидуальные для каждого процесса.

Языком программирования моделей среды ESimPL является язык высокого уровня С++, дополненный библиотекой поддержки имитационного моделирования. Библиотека поддержки предоставляет низкоуровневый интерфейс разработки программной модели, связанный с языком программирования. Язык моделирования ESimPL является развитием событийно-ориентированного языка SMPL [1] и разработан с использованием объектно-ориентированного подхода. Программная модель генерируется на языке С++, в тексте которой используются операторы языка ESimPL, реализованные в виде вызова методов граничного класса TModel библиотеки поддержки имитационного моделирования. Язык моделирования определяется набором операторов, используемых при разработке программной модели. Таким образом, язык моделирования ESimPL на уровне программной модели является расширением языка С++, то есть, образован операторами вызова специальных подпрограмм и языковыми средствами С++.

Подпрограммы реализуют основные и вспомогательные операции над объектами модели и в совокупности составляют систему имитации во времени функционирования модели, описанной на языке ESimPL.

Информационное обеспечение системы ESimPL состоит из файлов, хранимых на жестком магнитном диске, и списков информационных структур, располагающихся в оперативной памяти ЭВМ.

В файлах хранятся сгенерированная программная модель на языке С++ Builder (файл с расширением cpp) и полное описание событийной модели в файле XML-формата. В оперативной памяти системой создаются информационные структуры, в которых размещаются список поступивших на выполнение транзактов и список запланированных событий, а также данные о статических объектах (средствах, очередях и ресурсах).

В списке выполняемых транзактов для каждого транзакта (процесса), существующего в данный момент модельного времени, хранятся, помимо его уникального номера (идентификатора), значения переменных процесса
Р1, ..., РN. Переменные процесса – это параметры, которыми различаются транзакты в случае неоднородного потока заявок, а также накапливаемые данные, например количество циклов обслуживаний. Список транзактов организован таким образом, что информационные структуры ушедших из системы транзактов не удаляются из памяти, а помечаются как «свободные» и будут использованы при последующих вызовах оператора создания нового транзакта.

В рассматриваемой модели (приложение 4) транзакты отличаются только приоритетами, поэтому в информационной структуре транзакта добавлен параметр Pr, значение которого генерируется в момент появления транзакта в системе (событийная секция Е1) и используется при занятии очереди Q (событийная секция Е2).

Список событий представляет собой (рис. 8) список, в котором для каждого планируемого события E хранится номер транзакта J, которому принадлежит данное событие, и время Т, когда должно произойти это событие. Список упорядочен в порядке возрастания времени Т, то есть во главе списка стоит ближайшее в будущем планируемое событие. E0 – указатель на первый элемент списка событий.

Сгенерированный CASE-средством ESimPL текст программной модели в дальнейшем сохраняется в cpp-файле среды программирования Borland C++ Builder, в которой совместно с библиотекой поддержки имитационного моделирования компилируется в исполняемый код программной модели.

Рис. 8. Структура списка событий

Программная модель имеет два режима вывода информации о моделировании:

  •  вывод на дисплей,
    •  вывод в текстовый файл;

и три режима моделирования:

  1.  Без вывода – режим эксперимента, то есть автоматического прогона модели без вывода промежуточных результатов (событий и состояний объектов).
  2.  С выводом состояний системы – в этом режиме, начиная с заданного значения модельного времени, выводятся списки событий, состояния средств, ресурсов и очередей, то есть состояния системы. Число выводимых состояний задается.
  3.  С трассировкой – в этом режиме, начиная с заданного значения модельного времени, выводится трасса: последовательность событий в модели. Выводится номер события, номер процесса, которому принадлежит событие, и время события. Число выводимых событий задается.

Временная событийная диаграмма

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

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

Таблица 2. Пример трассировки модели

Время события

Номер события

Номер транзакта

5251

1

0

5251

2

1

5366

3

2

5591

3

3

Номер события i в таблице трассировки определяет событийную секцию и макрособытие Ei, выполняемое в этот момент модельного времени отмечаемое на временной диаграмме.

Рис. 9. Временная событийная диаграмма процесса моделирования

Сплошные линии со стрелками на временной событийной диаграмме обозначают наличие временной причинно-следственной связи между соответствующими событиями в соответствии с макрособытийным графом (см. рис. 5). Пунктирная линия обозначает ожидание обслуживания транзактом в очереди. Уточнение состояния статических и динамических объектов можно выполнить в режиме прогона модели с выводом состояний системы.


Порядок выполнения работы

  1.  Изучить методические указания к лабораторной работе.
  2.  Выбрать по таблице в приложении 2 задание. При этом необходимо иметь ввиду, что исследуется СМО, представленная на рисунке 2.
  3.  Откорректировать событийный граф (см. рис.3) в соответствии с заданием. Коррекцию необходимо выполнить, если по заданию очередь является конечной или окончание процесса моделирования осуществляется по числу заявок.
  4.  В среде ESimPL:
    1.  Задать статические (средства и очереди) и динамические (процессы и активности) объекты модели.
    2.  Построить событийный граф программной модели (приложения 3, 4 и 5) в  соответствии с заданием.
    3.  Определяются переменные модели.
    4.  Создается исходный событийный граф и задаются параметры всех вершин и дуг.
    5.  Выполняется проверка и сохранение исходного событийного графа.
    6.  Исходный событийный граф преобразуется в программно-реализуемую форму, выделяются макрособытия.
    7.  Выполняется проверка и сохранение преобразованного событийного графа.
    8.  Генерируется и сохраняется код программной модели на языке С++ Builder.

В приложении 3 приведены алгоритмы событийных секций Е0 – Е4 для событийной модели СМО (см. рис. 4 и 5). В приложении 4 приведена программная модель СМО. В приложении 5 приведено руководство по использованию системы моделирования ESimPL.

  1.  Строится событийный граф на уровне макрособытий (см. рис. 5).
  2.  Найти и выделить строки в коде программной модели, в которых отражены параметры варианта задания (приложение 4).
  3.  Выполнить 2 прогона программной модели в следующих режимах:
  •  без вывода состояний системы;
  •  с трассировкой.

Результаты всех прогонов вывести в файлы результатов, а затем распечатать. Во втором режиме производить вывод 10 состояний, начиная с модельного времени 1000. Распечатать программную модель.

  1.  Провести анализ результатов эксперимента. Построить временную событийную диаграмму (на основе трассировки и событийного графа).

Содержание отчета

  1.  Задание.
  2.  Откорректированная в соответствии с заданием модель СМО (рис. 2) и событийный граф.
  3.  Листинг программной модели: отметить откорректированные места.
  4.  Распечатка отчета о моделировании в первом режиме моделирования системы.
  5.  Распечатка последовательности событий во втором режиме моделирования системы.
  6.  Временная событийная диаграмма.

Контрольные вопросы

  1.  В виде совокупности каких объектов представляется функциональная модель дискретной системы? Поясните их смысл.
  2.  Дайте определение событийного графа?
  3.  Из каких элементов строится событийный граф?
  4.  Из каких шагов состоит построение событийного графа?
  5.  Поясните содержание каждого шага построения событийного графа?
  6.  Объясните алгоритм обслуживания заявки в СМО по событийному графу (см. рис. 3).
  7.  Как преобразовать событийный граф в программную модель?
  8.  Какова структура программной модели?
  9.  Какова структура списка событий?
  10.  Какие виды переменных модели вы знаете?
  11.  Объясните выполняемые операции в событийной секции, используя алгоритм событийной секции и листинг программной модели.

Библиографический список

  1.  Автоматизация проектирования вычислительных систем.  Языки, моделирование и базы данных. /Под ред. М. Брейера. – М.: Мир, 1979. – с.12-29, с.35-44.
  2.  Бабкин Е.А. Событийные модели дискретных систем. – Курск. гос. ун-т. Курск, 2005. – 18 с. Деп. в ВИНИТИ 14.01.05, № 30-В2005.
  3.  Бабкин Е.А. Детерминированная проверка событийных графов. Ученые записки. Электронный научный журнал Курского государственного университета, Эл № 77-26463, № 1, 2006. http://www.scientific-notes.ru/pdf/s16.pdf.

Приложение 1
Язык ESimPL

При описании операций, входящих в язык ESimPL, будем использовать следующие обозначения:

Е – идентификатор события,

Т – моменты совершения событий,

J – процесс (указатель процесса),

F – средство (указатель средства),

Q – очередь (указатель очереди),

R – ресурс (указатель ресурса),

Main_process – указатель главного процесса – процесса моделирования (процесс с номером 0),

current_process – указатель текущего процесса.

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

Операторы языка

Операции инициализации и описания

mymodel = new TMyModel()  оператор создает объект (экземпляр) класса модели и возвращает его адрес в памяти, который сохранятся в переменной mymodel (имя переменной может быть изменено); происходит инициализация начальных состояния внутренних переменных и списков, а также устанавливается нулевое значение времени моделирования (переменная current_time). Этот оператор не имеет выходных переменных и должен быть выполнен прежде всех остальных операторов языка. В дальнейшем все операторы языка вызываются через переменную модели, так как являются методами класса модели.

mymodel->printHeader() – оператор вывода на дисплей информации о системе моделирования. Оператор не несет никакой смысловой нагрузки и без ущерба для логики работы программной модели может быть удалён.

mymodel->printAndSetupOptions() – оператор установки опций работы системы моделирования (режим моделирования и режим вывода информации, а также дополнительные параметры) посредством диалога с пользователем в режиме «вопрос – ответ». Данный оператор не возвращает никакого значения.

F = mymodel->Create_equip("<имя F>") – оператор, регистрирующий в системе моделирования новое средство F. Строка <имя F> представляет символьное имя средства (количество символов не ограничено), под которым средство фигурирует в выходных документах моделирования. Оператор возвращает указатель на экземпляр класса средства, описывающего поведение средства. Например, объявление средства:

equip1 = mymodel->Create_equip("Банкомат");

Объявление средства канал:

equip1=mymodel->Create_equip("Канал");

 Q = mymodel->Create_queue("<имя Q>", Length, dis_obs) – оператор, регистрирующий в системе моделирования новый объект Q типа «очередь». Строка <имя Q> представляет символьное имя очереди (количество символов в строке не ограничено), под которым очередь фигурирует в выходных документах моделирования. Целочисленный параметр Length определяет ёмкость (максимальную длину) очереди (нулевое значение этого параметра означает неограниченную ёмкость), в случае превышения данного не нулевого значения во время работы программной модели будет сгенерирована исключительная ситуация и работа системы будет остановлена с соответствующим кодом ошибки. Целочисленный параметр dis_obs определяет дисциплину обслуживания (постановки) элементов в очередь; возможны три значения этого параметра:

  •   0 – постановка элементов (процессов) в очередь по их приоритету, первым становится элемент с наибольшим значением приоритета;
    •   1 – дисциплина постановки элементов в очередь по принципу «Первый пришел – первый ушел» (FIFO);
      •   2 – дисциплина постановки элементов в очередь по принципу «Последний пришел – первый ушел» (LIFO).

Оператор возвращает указатель на экземпляр класса очереди.

Например, объявление очереди:

queue1=mymodel->Create_queue("Лоток фрезерного станка",12,1);

– создает очередь с именем <Лоток фрезерного станка >, ёмкостью равной 12-ти и дисциплиной постановки новых элементов в очередь по принципу FIFO.

Объявление бесконечной приоритетной очереди канала:

queue1=mymodel->Create_queue("Очередь к банкомату",0,0);

R = mymodel->Create_resource("<имя R>", volume) оператор создает новый объект R типа «ресурс» и регистрирует его в списке ресурсов с именем <имя R> (количество символов не ограничено). Параметр volume определяет максимальный целочисленный объем ресурса, который предоставляется процессам для их нужд. Метод возвращает указатель на экземпляр класса ресурса.

Например, объявление ресурса:

resource1 = mymodel->Create_resource("Рабочие цеха", 15);

Операции планирования и отмены событий

mymodel->schedl (E, TI, J) – оператор планирования события Е для процесса J через время TI; помещает в список событий новый элемент с параметрами: Е – номер события; J – указатель на экземпляр процесса, которому принадлежит это событие, TI - время, через которое должно произойти это событие. Этот оператор не возвращает никакого значения. Например планирование события 1 через время T0 распределенное по экспоненциальному закону для процесса моделирования Main_process:

mymodel->schedl(1,mymodel->fnp(T0),mymodel->Main_process);

Параметр класса модели Main_process соответствует главному процессу моделирования, который имеет нулевой идентификатор.

mymodel->cause(E, J) – оператор определения текущего события Е, принадлежащего процессу J; удаляет из списка событий элемент, который находится в его вершине, устанавливает значение текущего времени current_time моделирования равным соответствующему времени совершения событий и возвращает значения номера события Е и указателя на экземпляр процесса J. Например:

mymodel->cause(eventNumber, current_process);

dT = mymodel->cancel(E, J, S) – оператор отмены события; отыскивает в списке запланированных событий первое (ближайшее) по времени совершения событие E для процесса J, удаляет соответствующий элемент из списка и возвращает значение dT разности между временем, когда должно было наступить событие, и текущим модельным временем. Логический параметр S определяет реакцию системы при отсутствии искомого события в списке запланированных событий. При значении данного параметра равного «истина» система сгенерирует нефатальную ошибку №1, с занесением в отчет её параметров; процесс выполнения программной модели прерван не будет. При значении данного параметра равного «ложь», установленного по умолчанию, будет сгенерирована фатальная ошибка №9, при этом процесс выполнения программной модели будет прерван и выведена информация об ошибке. Например:

dT = mymodel->cancel(2, current_process, true);

Удаляет из списка событий ближайшее по времени событие под номером 2 для процесса current_process. Отсутствие такового события не приведет к завершению работы программной модели.

mymodel->cancelM(J) – оператор отмены всех запланированных событий процесса J; удаляет из списка запланированных событий все события, принадлежащие процессу J. Отсутствие в списке искомых событий не влияет на продолжение работы модели, то есть никаких ошибок сгенерировано не будет.

mymodel->cancelAll() – оператор отмены всех событий; удаляет все элементы из списка запланированных событий (очищает список).

Операции над очередями

mymodel->enque(Q, J, P) – оператор занятия очереди, помещает процесс J в очередь Q, где параметр Q определяет указатель на экземпляр очереди в моделирующей программе, т.е. значение, возвращаемое оператором объявления очереди mymodel->Create_queue(). Позиция постановки процесса J в очередь Q определяется её дисциплиной обслуживания, которая указывается при создании очереди. Если очередь имеет дисциплину постановки по приоритету процессов, то третьим параметром P указывается целочисленный приоритет процесса. Первым в очереди будет процесс с наибольшим приоритетом. Если приоритеты некоторых процессов совпадают, то эти элементы располагаются в порядке поступления. Этот оператор не возвращает никакого значения.

J = mymodel->head( Q ) – оператор-функция освобождения процесса J, стоящего первым, из очереди Q (этот процесс удаляется из очереди). Оператор возвращает указатель на экземпляр этого процесса.

L = mymodel->length( Q ) – оператор-функция определения длины очереди Q, значение функции равно числу элементов, находящихся в очереди Q.

T = mymodel->remove(Q, J) – оператор-функция удаления из очереди Q процесса J. Функция возвращает время нахождения процесса J в очереди Q.

J = mymodel->first( Q ) – оператор-функция определения процесса J, стоящего первым в очереди Q; функция возвращает указатель процесса J, если в очереди нет процессов, то нулевой указатель. Состояние очереди после выполнения оператора не изменяется.

Операции над средствами

mymodel->reserv(F, J) – оператор занятия средства F процессом J. Параметр F представляет указатель на экземпляр средства в моделирующей программе, т.е. значение, возвращаемое оператором объявления средства mymodel->Create_equip(). Этот оператор не возвращает никакого значения.

mymodel->releas( F ) – оператор освобождения средства F. Этот оператор не возвращает никакого значения.

S = mymodel->status( F ) – оператор-функция определения состояния S средства F. Если средство занято, возвращается логическое значение «истина». Если средство не занято, то возвращается логическое значение «ложь».

J = mymodel->Status( F ) – оператор-функция определения состояния средства F. Если средство занято, то возвращается  указатель на занявший его процесс, иначе возвращается нулевой указатель.

Операции над ресурсами

mymodel->occupy(R, J, V) оператор занятия ресурса R процессом J, где параметр R определяет имя ресурса в моделирующей программе, т.е. значение, возвращаемое оператором объявления ресурса mymodel->Create_resource(). Целочисленный параметр V, определяет объем ресурса, который занимает процесс J. Этот оператор не возвращает никакого значения.

mymodel->exempt(R, J) – оператор освобождения ресурса R от процесса J. Оператор возвращает значение, равное объёму ресурса, которое занимал процесс J. 

V = mymodel->volume(R) – оператор-функция определения занятого объема V ресурса R. Значение функции равно количеству занятого ресурса R.

Операции над процессами

J = mymodel->NewProcess()  оператор создает и регистрирует в системе новый процесс. Оператор возвращает указатель на созданный экземпляр процесса.

mymodel->DeleteProcess( J ) – оператор удаления из системы процесса J. Этот оператор не возвращает никакого значения.

mymodel->end_parallel( J, E, H, Fun)  – оператор окончания распараллеливания хода выполнения процесса J. Оператор соответствует вершине четвертого типа, которая в макрособытийном графе является точкой входа в макрособытие, и соответственно оператор будет первый в функции-обработчике данного макрособытия. Оператор возвращает логическое значение «истина» если условие окончания не наступило и должен быть осуществлен досрочный выход из функции-обработчика (макрособытие не выполняется), в противном случае возвращается логическое значение «ложь» и выполнение функции-обработчика продолжается (макрособытие выполняется). Оператор имеет следующие параметры:

  •  J – указатель на процесс, для которого осуществляется проверка;
    •  E – номер макрособытия, в котором находиться оператор;
      •  H – количество параллельных участков хода выполнения процесса, завершающихся в соответствующей вершине (количество входящих дуг в вершину четвертого типа);
      •  Fun – символьное обозначение логической функции условия окончания распараллеливания («1» – функция «ИЛИ», «&» – функция «И»).

Операции документирования моделирования

mymodel->report() – оператор вывода в отчет о моделировании статистических данных о статических объектах: средствах, очередях и ресурсах. В ходе выполнения моделирующей программы эти данные фиксируются и накапливаются. Статистические данные выводятся в табличной форме в конце прогона программы или в любой указанной точке программы с помощью оператора без параметров. В таблице указывается среднее время пребывания в занятом состоянии, процент занятого времени и число запросов резервирования, обращенных к каждому из средств моделирующей программы. Для каждой из очередей, определенных в программе, в таблице указываются среднее время ожидания, среднее квадратическое отклонение времени ожидания, средняя максимальная длина очередей и число элементов, входивших в очередь.

mymodel->output(varname, var) – оператор вывода в отчет о моделировании значения переменной var, поименованное текстовой строкой varname. Этот оператор не возвращает никакого значения.

Статистические операции

В языке ESimPL имеются три оператора, генерирующие псевдослучайные величины с вероятностными распределениями определенного вида.

X = mymodel->fnp(M) – оператор-функция генерирует псевдослучайные вещественные значения, распределенные по экспоненциальному закону со средним M. Параметр М может принимать вещественным значения двойной точности.

X = mymodel->irand(M1, M2) – оператор-функция генерирует псевдослучайные вещественные значения X, распределенные по равномерному закону на отрезке [M1 .. M2].

X = mymodel->irand_int(M1, M2) – оператор-функция генерирует псевдослучайные равновероятностные целочисленные значения X, где
M1  X  M2.

X = mymodel->uniform() – оператор-функция генерирует псевдослучайные вещественные значения X, распределенные по равномерному закону на интервале (0,1).

Дополнительные операции

mymodel->cur_time() – оператор, возвращающий текущее модельное время.

Переменные модели

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

Обращение (использование) переменных процесса выполняется по указателям (именам) статических объектов с помощью соответствующих операторов, например, занятие средства equip1 текущим процессом current_process:

mymodel->reserv(equip1,current_process);    

Для процессов обслуживания заявок в модели определяются переменные процесса. Это переменные, значения которых могут быть различны для различных экземпляров процессов. Например, если маршрут прохождения заявки через систему зависит от типа заявки, то вводится переменная процесса тип заявки Type (устанавливается флажок Переменная процесса) (рис. П1.1).

Рис. П1.1. Определение переменной процесса Type

Вспомогательные переменные (или, просто, переменные) – это переменные времени для дуг второго типа и остальные переменные (например, количество заявок в прогоне N – длительность прогона) (рис. П1.2).

Рис. П1.2. Определение вспомогательной переменной N

Изменения переменных процесса и вспомогательных переменных выполняется в окне спецификации событийной вершины (вершины первого типа) в поле «Модификации переменных модели». В этом окне в режиме текстового редактора задаются все операторы изменения переменных в синтаксисе языка C++. Например, на рисунке П.1.3 приведено присвоение значения 1 переменной процесса Type. При выборе в выпадающем списке имени переменной процесса к нему автоматически добавляется current_process.

Рис. П1.3. Присвоение значения переменной процесса Type 

Остановы по ошибкам

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

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

  •  номер фатальной ошибки;
  •  наименование исключительной ситуации;
  •  источник ошибки (объект);
  •  событие, в котором произошел сбой;
  •  номер текущего процесса;
  •  системное время сбоя;
  •  список из 10 последних прошедших событий до сбоя;
  •  список запланированных событий;
  •  рекомендации к устранению ошибки.

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

  1.  планирование события на прошедший момент времени (параметр времени в операторе schedl имеет отрицательное значение);
  2.  резервирование занятого средства (попытка по оператору reserv резервировать занятое средство);
  3.  освобождение свободного средства (попытка по оператору releas освободить незанятое средство);
  4.  освобождение пустой очереди (обращение по оператору head к пустой очереди);
  5.  занятие места в полной очереди (попытка по оператору enque поставить процесс в полную очередь);
  6.  занятие ресурса при недостаточном свободном объёме (попытка по оператору occupy зарезервировать ресурс в большем объёме, чем свободно);
  7.  освобождение ресурса от процесса, который его не занимал (попытка по оператору exempt освободить ресурс от процесса, не занимавшего данный ресурс);
  8.  список событий пуст (обращение по оператору cause к пустому списку событий);
  9.  отмена незапланированного события (по оператору cancel не найдено указанное событие и третий параметр оператора имеет логическое значение «ложь»).

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

  •  номер нефатальной ошибки;
  •  наименование ошибки;
  •  источник ошибки (если таковой имеется);
  •  событие, в котором образовалась ошибка;
  •  номер текущего процесса;
  •  системное время возникновения ошибки.

В системе предусмотрено отслеживание следующих нефатальных ошибок, где номер пункта соответствует номеру ошибки в системе моделирования:

  1.  отмена незапланированного события (по оператору cancel не найдено указанное событие и третий параметр оператора имеет логическое значение «истина»);
    1.  удаление из очереди процесса, которого в ней не находился (по оператору remove в очереди не найден процесс, который необходимо из неё удалить);
    2.  длина списка событий превышает установленный контрольный уровень;
    3.  число динамических объектов (процессов) превышает установленный контрольный уровень.

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


Приложение 2

Варианты заданий

Номер группы и номер в группе

Т поступления заявки

Т обслуживания канала

Длина очереди

Окончание процесса моделиро-вания
(по числу заявок или времени)

Закон распред.

Интервал или
мат. ожидание

Закон распред.

Интервал или
мат. ожидание

1 группа

  1.  

равном.

0... 68

равном.

0... 50

Беск.

По ч.з.

  1.  

экспон.

20

равном.

0...34

3

По Т

  1.  

равном.

0...34

равном.

0...30

5

По ч.з.

  1.  

экспон.

34

равном.

0...60

Беск.

По ч.з.

  1.  

равном.

0...90

экспон.

40

4

По Т

  1.  

экспон.

55

экспон.

50

8

По Т

  1.  

равном.

0...68

экспон.

25

Беск.

По ч.з.

  1.  

экспон.

24

экспон.

20

5

По Т

  1.  

равном.

0...34

равном.

0...30

10

По ч.з.

  1.  

экспон.

40

равном.

0...60

Беск.

По ч.з.

  1.  

равном.

0... 102

равном.

0... 80

6

По Т

  1.  

экспон.

60

равном.

0...110

12

По Т

  1.  

равном.

0...40

экспон.

15

Беск.

По ч.з.

  1.  

экспон.

25

экспон.

22

7

По Т

  1.  

равном.

0...60

экспон.

21

14

По ч.з.

  1.  

экспон.

35

экспон.

20

Беск.

По ч.з.

  1.  

равном.

0...50

равном.

0...45

8

По Т

  1.  

экспон.

40

равном.

0...60

16

По Т

  1.  

равном.

0... 120

равном.

0...40

Беск.

По ч.з.

  1.  

экспон.

50

равном.

0...50

9

По Т

  1.  

экспон.

250

экспон.

280

Беск.

По ч.з.

  1.  

равном.

0...400

экспон.

240

1

По Т

  1.  

экспон.

150

экспон.

180

2

По Т

  1.  

равном.

0...600

экспон.

360

3

По ч.з.

  1.  

экспон.

400

равном.

0...960

Беск.

По ч.з.

     


Номер группы и номер в группе

Т поступления заявки

Т обслуживания канала

Длина очереди

Окончание процесса моделиро-вания
(по числу заявок или времени)

Закон распред.

Интервал или
мат. ожидание

Закон распред.

Интервал или
мат. ожидание

2 группа

  1.  

равном.

0...1000

равном.

0...1080

4

По Т

  1.  

экспон.

250

равном.

0...720

5

По Т

  1.  

равном.

0...400

равном.

0...600

6

По Т

  1.  

экспон.

150

экспон.

240

Беск.

По ч.з.

  1.  

равном.

0...600

экспон.

390

7

По ч.з.

  1.  

экспон.

400

экспон.

460

8

По Т

  1.  

равном.

0...1000

экспон.

520

9

По Т

  1.  

экспон.

15

равном.

49

Беск.

По ч.з.

  1.  

равном.

150

равном.

0...70

10

По Т

  1.  

экспон.

60

равном.

0...112

11

По ч.з.

  1.  

равном.

0...80

равном.

0...70

Беск.

По ч.з.

  1.  

экспон.

45

экспон.

20

12

По Т

  1.  

равном.

0...100

экспон.

40

13

По Т

  1.  

экспон.

50

экспон.

45

14

По Т

  1.  

равном.

0... 120

экспон.

55

Беск.

По ч.з.

  1.  

равном.

0... 68

равном.

0...60

7

По ч.з.

  1.  

экспон.

20

равном.

0...36

3

По Т

  1.  

равном.

0...34

равном.

0...32

5

По Т

  1.  

экспон.

34

равном.

0...64

Беск.

По ч.з.

  1.  

равном.

0...90

экспон.

42

4

По ч.з.

  1.  

экспон.

55

экспон.

52

8

По Т

  1.  

равном.

0...68

экспон.

30

Беск.

По ч.з.

  1.  

экспон.

24

экспон.

22

5

По Т

  1.  

равном.

0...34

равном.

0...32

10

По ч.з.

  1.  

экспон.

40

равном.

0...70

Беск.

По ч.з.


Приложение 3

Блок-схема программной модели

Рис. П3.1.


Блок-схемы событийных секций

Рис. П3.2. Событийная секция Е0


Рис. П3.2. Событийная секция Е1


Рис. П3.2. Событийная секция Е2


Рис. П3.2. Событийная секция Е3


Рис. П3.2. Событийная секция Е4


Приложение 4
Программная модель СМО на языке ESimPL

#include <iostream>

#include "ClassImit.h"

class TMyProcess :public TProcess {

public:

int Pr;    //Приоритет заявки

__fastcall TMyProcess(void);    // конструктор класса процесса

};

__fastcall TMyProcess::TMyProcess(void) :TProcess()

 {

Pr=0;

}

// переменные пользователя

long T0=0;    // Время поступления первой заявки

long Tz=800;    // Время поступления заявки

long Tob=400;    // Время обслуживания в канале

long Tm=120000;    // Время моделирования

typedef TModel<TMyProcess> TMyModel;    // Тип класса модели

TMyModel *  mymodel;    // Переменная класса модели

TMyProcess *  current_process;    // Переменная текущего процесса

int  eventNumber;    // Переменная текущего макрособытия

// Переменные статических объектов

Equip equip1;      // переменная средства 'Ср'

Queue queue1;      // переменная очереди 'Оч'

void E0(void)

{

mymodel = new TMyModel();

mymodel->printHeader();

mymodel->printAndSetupOptions();

equip1=mymodel->Create_equip("Ср");    // регистрация в модели средства 'Ср'

queue1=mymodel->Create_queue("Оч",0,0);    // регистрация в модели очереди 'Оч'

mymodel->schedl(1,T0,mymodel->Main_process);

mymodel->schedl(4,Tm,mymodel->Main_process);

}

void E1(void)

{

current_process=mymodel->NewProcess();    // новый процесс

current_process->Pr=mymodel->irand_(0,1);

mymodel->schedl(2,0,current_process);

mymodel->schedl(1,mymodel->irand(0,Tz),mymodel->Main_process);

}

void E2(void)

{

if(!mymodel->status(equip1))     // условие, что средство свободно

{

mymodel->reserv(equip1,current_process);    // занятие средства 'Ср'

mymodel->schedl(3,mymodel->fnp(Tob),current_process);

}

else{

mymodel->enque(queue1,current_process, current_process->Pr);    // занятие очереди 'Оч'

}

}

void E3(void)

{

mymodel->releas(equip1);    // освобождение средства 'Ср'

mymodel->DeleteProcess(current_process);    // удалить процесс

if(mymodel->length(queue1)>0) // проверка, текущей длины queue1

{

current_process = mymodel->head(queue1);    // взятие первого элемента из очереди 'Оч'

mymodel->reserv(equip1,current_process);    // занятие средства 'Ср'

mymodel->schedl(3,mymodel->fnp(Tob),current_process);

}

}

void E4(void)

{

mymodel->report();

}

int main(int argc, char* argv[])

{

E0();

do {

mymodel->cause(eventNumber, current_process);

switch (eventNumber)

{

case 1: E1(); break;

case 2: E2(); break;

case 3: E3(); break;

case 4: E4(); break;

}

}

while (eventNumber !=4);

delete mymodel;

getch();

}


Приложение 5.
Руководство по использованию
системы моделирования
ESimPL 

  1.  Ввод (создание) событийного графа в исходной форме. Для этого:
    1.  Создается новый файл:

Файл \ Новый

  1.  Определяются объекты модели:

Модель \ Объекты модели

При этом:

  •  вводятся и корректируются с помощью кнопок Добавить, Изменить и Удалить статические объекты и определяются их параметры (рис. П5.1), длина очереди 0 означает бесконечную очередь;

         

Рис. П5.1. Ввод статических объектов

  •  вводятся динамические объекты: активности и процессы
    (рис. П5.2);

         

Рис. П5.2. Ввод активностей и процессов

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

Рис. П5.3. Определение событий

  1.  определяются переменные модели (рис. П5.4);

Модель \ Переменные

Рис. П5.4. Определение переменных модели

Переменная приоритета заявки Pr является переменной процесса.

  1.  Затем с помощью панели инструментов (рис. П5.5) в рабочей области создается событийный граф (рис. П5.6) и задаются параметры всех вершин и дуг. На рисунке П5.7 приведено окно спецификации событийной вершины Енп1, в котором вводится оператор генерации приоритета Pr заявки по равномерному закону в интервале 0, 1. На рисунке П5.8 приведены окна спецификации условных вершин. На рисунке П5.9 приведены окна спецификации дуг второго типа. Имя вершины распараллеливания (в примере А1, А2, А3 и А4) генерируется автоматически, изменить его можно в поле, вызываемом двойным щелчком по соответствующей вершине графа, после коррекции имени нажать клавишу Enter.

 – выделить элемент,

 – событие,

 – логическое условие,

 – начало распараллеливания процесса,

 – конец распараллеливания процесса,

 – определение макрособытия (режим работы с макрособытиями),

 – мгновенное следование,

 – следование с задержкой,

 – мгновенная отмена события,

 – отмена события с задержкой.

Рис. П5.5. Панель инструментов

Рис. П5.6. Исходный событийный граф

  

Рис. П5.7. Определение операторов для событийных вершин (Енп1 для рассматриваемого примера)

1 – многострочное поле ввода операторов события, служит для ввода операторов изменения переменных модели на языке С++. Для ввода имен переменных, операций и функций служат поля 2 и 3.

2 – Поле выбора переменной из списка переменных модели.

3 – Кнопки выбора операций, функций и переменных.

Назначение кнопок:

irand_int – функция mymodel->irand_int(М1,М2) генерации случайного целого числа равномерно распределенного в интервале от М1 до М2;

irand – функция mymodel->irand(М1,М2) генерации случайного числа равномерно распределенного в интервале от М1 до М2;

fnp – функция mymodel->fnp(М) генерации случайного числа распределенного по экспоненциальному закону со средним М;

(0,1) – функция mymodel->uniform() генерации случайного числа распределенного по равномерному закону в интервале от 0 до 1;

модельное время – ввод текущего модельного времени посредством вызова функции mymodel->cur_time();

текущий процесс – ввод текущего процесса current_process;

вывод в отчет – функция mymodel->output(varname, var) вывода в отчет о моделирования значения некоторой переменной var под именем varname;

cancelM, cancelAll – функции удаления событий из списка событий.

Остальные кнопки служат для ввода знаков операций, скобок и знака разделения операторов.

4 – Установка выполнения операторов до (флажок установлен) или после события.

     

Рис. П5.8. Определение параметров условных вершин Р1 и Р2 для рассматриваемого примера

Рис. П5.9. Определение параметров дуг первого типа

         

    

Рис. П5.10. Определение параметров дуг второго типа

  1.  Проверка исходного событийного графа:

Трансляция \ Проверка

Если ошибок нет, то будет выдано сообщение «Ошибок не обнаружено!».

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

  1.  Сохранить исходный событийный граф:

Файл\Сохранить

  1.  Преобразование исходного событийного графа в программно-реализуемую форму (рис. П5.11). Для этого:
    1.  Преобразовать все параллельные участки событийного графа в последовательные, для этого удаляются вершины третьего типа, которые имеют выходы-дуги только первого типа (в рассматриваемом примере А3 и А4), вершины связанные с удаленными вершинами соединяются последовательно;
    2.  Все дуги, входящие в подграф макрособытия из других макрособытий, заменить на дуги второго типа;
    3.  Определить макрособытия. Для этого:
      •  Щелкнуть по кнопке определения макрособытий на панели инструментов;
      •  Выделить вершины событийного графа, входящие в определяемое макрособытие. Порядок нумерации макрособытий (Е0, Е1 и т.д.) определяется порядком их определения.

Рис. П5.11. Событийный граф в программно-реализуемой форме

  •  Удалить определение макрособытия можно в режиме определения макрособытия (кнопка ). При этом необходимо щелкнуть по вершине удаляемого макрособытия (выделятся все вершины макрособытия) и выполнить

Правка \ Удалить макрособытие

  •  Удалить вершину из макрособытия или изменить вхождение вершины в макрособытие можно в режиме определения макрособытия (кнопка ). При этом необходимо дважды щелкнуть по вершине графа и в появившемся окне выбрать Нет или имя другого макрособытия (рис. П5.12).

Рис. П5.12. Окно изменения макрособытия для вершины графа

  1.  Проверка событийного графа в программно-реализуемой форме:

Трансляция \ Проверка ПР

Если ошибок нет, то будет выдано сообщение «Граф программно-реализуемый!».

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

  1.  Сохранить событийный граф в программно-реализуемой форме в новом файле:

Файл\Сохранить как …

  1.  Генерировать код программной модели на языке С++ Builder, соответствующий событийному графу в программно-реализуемой форме. Для этого выполнить:

Трансляция \ Транслировать

Если в графе есть ошибки, программа сообщит об этом, выдав сообщение в дополнительном окне сообщений «Ошибки правил построения».

Если трансляция прошла успешно, то откроется окно «программная модель» (рис. П5.13).

Рису. П.13. Окно программной модели с текстом программы

  1.  Сохранить полученный код в файл. Для этого в окне Программная модель нужно выполнить

Файл \ Сохранить

Далее выполняется контроль и калибровка программной модели, планирование и выполнение компьютерного эксперимента.

  1.  Для того чтобы запустить полученную программу, необходимо:
    1.  Запустить С++ Builder,
    2.  Создать консольное приложение:

Файл \ новый \ другое… \ новый \ мастер консоли \ Ок,

  1.  Сохранить проект:

Файл \ Сохранить проект как …,

  1.  В файле Unit1.cpp заменить содержимое на содержимое сохраненного в ESimPL файла.
    1.  скопировать в папку с проектом файл ClassImit.h.
    2.  Cкомпилировать проект:

Проект \ Компилировать модуль, 

  1.  Запустить программу (кнопка запуск).
  2.  Выполнить прогон в режиме трассировки (рис. П5.14).

Рис. П5.14. Задание параметров прогона

В текстовый файл (в примере 1.txt) будет выведена трассировка и отчет о моделировании (рис. П5.15)

Рис. П5.15. Трассировка и отчет о моделировании

  1.  
    Обработать результаты моделирования:

================================================================================

                            Трассировка модели                                 

Время                             Событие                           Процесс     

1358,43989379559                        2                        5

1361,29768605288                        3                        1

1713,87066255684                        1                        0

1713,87066255684                        2                        1

2165,34928434095                        1                        0

2165,34928434095                        2                        6

2247,92818315725                        3                        2

2297,48222296823                        1                        0

2297,48222296823                        2                        2

2329,51703845941                        3                        3

================================================================================

                           Отчет о моделировании

                            Время: 120000

Средство              Среднее время             Использование         Число

                                занятости                              %                          заявок

Ср                            385,59                                  97,36                         303

Очередь            Время ожидания               Длина очереди           

                   мат. ожида-    среднекв.      мат. ожида-    макси-     всего

                         ние                 откл.                 ние               мум          

Оч                  5727,93         2814,05              14,18               29            294

                      Список ресурсов пуст

  1.  
    Выполнить прогон в режиме с выводом состояний модели – режим 2
    (рис. П5.16).

Рис. П5.16. Задание параметров прогона

В текстовый файл ( в примере 2.txt) будет выведена трассировка состояний системы и отчет о моделировании (рис. П5.17).

Рис. П5.17. Трассировка состояний модели и отчет о моделировании

  1.  
    Обработать результаты моделирования.

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

                              Список событий

Время события                   Номер события                   Номер процесса

1358,43                                      2                                             5

1361,29                                      3                                             1

1713,87                                      1                                             0

120000                                       4                                             0

                              Список средств

Название              Процесс               Запросов              Занятость

Ср                              1                            0                            0

                              Очередь 'Оч'

Длина                           Процессов                         Занятость

3                                         3                                             0

                          Процессы в очереди 'Оч'

Номер процесса                   Приоритет                        Время

2                                                    0                                     268,12

3                                                    0                                     441,88

4                                                    0                                     598,50

Список ресурсов пуст

                              Список событий

Время события                   Номер события                   Номер процесса

1361,29                                      3                                              1

1713,87                                      1                                              0

120000                                       4                                              0

                              Список средств

Название              Процесс               Запросов              Занятость

Ср                               1                              0                           0

                              Очередь 'Оч'

Длина                           Процессов                         Занятость

4                                         4                                           0

                          Процессы в очереди 'Оч'

Номер процесса                   Приоритет                        Время

2                                                    0                                       268,12

3                                                    0                                       441,88

4                                                    0                                       598,50

5                                                    0                                     1358,43

Список ресурсов пуст

Объяснение.

В момент времени 1358,43 происходит событие 2 для процесса 5 – процесс 5 занимает очередь Оч поскольку средство Ср занято процессом 1 и в очереди уже ожидают процессы 2, 3 и 4.

 


 

А также другие работы, которые могут Вас заинтересовать

53259. Рекомендації щодо організації групової форми роботи під час використання проектної технології навчання 72 KB
  Головною ідеєю організації групової роботи є створення умов для активної спільної діяльності учнів у різних навчальних ситуаціях і робота в команді. Особливу увагу необхідно приділити груповим цілям успіху групи який може бути досягнутий лише в результаті самостійної роботи кожного члена групи у постійній взаємодії з іншими під час роботи над темою. Ефективність навчання в групах залежить від того наскільки кожний усвідомить важливість роботи разом та взаємодії через взаємодопомогу це може бути досягнуто шляхом впровадження п’яти базових...
53260. ГРУПИ СЛІВ ЗА ЗНАЧЕННЯМ: СИНОНІМИ, АНТОНІМИ, ОМОНІМИ 120.5 KB
  Мета: поглибити знання школярів про синоніми антоніми омоніми; збагачувати словниковий запас учнів; розвивати уяву активізувати пізнавальну діяльність учнів; виробляти вміння й навички використання синонімів антонімів омонімів у власному мовленні; навчити відрізняти омоніми від багатозначних слів; формувати вміння й необхідність користуватися ними; виховувати бажання вчитися. Картка №1 Виписати з прислів’їв антоніми Умій батьківщину любити а ворога ненавидіти. Картка №3 Дібрати синоніми до виділених слів Відважний боєць великий будинок.
53262. Свято гумору Хочете жити на втіху, частіше «вмирайте» від сміху 86.5 KB
  Сценка Інтернетце сила Василина Кумонько а куди це ви поспішаєте Параска Як куди На базар поторгувати вирішила. А тепер і результат Василина Кумонько а чим це від вас так тхневідвертається Параска Ойта це ж мої нові духи Запах доярки†називаються. Василина – Ходімо кумонько ходімо будемо дивитись кому гарбуза давати а до кого і на побачення ходити. Сценка Дві кумасі Одна модна друга – не дуже у фуфайці.
53263. Свято гумору і здоров’я 50.5 KB
  Ведучий 1. Добрий день шановні учні вчителі та гості нашого свята Ведучий 2. Вітаємо Ведучий 1. Ми раді новій зустрічі і вітаємо всіх вас на святі гумору Ведучий 2.
53264. Розробка заняття гуртка по темі: Птахи прилетіли 75 KB
  Розширити знання дітей про птахів; ознайомити із сезонними явищами в їхньому житті та особливостями гніздування; вчити дітей вдумливо дбайливо уважно ставитися до оточуючого середовища замислюватись над наслідками своїх дій; Розвиваюча. розвивати уміння порівнювати птахів різних екологічних груп та рядів розпізнавати їх у природі; уміння спостерігати і використовувати набуті знання у повсякденному житті; розвивати цікавість до фауни країни; Виховна. виховувати бережливе ставлення до птахів дикої природи та тих які...
53265. Заняття гуртка математики на тему «Михайло Васильович Остроградський – видатний український математик» 244.5 KB
  Спочатку юний Остроградський вчився неохоче. Поступово Остроградський починає вчитися з величезним захопленням і невдовзі вже дивує свого вчителя успіхами. університет Остроградський рік живе у батька.
53266. Душа – се конвалія ніжна… 89 KB
  Додаток 12 Виступи супроводжуються демонстрацією зображень квітки а також виробів в різних техніках конвалії 2. Обговорення компонентів виробу Дітям пропонується розглянути ілюстрації обговорити в групах та відповісти на питання: Із яких частин складається квітка конвалії Матеріали яких кольорів знадобляться нам для виготовлення квітки 2. Самостійна робота виготовлення панно Конвалія Кожній групі необхідно розподілити обов’язки для виконання роботи: Підібрати паперові смужки та фон; Виготовити елементи квітів;...