Диаграммы действий. Визуальное задание алгоритмов

Сложное имитационное моделирование не может существовать без возможности задания алгоритмов, обычно выполняющих определенную обработку данных или вычисления. AnyLogic поддерживает  диаграммы действий - структурированные блок-схемы, позволяющие задавать алгоритмы графически в стиле структурированного программирования. Мы используем широко известное расширение подхода, предложенного в свое время Дейкстра. Суть подхода состоит в том, что алгоритмы разбиваются в подразделы с одной точкой входа. Утверждается, что трех способов объединения программ — упорядочения, повторения и выбора — достаточно для задания алгоритма любой сложности. Такой стиль сводит понимание целого алгоритма к пониманию составляющих его частностей. 

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

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

Диаграмма действий собирается из блоков, расположенных на странице Диаграмма действий панели Палитра:

Диаграмма действий

Добавляя на диаграмму этот блок, вы создаете простейшую диаграмму действий, состоящую из начальной точки (задаваемой собственно блоком "диаграмма действий") и блока "вернуть значение". Задает основные свойства диаграммы - ее тип возвращаемого значения, аргументы, уровень доступа и т.д.

Код

Блок Код позволяет добавлять в вашу диаграмму действий фрагменты кода. С помощью таких блоков вы можете задавать какие-то определенные действия, которые вы хотите выполнить в процессе выполнения алгоритма. 

Решение (If.. Else)

Блок Решение (If.. Else) является простейшим способом ветвления алгоритма. Он обеспечивает выполнение фрагментов кода в соответствии с условием. 

У блока есть две исходящие ветви - true и false. С помощью других блоков диаграммы действий вы можете задать последовательность действий для каждой из этих ветвей. Когда управление дойдет до данного блока, будет приниматься решение о том, по какой ветви блока управление пойдет дальше. Если заданное для блока условие будет выполнено, то будет выбрана ветвь true. В противном случае - ветвь false.

Локальная переменная

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

Цикл While

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

Цикл While выполняется до тех пор, пока заданное для этого цикла условие будет истинно (принимает значение true). Как только условие принимает значение "ложно", цикл завершается и идёт переход к следующему блоку диаграммы действий. 

Цикл While очень похож на Цикл Do While. Единственным отличием является то, что истинность выражения проверяется не в конце каждой итерации, а в начале. Следовательно, Цикл While может не выполниться ни разу (истинность выражения проверяется в начале каждой итерации, и если с самого начала значением выражения будет ложно, то выполнение цикла будет сразу же прекращено). 

Цикл Do While

Цикл Do While является одним из трех блоков диаграммы действий, предназначенных для реализации циклов итераций. Циклы необходимы для того, чтобы повторить некоторые действия несколько раз. 

Цикл Do While выполняется до тех пор, пока заданное для этого цикла условие будет истинно (принимает значение true). Как только условие принимает значение "ложно", цикл завершается и идёт переход к следующему блоку диаграммы действий. 

Цикл Do While очень похож на Цикл While. Единственным отличием является то, что истинность выражения проверяется не в начале каждой итерации, а в конце. Следовательно, первая итерация цикла Do While выполнится обязательно (истинность выражения првоеряется только в конце итерации).

Цикл For

Цикл. Есть две формы цикла:

Итератор по коллекции: итеративно проходит по всем элементам указанной коллекции. На каждой итерации выполняется заданное действие, в котором доступен очередной элемент коллекции.

Цикл со счетчиком: выполняет заданные для этого цикла действия несколько раз, до тех пор, пока не выполнится заданное условие.

Вернуть значение (Return)

Блок Вернуть значение (Return) играет две роли: во-первых, он определяет, какое значение будет возвращать диаграмма действия (если ее тип возвращаемого значения не void), и во-вторых, немедленно возвращает это значение, завершая тем самым процесс.

Выход из цикла (Break)

Блок Выход из цикла управляет выполнением цикла. Он останавливает текущую итерацию цикла (и опционально также выходит из этого цикла, не выполняя не только текущую, но и оставшиеся итерации).


Чтобы нарисовать диаграмму действий, вначале нужно поместить на диаграмму типа агентов элемент  Диаграмма действий. При этом будет создана базовая конструкция, состоящая из начальной точки (собственно блока Диаграмма действий) и блока Вернуть значение (Return). После этого вы можете добавлять согласно задаваемому вами алгоритму другие блоки диаграммы действий в созданную структуру. 

Вызов диаграммы действий

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

мояФункция()

move(15, 35)