Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Документ Microsoft Office Word.docx
Скачиваний:
92
Добавлен:
06.02.2016
Размер:
778.84 Кб
Скачать

12. Операторы динамического управления генераторами, процессами и планами. Ветвление по условию и вероятностные мультиветвления: описание условий.

Структурный анализ: управление переходами между слоями модели при многоуровневой декомпозиции

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

Существуют четыре разновидности декомпозиции процессов:

  1. общий случай декомпозиции сложного процесса с помощью узлов типа down;

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

  3. декомпозиция процессов выделения ресурсов с помощью узлов типа rent;

  4. абстрактное объединение группы процессов в один псевдопроцесс с помощью виртуального (мнимого, не существующего в реальности) узла parent без образования нового узла.

Функция имитации перечисления денежной суммы. Имитация перечисления денежной суммы с помощью узла pay выглядит гораздо понятнее, чем это делается с помощью запутанных цепочек send->direct. Однако узел pay подлежит дета­лизации на более низком уровне с помощью все тех же узлов send и direct.

Функция имитации получения ресурса со склада. Имитация получения ресурсов со склада внешне похожа на работу с узлом pay. Это делается с помощью узла rent. Но сам узел rent подлежит декомпозиции на более низком уровне с помощью attach и manage. Функция rent имеет следующий вид: rent1р23,p45,p6)

Функция перехода на нижерасположенный слой. Иногда бывает полезно большую группу узлов специально объединить в один общий узел, который находится на одном из слоев модели. Затем этот узел подвергается декомпозиции на слоях модели, которые расположены ниже. Функция, описывающая такой узел, имеет вид: down(p1p2,p3).

Сигнальные управляющие функции

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

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

Прерывания осуществляются двумя способами:

  • в процессе диалога с моделью во время ее выполнения (клавиша Esc);

  • программно - с помощью функции interrupt, которую можно по какому-либо условию выполнить в любой ветви графа модели. Записывается: interrupt().

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

Функция cheg для перенастройки генератора транзактов ag. Часто бывает необходимо перенастроить генератор транзактов ag(p1,p2,p3,P4,P5,P6,P7,P8)- Номер генератора - это параметр р2. Функция cheg(p2,p3,p4,P5,P6,P7,P8) предназначена для изменения параметров генератора ag, кроме первых двух. Номер перенастраиваемого генератора содержится в параметре р2. Такая перенастройка произойдет за нулевое модельное время. Смысл аргументов р3 – p8 - тот же самый, какой имеют параметры генератора с номером р2

Функции rels и hold для управления клапаном key. Узел типа «клапан» управляется из других узлов. Функции rels(i) и hold(i) предназначены для управления клапаном с номером i из любых других узлов.

После выполнения rels клапан принимает состояние «открыт», если до этого он был закрыт. Соответственно после hold клапан пе­рейдет в состояние «закрыт», если до этого он был в открытом со­стоянии. Обычно клапаны помещают на выходах каких-либо очере­дей.

Функции activ и passiv для управление активностью процесса рrос. Функция activ(i) переводит процесс (узел типа ргос) с номером i в активное состояние, если он был пассивен. При этом возобновляются обслуживание транзакта (т.е. отсчет активного времени) и выполнение модели процесса (программы float ер). Функция passiv(i) переводит процесс (узел типа ргос) в пассивное состояние, если он был активен. При этом транзакт и соответствующее событие исключаются из списка планируемых событий и переводятся в стек прерванных транзактов. Прекращается и выполнение модели процесса (программы float ер). Если процесс уже был пассивен либо узел i был пустым, то никаких действий не осуществляется.

Функция supply для обеспечения начальной мощности ресурса. При работе со складом ресурсов attach в какой-то момент необходимо принудительно либо установить начальное значение, либо его изменить на заданную величину. Это делается с помощью функции supply: supply(p1,p2,p3)

Функция assign для ассигнования на счет денежной суммы. При работе со счетами send в какой-то момент необходимо принудительно либо установить начальное значение остатка денежных средств, либо его изменить на заданную величину. Это делается с помощью функции assign(p1,p2,p3)

Функции geoway и dekart для определения расстояния между точками пространства.

Функция geoway(latA,lonA,latB,lonB) служит для определения расстояния между точками А и В по их географическим координа­там, измеряемым в радианах, причем latA, lonA - широта и долгота точки А;

latB, lonB - координаты точки В.

Функция geoway используется имитатором автоматически внутри узла dynam, однако ее можно вызывать из любой программы пользователя. Функция dekart(xA,yA,xB,yB) аналогична функции geoway. Она служит для определения расстояний на декартовой плоскости в прямоугольных координатах по теореме Пифагора.

Функция change для замены узла обслуживания очереди. Данная сигнальная функция чаще всего используется при моделировании клиринговых процессов. Она имеет вид change (р1р2).

Функция clcode для включения блока операторов языка C++. В блоке описания узлов иногда разработчик модели может помещать свою программу: программные блоки на языке C++, обращения к функциям, написанным на языке C++ или Паскаль, обращения к системным вызовам. Однако это нужно делать при соблюдении определен­ных правил.

Программирование условий прохождения транзакта по графу модели

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

Условие выбора узла с номером к выглядит следующим образом:

где р - случайная величина, равномерно распределенная на отрезке [0,1].

Условие нормирования записывается так:

Сумма_весов = .

Следует учесть, что

Если в модели имеется несколько принадлежащих к одному классу объектов, каждый из которых представлен несколькими узлами, то целесообразно нумеровать узлы, относящиеся к каждому объекту, таким образом, чтобы номера соответствующих узлов разных объектов были функцией от номера объекта данного класса. k1=10m+1; k2=10m+2; k3=10m+3.