Автор работы: Пользователь скрыл имя, 04 Октября 2010 в 16:12, Не определен
Имитационное моделирование (от англ. simulation) – это распространенная разновидность аналогового моделирования, реализуемого с помощью набора математических инструментальных средств, специальных имитирующих компьютерных программ и технологий программирования, позволяющих посредством процессов-аналогов провести целенаправленное исследование структуры и функций реального сложного процесса в памяти компьютера в режиме «имитации», выполнить оптимизацию некоторых его параметров
Существуют средства автоматического построения графика изменения потока транзактов, поступающих на вход терминатора.
Если пользователю необходимо иметь инструмент для анализа динамики потока транзактов по какой-то ветви графа, причем "принимающий" узел не является терминатором, то необходимо модель дополнить двумя узлами:
завести дополнительный терминатор и указать его номер в качестве параметра df в функции modbeg;
в ветвь вставить узел creat, который в момент прохождения каждого транзакта по ветви будет генерировать один дополнительный, направляемый в дополнительный терминатор.
Под временем пребывания в терминаторе подразумевается время жизни транзакта – с момента его генерации и до момента уничтожения в терминаторе.
График динамики потока транзактов, поступающих на вход терминатора, получается автоматически. Его вид аналогичен графику задержки в очереди. График показывает среднее количество транзактов, попадающих в терминатор в единицу модельного времени.
Узел KEY – клапан на пути транзактов – работает по принципу “шлагбаума”. Когда клапан закрыт, транзакт не может в него войти из предшествующего узла. Если же клапан открыт, то транзакт проходит через него в следующий узел без задержки. Среднее время пребывания такого узла в закрытом состоянии подсчитывается автоматически. Для управления этим клапаном или ключом существуют вспомогательные функции hold и rels.
Среднее время задержки – это среднее время пребывания ключа в закрытом состоянии. Число обслуженных транзактов – это число переключений ключа из закрытого состояния в открытое.
Узел CREAT – управляемый генератор транзактов (мультипликатор) - предназначен для создания нового семейства транзактов. Следует отметить, что все транзакты принадлежат какому-то семейству. Транзакты, выходящие из обычного генератора ag, принадлежат к семейству с номером 0. Узел creat, в отличие от ag, – это управляемый генератор.
Для описания управляемого генератора нужно задать набор параметров (f,a,b,l). Логика функционирования узла такова:
через узел проходит порождающий транзакт, который принадлежит семейству f1, и поступает в следующий узел;
одновременно с этим в узле генерируются a новых транзактов, принадлежащих семейству с номером f2=f, которые будут направлены в узел l. В общем случае l и следующий узел – любые узлы (кроме ag), в частности это может быть один и тот же узел. Номера семейств f1 и f2 в общем случае могут совпадать.
После прохождения порождающего транзакта узел creat получает его координаты, т.е. "перемещается". Семейству f2 могут передаваться все свойства порождающего транзакта.
Параметр b имеет следующие значения: либо copy – для тиражирования параметров порождающего транзакта каждому порожденному (включая время жизни), либо none – для присвоения каждому порожденному транзакту в качестве параметров нулевых значений.
Число обслуженных транзактов – это, на самом деле, число порожденных транзактов вновь образуемых семейств.
Узел DELET (с параметрами (f,a)) – управляемый терминатор транзактов (демультипликатор) - предназначен для уничтожения группы транзактов, принадлежащих одному и тому же семейству f.
Логика функционирования этого узла такова: в узел входит уничтожающий транзакт семейства f1 и находится там до тех пор, пока в него не поступят a транзактов семейства f2=f. После поступления требуемого количества транзактов заданного семейства они мгновенно уничтожаются, а уничтожающий транзакт переходит в следующий узел. Уничтожающим становится транзакт, первым вошедший в пустой узел delet.
Следует отметить, что если в такой узел так и не поступят a транзактов, то уничтожающий транзакт будет все время находиться в нем, блокируя его в смысле поступления других уничтожающих транзактов. В общем случае номера семейств f1 и f2 могут совпадать.
Время существования уничтоженных транзактов фиксируется в узле delet, а сам узел получает координаты каждого уничтожаемого транзакта, т.е. он "перемещается" по координатной сетке. Среднее время задержки в данном случае – это среднее время ожидания всех транзактов, которые нужно уничтожить (или части транзактов, если из состояния ожидания узел delet выводится принудительно – выполнением функции freed); число обслуженных транзактов – это число уничтоженных транзактов.
Суперузел PROC – транзактно-управляемый процесс
Суперфункция
моделирования транзактно-
Интервал требуемого обслуживания транзакта может быть меньше времени пребывания транзакта в этом узле, так как процесс может быть переведен в состояние "пассивен" или "активен" каким-то транзактом из другого узла с помощью функций activ и passiv.
Если процесс пассивен, то обслуживание транзакта приостанавливается, а выполнение функции ep прерывается до тех пор, пока процесс не будет переведен в активное состояние.
Остальные
аргументы имеют следующий
ep
– имя программы, написанной
пользователем, или слово
х – номер исходной точки, в которую устанавливается узел proc перед началом моделирования;
r
– это либо тип функции
m
– математическое ожидание
s – также параметр интервала активности обслуживания, который зависит от значения параметра r. Это либо среднеквадратичное отклонение (r=norm), либо максимальное отклонение от среднего (r=unif), либо значение zero (r=expo, none), либо число слагаемых интервала обслуживания (r=erln, в этом случае s>0.0), либо наиболее вероятное значение интервала времени обслуживания транзактов (r=beta), либо скорость перемещения узла от одной точки пространства к другой (при r=geo или r=dcr);
o
– величина, также зависимая от
типа функции распределения (
Узел
DINAM – очередь к процессу с
динамическими
пространственно-зависимыми приоритетами
Узел dynam предназначен для моделирования обслуживания транзактов в очереди с динамическими пространственно-зависимыми приоритетами. Этот узел моделирует оптимально-управляемую очередь (очередь типа "скорая помощь"), которая находится на входе узла типа proc. Единственный параметр – это номер узла типа proc (он является следующим), который, в свою очередь, обязательно должен использовать параметр r=geo или r=dcr.
Команды управления узлами могут использоваться в любом узле по мере необходимости. Каждый узел модели может управлять и любым другим узлом, и самим собой. Команда срабатывает каждый раз в момент входа транзакта в узел, в котором она указана.
Освобождение заблокированного узла – команда freed
Команда freed(n) предназначена для борьбы с блокировкой. Она срабатывает в соответствии со следующей логикой.
Допустим, что в узле delet с номером n "застрял" транзакт. Текущий транзакт, который проходит через функцию freed, мгновенно генерирует вспомогательный транзакт и направляет его в узел n. Этот вспомогательный транзакт "выталкивает" застрявший, приводит delet в нормальное состояние, а сам погибает. Факт посещения вспомогательным транзактом фиксируется в delet и отражается на статистических результатах, но время его жизни равно нулю. Застрявший транзакт будет направлен в следующий за delet узел.
Перенастройка постоянного генератора ag – команда cheg
Команда cheg(n,p,r,m,s,n) предназначена для настройки генератора с номером n на новые значения параметров. Такая перенастройка произойдет "мгновенно" – в смысле модельного времени. Все параметры этой команды имеют то же назначение, что и параметры настройки генератора ag (символическое имя генератора в команде не указывается).
Управление клапаном key – команды hold и rels
Команды hold(n) и rels(n) предназначены для управления клапаном с номером n из любых других узлов. После выполнения hold клапан принимает состояние "закрыт", если до этого он был открыт. Соответственно, после rels клапан перейдет в состояние "открыт", если до этого он был в запертом состоянии.
Привязка транзакта или узла к точке пространства – команды sewt и sewk
Команда sewt(x) помещает текущий транзакт в точку пространства, имеющую номер х (т.е. приписывает ему координаты этой точки путем занесения значения х в параметр транзакта t->tх). Команда sewk(x,i) помещает узел с номером i в точку пространства, имеющую номер х (т.е. приписывает узлу координаты этой точки, записывая значение х в параметр узла k->kх).
Транзакты имеют параметры, некоторые из которых доступны пользователю. Обращение к параметру транзакта возможно только в момент его входа в узел модели и производится через системную переменную t, являющуюся именем входящего в узел транзакта.
Основными параметрами транзакта являются следующие:
t->iu0, t->iu1, t->iu2, t->iu3 – произвольные целочисленные параметры пользователя (используются для хранения информации о состоянии транзакта);
t->ru0, t->ru1, t->ru2, t->ru3 – произвольные параметры пользователя, имеющие вид переменной с плавающей точкой;
t->ga
– признак обслуживания
t->pr – приоритет транзакта;
t->ft – номер семейства, к которому принадлежит транзакт;
t->tx – этот параметр запоминает номер (индекс) точки пространства. Номер точки позволяет определить ее координаты в массивах lat и lon.
Изменять,
не опасаясь непредсказуемого поведения
модели, можно только t->iu0,
t->iu1, t->iu2, t->iu3, t->ru0, t->ru1, t->ru2, t->ru3,
t->ga и, иногда, t->pr и t->ft. Изменение
других параметров следует доверить только
ПИЛИГРИМу.
Некоторые параметры узлов доступны пользователю для анализа (но не для их изменения). Параметры содержатся в системном массиве addr. Доступ к параметру осуществляется с помощью выражения вида:
addr [<n>] - > <параметр>, где <n> – номер узла в модели.
Имена и назначения параметров узлов приведены в таблице 1.
Таблица 1 – имена и значения параметров
Имя | Назначение параметра |
nc | Число каналов в узле |
na | Число транзактов, прошедших через узел на данный момент модельного времени |
tn | Число транзактов, находящихся в узле на данный момент модельного времени |
ts | Среднее время обслуживания, подсчитанное на данный момент. |
op | Признак состояния узла типа key. Это целочисленная переменная, принимающая значение глобальной константы true, если клапан открыт, или false, если он закрыт |
se | Признак состояния узла типа delet. Это целочисленная переменная, принимающая значение глобальной константы nil, если в узле нет уничтожающего транзакта |
kx | Номер (индекс) точки, в которой находится узел типа creat, delet или proc. По номеру точки определяются ее координаты в массивах lat и lon. |
saldo, defic | Остаток и дефицит средств на бухгалтерском счете, связанном с узлом типа send. |
rsal, rdef | Остаток и дефицит ресурса на складе, связанном с узлом типа attach. |