Среда Моделирования Птолемея



Птолемей Птолемей — среда моделирования параллельных гетерогенных систем, работающих в режиме реального времени.

Проект разрабатывают студенты Университета Беркли под руководством профессора Эдварда Ли.

В качестве языка разработки используется Java. Птолемей постоянно развивается.

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

Ptolemy позволяет работать с десятком различных вычислительных моделей, включая, например, дискретно-событийное моделирование и конечные автоматы.

В основе моделирования лежат понятия «Актер» и «Директор», которые можно перевести как «Исполнительное звено» и «Управленческое звено» соответственно.

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

Набор Актеров в сочетании со связями между ними определяют фактическую структуру системы.

В первой статье я хочу обратиться к модели дискретного времени.



Дискретное событие

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

Процесс моделирования включает в себя перемещение токенов между Актерами.

Маркер по своей сути представляет собой некую структуру данных.

Когда токен попадает в Актера, он запускает какое-то действие, которое может изменить внутреннее состояние Актера и генерировать новые события.

Планировщик DE гарантирует, что все события происходят строго синхронно.

Передача токена между Актерами не требует времени.

Важно помнить, что маркеры не могут появляться или исчезать спонтанно.

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

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

Маркеры будут действовать как пакеты.

Для начала откроем окно редактора ( Файл — Создать — Редактор графиков ).

Большую часть окна занимает рабочая зона, на которой будет собираться модель.

Слева от рабочей зоны находится библиотека актеров и режиссеров.

Добавьте его в рабочую область директор DE из раздела Директора .

Вместо английского слова Actor, которое в данном контексте невозможно кратко перевести на русский, в дальнейшем я буду использовать слово «блок».

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

Использование блока Одиночное событие из раздела Актеры/DomainSpecific/DescreteEvents .

Этот блок работает просто: он выдает один токен в определенный момент времени.

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

Далее нам нужно смоделировать задержку передачи пакетов в канале.

Для этого добавим блок Сервер из того же отдела библиотеки.



Среда моделирования Птолемея

Как следует из названия, этот блок моделирует работу сервера с точки зрения системы массового обслуживания.

Если токен поступает на свободный сервер, он выводится с задержкой, равной значению параметра serviceTime, и сервер за это время переходит в состояние «занято».

Если токен приходит, а сервер занят, он помещается в очередь сервера (размер которой определяется параметром емкости).

Очередь работает по принципу FIFO; соответственно, когда сервер освобождается, самый высокий токен в очереди выводится с задержкой serviceTime. Сервер хорош тем, что в отличие, например, от простого блока Delay, он определяет задержку для каждого токена в момент извлечения из очереди (если сервер был свободен, то выборка происходит в момент поступления токена ).

Говоря простым языком, это означает, что при задержке не обязательно учитывать время ожидания в очереди.

Давайте подключим выход SingleEvent к входу сервера.



Среда моделирования Птолемея

Если запустить модель, то при стандартных параметрах обоих блоков произойдет следующее: в момент времени, равный 0.0, на выходе блока SingleEvent появится маркер логического типа со значением true, который попадет на простаивающий сервер и при этом он задерживается на модельное время, равное 1,0. В момент времени 1.0 токен покинет сервер.

Чтобы убедить нас в этом, добавим плоттер ( Актеры/приемники/TimedSinks/TimedPlotter ).

Плоттер принимает маркеры типа Double и отображает их на графике (время-значение).

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

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



Среда моделирования Птолемея

Давайте изменим значение маркера в SingleEvent на ноль, чтобы плоттер мог его отображать.

Для ясности давайте подадим вывод сервера на вход блока.

Конст ( Действующие лица/Источники/Общие источники ), который сгенерирует токен со значением 1 в момент поступления любого токена на вход. Выходные данные Const будут отправлены на плоттер.

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



Среда моделирования Птолемея

В настройках формата отображения выставьте тип точек «точки».

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

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

Введем элемент случайности.

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



Среда моделирования Птолемея

Давайте подадим выходные данные сервера на триггерный вход блока Uniform, а его выходные данные — на вход serviceTime блока Server. Таким образом, токен, проходящий через сервер, вызывает генерацию нового значения задержки, которое применяется к следующему токену.



Среда моделирования Птолемея

Для примерного соответствия моделируемого канала реальному не хватает только потери пакетов при их передаче.

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

Его параметр значений указывает массив сгенерированных значений, а его параметр pmf (массовая функция вероятности) указывает массив вероятностей генерации каждого значения.

Укажем значения 0 и 1 в значениях, а 0,85 и 0,15 в пмф.



Среда моделирования Птолемея

При поступлении токена на триггерный вход блок сгенерирует ноль с вероятностью 85% и единицу с вероятностью 15%.

Давайте подключим триггерный вход к выходу сервера.

(Узлы используются для ответвлений линий — черный ромб на панели инструментов) Эти значения мы используем как признак потери (один — пакет потерян).



Среда моделирования Птолемея

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

Для этого мы воспользуемся элементом Выключатель (глава Актеры/FlowControl/Агрегаторы ).

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

Первая линия, подключенная к выходу Switch, имеет индекс 0, следующая — индекс 1 и так далее.

Подключим выход сервера через узел к входному входу блока Switch. Если теперь подключить к его управляющему входу знак потери пакета, а к выходу только одну линию, то при формировании признака потери (одного на управляющем входе) маркер перенесется в строку с индексом 1, а для линия с индексом 0, являющаяся продолжением нашего канала, будет «потеряна».

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

Моделируемый канал может передавать пакеты со случайной задержкой и терять их с определенной вероятностью.

Ptolemy позволяет создавать новых Актеров, собирая их из существующих.

В разделе библиотеки Утилиты есть блок Составной актер , в который можно поместить любые другие блоки, включая CompositeActor. Разместим модель канала в CompositeActor. Рабочая область CompositeActor открывается командой OpenActor из контекстного меню.

Блок SingleEvent больше не нужен.

Вместо этого давайте добавим один входной и один выходной порт.

Среда моделирования Птолемея

Давайте подключим вход Сервера к входному порту, а выход Коммутатора к выходному порту.

Блок, инкапсулирующий простую модель канала, готов.

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

Для этого в окне настройки параметров блока добавьте параметры lowDelayBorder, highDelayBorder и lossProbability. Кнопка Добавлять вызывает соответствующий диалог, в котором, в частности, можно указать значения по умолчанию для добавляемых параметров.

Имена новых параметров теперь доступны внутри блока.

Заменим конкретные значения именами параметров в блоках Uniform и DiscreteRandomsource.

Среда моделирования Птолемея

Теперь вы можете работать с каналом, как и с любым другим блоком, даже не заглядывая внутрь — все настройки доступны снаружи.

Собрав примитивный исходный код пакета:

Среда моделирования Птолемея

Проверить работу канала можно:

Среда моделирования Птолемея

В настройках DE Director есть важный параметр — stopTime. По умолчанию оно установлено на бесконечность, но для наблюдения такой простой модели значения 50 будет вполне достаточно.

На этом позвольте мне закончить мое знакомство с Птолемеем.

Если тема окажется востребованной, вскоре последует продолжение.

Теги: #моделирование #Чулан #Птолемей

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.