Ю. Карпов - Иммитационное моделирование систем с AnyLogic 5 (1124147), страница 28
Текст из файла (страница 28)
Массивы В модели на Аду[.оя[с переменные вводятся с помошью кнопки [О~ панели инструментов, Введенные таким образом переменные могут представлять не только простую скалярную переменную, ее можно определить как матрицу или многомерный массив. Для прямоугольных матриц и олномерных массивов Апу[.од[с предоставляет улобные средства их определения и работы с ними как с едиными объектами. В список операций над матрицами в Апу].оя]с входят все основные операции линейной алгебры, для выполнения таких операций нет необходимости использования каких-либо управляюших конструкций Зача, например циклов.
Операции нал многомерными массивами, определенными как переменные Апу]оя]с матричного типа, выполняются с целым объектом, например скалярное умножение скалярной величины с на матрицу л определится как с*а, сложение двух матриц л и в запишется как я+в и т. п. В Апу[ оп[с возможно также использование массивов языка 3ача. Мпссив в,7о[п — это набор объектов одного и того же (произвольного) типа, на которые ссылаются по общему имени, а различают отдельные элементы массива по номеру (индексу).
Индексация массивов начинается с нуля, поэтому последний элемент массива из н элементов будет иметь индекс п-т, а первый — индекс в. Одномерный воссев — это просто список однотипных объектов. Построение массива включает два этапа. Во-первых, нужно объявить переменную массива с указанием типа элементов массива. Рбший формат объявления массива: <тип> <имя переменкой> [ ]; Здесь <енп> объявляет базовый тип массива (т. е. тип объектов. которые данный массив будут составлять), <ммя переменной> — имя переменной этого массива, например: Зпс соппс[ ]; После такого объявления массива с именем поппе еше не сушествует, порождается только массив "без значения".
Чтобы связать имя соппс с фактическим массивом целых, нужно выполнить второй этап — выделение памяти для массива. Для этого используется операция пее, для которой нужно указать имя и число элементов массива: соипс = пен [<размер>]ч Часть !!. Средства Ялу[.од]с для имитационного моделирования систем Эта операция выделит лля массива память и инициализирует все элементы массива нулями. Например, после операции соппт = петт [10); можно обращаться к элементам массива поппе по номерам, от соппс[0) до соппс[э), например, инициализировать их: соппе[0) = 5; соппе[1) = 71 Аналогично тому, как это делается при объявлении переменных простых типов, возможна комбинацйя объявлений переменной массива с выделением массиву памяти. Например, объявление массива из десяти целых с выделением ему памяти: 1пе соппе[) = пеи 1пе [101; Альтернативно, для удобства, объявление массива может быть сделано и так: 1пс[ ) сорос; и объявление с порождением массива так: тпп[) сорос = пои ъпс [10]; 7.2.5.
Многомерные массивы В )ата многомерные массивы — это массивы массивов. Для обьявления многомерной переменной нужно определить каждый дополнительный индекс, используя свой набор квадратных скобок. Например, следующий оператор обьяаляет переменную пе'дььоте как двумерный массив 4н5 целых: тпс пездЬЬоте[1 [] = пеи 1пс [4)[51," Как и в одномерном массиве, наименьшее значение индексов здесь О, максимальное значение у первого индекса 3, у второго 4, Альтернативная форма объявления многомерного массива допустима и здесь: !се[1[) пегяЬЬота = пеи ъпе [4] [51; 7.2.6. Динамические массивы Во многих языках программирования (и в том числе, в )ата) вы должны зафиксировать размеры всех массивов в момент компиляции.
Во многих случаях это неудобно. Часто в моделях желательно создавать и уничтожать экземпляры некоторых классов динамически, во время работы модели. Например, это относится к реплицированным объектам Апу[.оя]с. Динамическое создание и уничтожение объектов является одной из главных концепций в многоагентном моделировании, которое мы рассмотрим в главе 15. Глава 7.
Сюдеиил о лзывв,йю, необходимые для резработи моделей не Апу1 к 159 В языке 3ауа существует тип весне -, который позволяет создавать дала иачвские массивы объектов любой природы, т. е. массины, число элементон в которых может меняться при выполнении программы. Фактически, экземпляры вектора являются контейнерами, в нем могут храниться объекты любого типа. Поэтому тип объектов, которые хранятся в векторе, является наиболее общим, прелполагается, что все хранящиеся в векторе объекты имеют тип ОЬдесе. Название вессс является несколько дезориентирующим, поскольку в Вача векторы не имеют ничего общего с векторами, используемыми в математике и физике. Математические вектора — это упорядоченные массивы одного и того же типа.
Вектора в Лва — это упорядоченные списки объектов произвольных типов. Создать новый вектор можно просто, даже не задавая его начальную ем- кость: чессот е = пеи чеснок ы; После такой инициализации вектор еще не солержит элементов. Тула их следует добавить явно. Мы рассмотрим работу с векторами далее на примере манипулирования реплипиронанными (размноженными) объектами. Именно векторы используются для хранения реплицированных экземпляров объектов в Апу1лрс.
У.З. Функции Как и но всех языках программирования, в За~а можно разбить сложную задачу выполнения вычислений на более простые подзадачи, называемые традиционно Функциями. В Хауа, как и в других объектно-ориентированных языках, функции называются метадалас Мы лалее будем использонать как то, так и другое название. Как будет видно далее, классы — основные структурные блоки объектно-ориентированного программирования — состоят из двух нилов компонентов, из переменных и методов. 7.3.1. Вызов методов клвссов Для вызова метода указывается имя метода, после которого следуют скобки.
Если метод имеет параметры, они перечисляются в скобках через запятую. Из любого места модели Апу) ой|с можно обращаться к методам, перечисленным в классе гесс в справочнике классов АпуЕорс. Примерами методов этого класса янляются: П математические функции: еч с, еып сое, сел, ехр, 1оя, ~сева и др.; гэ функции для работы с матрицами: еаа,, 1, ае сее, с еоероее и др.; П функции-генераторы случайных чисел: евно*, еирооеасуе1 и др. Часть И. Средства дпу(.од<сдав имитационного моделирования систем В этот класс также вхолят системные функции дастмае, дасоисат, де< лоос, Ьавсаселссь те и т.
и. Например, выполнив оператор х=дастыа<< в любом месте модели, мы по- лучим в переменной и вещественное значение текущего времени. 7.3.2. Функции: методы класса, определенные пользователем При создании нового класса пользователь может лобавить свои методы. В Апу(.оя(с есть несколькб способов определения функций как составных частей активных объектов. В каждый активный объект можно добавить новые функции с помощью иконок: табличную функцию ([~~~), арифметическую функцию О„1) и алгоритмическую функцию (Я). Кроме того, в каждом объекте Апу(.од<с, который компилируется в класс (кроме активных объектов это порты, анимация, стейтчарты и т.
и.), можно также определить функции в общей форме. Рассмотрим все их по порялку. Табличная функция Этот вид функции используется в случаях, когда зависимость от аргумента залается с помощью конечной таблицы соответствия а а ив е арсуиа а, аиа и суииц >. Апу(.оя(с предоставляет удобные средства для задания этих пар, а также для определения типа интерполяции функции (способа определения функции в промежутках между заданными значениями аргумента) и экстраполяции их (закона определение значений функции вне интервала определения аргументов).
Функция вводится с помощью кнопки (Щ панели инструментов при выделенном активном объекте или выбором команды Новая табличная функция в контекстном меню активного объекта. йлатеиатическая функция Математическая функция в активном объекте используется в случаях, когда зависимость от аргументов задается одним арифметическим выражением, включающим обычные математические функции, а также переменные, параметры и функции, определенные пользователем в данном активном объекте.
Здесь нельзя использовать условное выражение. В А<ту(.оя(с математическая функция вводится с помощью кнопки ~Х) панели инструментов при вылеленном активном объекте либо выбором команды Новая математическая функция в контекстном меню активного объекта. Использование кнопки Мастер позволяет при наборе кола определения функции в поле Тело функции автоматически включать уже определенные функции и параметры, а также стандартные функции. Глава 7 Сведения о языке (ауа, неойкдимые для разработки моделей на длу(ядр (4( Алгоритмическая функция Этот вид функции используется в случаях, когда зависимость от аргументов нельзя выразить одним простым арифметическим выражением, а требуется использовать более сложные конструкции.