Моделирование в системе PILGRIM
Автор работы: Пользователь скрыл имя, 04 Октября 2010 в 16:12
Описание работы
Имитационное моделирование (от англ. simulation) – это распространенная разновидность аналогового моделирования, реализуемого с помощью набора математических инструментальных средств, специальных имитирующих компьютерных программ и технологий программирования, позволяющих посредством процессов-аналогов провести целенаправленное исследование структуры и функций реального сложного процесса в памяти компьютера в режиме «имитации», выполнить оптимизацию некоторых его параметров
Файлы: 1 файл
Курсовой по имитациям.doc
— 608.00 Кб (Скачать файл)Существуют средства автоматического построения графика изменения потока транзактов, поступающих на вход терминатора.
Если пользователю необходимо иметь инструмент для анализа динамики потока транзактов по какой-то ветви графа, причем "принимающий" узел не является терминатором, то необходимо модель дополнить двумя узлами:
завести дополнительный терминатор и указать его номер в качестве параметра 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.
1.2.3 Команды управления узлами
Команды управления узлами могут использоваться в любом узле по мере необходимости. Каждый узел модели может управлять и любым другим узлом, и самим собой. Команда срабатывает каждый раз в момент входа транзакта в узел, в котором она указана.
Освобождение заблокированного узла – команда 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х).
1.2.4 Параметры транзактов
Транзакты имеют параметры, некоторые из которых доступны пользователю. Обращение к параметру транзакта возможно только в момент его входа в узел модели и производится через системную переменную 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. Изменение
других параметров следует доверить только
ПИЛИГРИМу.
1.2.5 Параметры состояния узлов
Некоторые параметры узлов доступны пользователю для анализа (но не для их изменения). Параметры содержатся в системном массиве 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. |