Моделирование передвижения людей 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Моделирование передвижения людей



В модели на данный момент люди неподвижно находятся в определенных местах. Чтобы сделать модель более реалистичной, смоделируем передвижение людей по рассматриваемой области.

1) Откройте структурную диаграмму класса Person.

2) Создайте вспомогательные переменные oldx и oldy типа double. Для обеих переменных задайте Начальное значение uniform(300). Создайте переменную tmoved типа double. Задайте Начальное значение -10.

3) Создайте новое Событие. Назовите его moveTimer. Событие должно быть циклическим. Задайте Таймаут uniform(5,10). Задайте Действие при срабатывании таймера:

oldx=person.x;

oldy=person.y;

tmoved=time();

person.x=triangular(0,150,300);

person.y=triangular(0,150,300);

При срабатывании таймера текущее модельное время, возвращаемое функцией time (), запоминается переменной tmoved. Переменные oldx и oldy запоминают текущие координаты агента x и y. Новые координаты генерируются по треугольному закону распределения с минимальным значением, равным 0, средним – 150 и максимальным – 300.

4) Создайте две алгоритмические функции, которые помогут более плавно рисовать движение людей на анимации.

Для этого перетащите соответствующий элемент с палитры Основные на структурную диаграмму. Назовите функцию animationX. Задайте Тело функции:

if (time() > tmoved+0.5)

    return person.x;

return oldx + (person.x-oldx)*(time()-tmoved)/0.5;

Аналогично создайте алгоритмическую функцию animationY:

if (time() > tmoved+0.5)

    return person.y;

return oldy + (person.y-oldy)*(time()-tmoved)/0.5;

5) Откройте свойство Person (рис. 27) и на вкладке Агент укажите:

animationX();

animationY();

Рисунок 27

6) Запустите модель и проследите за перемещением людей с помощью анимации.

В созданной модели число людей, проживающих в изучаемой нами области, является постоянным. На самом деле всегда происходит миграция людей – они переезжают из одной области в другую, и это тоже необходимо учесть в модели. Смоделируем миграцию людей с помощью таймеров.

7) Откройте структурную диаграмму класса Main и создайте новое Событие. Назовите его inMigration. Событие должно быть циклическим.

Задайте Таймаут exponential(20). В среднем в нашу область будут приезжать 20 человек в год (в качестве аргумента функции exponential() задается частота происхождения события). Задайте Действие add_people();.

8) Для моделирования того, как люди уезжают из области, создайте еще одно событие.

Откройте структурную диаграмму класса Person и создайте новое Событие. Назовите его outMigration. Событие должно срабатывать только один раз, поэтому установите флажок Срабатывает один раз. Задайте Таймаут exponential(0.02). Задайте Действие:

get_Main().remove_people(this);

if (isAdopter)

    get_Main().adopters--;

else

    get_Main().potadopters--;

9) Добавьте на анимацию метку, отображающую число жителей области.

Для этого в области просмотра анимации добавьте текстовую метку, отображающую следующий текст:

people.size()+” people”.

10) Запустите модель и изучите ее поведение. Окно просмотра анимации показано на рис. 28.

Рисунок 28

Контрольные вопросы

1. Каким образом описываются агенты в среде AnyLogic?

2. Как происходит взаимодействие агентов со средой в системе AnyLogic?

3. Как происходит взаимодействие агентов с другими агентами в системе AnyLogic?

4. В каких случаях нужно строить агентные модели?

5. Какими средствами строится интерфейс агентов в системе AnyLogic?

Практическая работа №8

Тема: Разработка многоагентной модели в AnyLogic

Цель: - изучить методологию агентного моделирования. Приобрести практические навыки работы c системой AnyLogic при построении агентных моделей.

Вид работы: фронтальный

Время выполнения: 2 часа

Ход работы

Задание 1. Создание различных типов агентов

Под агентом в агентном моделировании понимается элемент модели, который может иметь поведение, память (историю), контакты и т.д. Агенты могут моделировать людей, компании, проекты, автомобили, города, животных, корабли, товары и т.д.

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

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

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

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

Создание модели

Создайте новую модель

1. Щелкните по кнопке Создать на панели управления. Откроется диалоговое окно Новая модель.

2. Задайте имя модели. Введите Maintenance в поле Имя модели.

3. Укажите местоположение, где Вы хотите хранить файлы модели. Используйте кнопку Выбрать..., чтобы выбрать нужную папку, или введите путь к папке в поле Местоположение.

4. В качестве Единиц модельного времени выберите часы.

5. Щелкните Готово.

Будет создана новая модель. AnyLogic автоматически создаст тип агента  Main и простой эксперимент  Simulation.

В центре рабочего пространства Вы увидите графический редактор. Он отображает диаграмму типа агента  Main. Рамка синего цвета показывает границы окна презентации (настройки окна презентации Вы можете найти в свойствах эксперимента Simulation, в секции Окно).

Слева от графического редактора Вы можете видеть панель Проекты, объединенную с панелью Палитра. Панель Проекты обеспечивает доступ к моделям AnyLogic, открытым в данный момент в рабочем пространстве. Дерево элементов модели позволяет легко ориентироваться в ее структуре. Панель Палитра содержит все графические элементы, которые Вы можете добавлять на диаграмму типа агента, просто перетаскивая их в графический редактор. Элементы сгруппированы в отдельные палитры.

Справа Вы можете найти панель Свойства. Панель Свойства отображает и позволяет изменять свойства выбранного в данный момент элемента (группы элементов) модели. Когда Вы выделяете какой-либо элемент, например, в панели Проекты или в графическом редакторе, панель Свойства отображает свойства выделенного элемента.

Вы можете открывать и закрывать конкретные панели с помощью меню Вид.

Теперь начнем разрабатывать нашу модель.

Создание агентов

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

Добавьте сервисный центр

1. В панели Палитра, наведите мышь на вертикальную полосу навигации и выберите палитру Агент.

2. Перетащите элемент Агент  из палитры на диаграмму типа агента  Main. Окно мастера Создание агентов откроется автоматически.

3. Выберите опцию Единственный агент на первом шаге мастера. Нам нужно создать только один сервисный центр, который будет отправлять транспорт к турбинам по запросам на плановое обслуживание или при авариях.

4. Мы не будем использовать данные из базы данных, поэтому оставьте выбранным опцию Создать новый тип агента «с нуля». Задайте Имя нового типа: MC и имя самого агента center в поле ниже. Щелкните Далее, чтобы продолжить.

5. Выберите тип анимации 3D, затем фигуру анимации Ангар из секции Здания и щелкните Далее.

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

7. Мы хотим, чтобы все наши агенты «жили» в непрерывном пространстве, размерами 1000x600, в сети со случайным расположением агентов. Популяции агентов, которые мы позже так же добавим на диаграмму Main, будут жить в той же среде.

8. Щелкните Готово.

После создания нового типа агента MC, Вы можете найти его в дереве модели на том же уровне, что и тип агента Main, а сам агент   center находится в ветке Main > Агенты.

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

1. Сделайте двойной щелчок мышью по типу агента MC в дереве элементов модели, чтобы открыть его диаграмму. Затем передвиньте диаграмму вниз, чтобы видеть элементы, находящиеся над осью X.

2. Здесь Вы найдете объект Масштаб. Выделите его, чтобы открыть его свойства.

3. Установите Масштаб: Задан явно. Затем задайте сам масштаб в поле ниже: 4 пикселя в метре.

Добавьте ветряные турбины

1. Перетащите элемент Агент  из палитры Агент на диаграмму типа агента  Main.

2. В этот раз выберите опцию Популяция агентов. Щелкните Далее на шаге 2 (по умолчанию выбрана нужная нам опция Я хочу создать новый тип агента). На следующем шаге мастера создания агентов введите имя нового типа: Turbine и тогда автоматически появится имя популяции: turbines. Щелкните Далее.

3. Выберите 3D фигуру анимации Ветряная турбина из секции списка объектов Энергетика.

4. Нам не нужно сейчас создавать какие-либо параметры, так что пропустисте шаг 5. На шаге 6, задайте количество агентов, которые мы хотим видеть в этой популяции: 10 агентов.

5. Вы можете щелкнуть Готово уже на шаге 6. Настойки шага 7, Конфигурация создаваемой среды, будут автоматически заполнены, так как мы добавляем популяцию агентов в тип агента  Main, где мы уже задавали среду при создании агента сервисного центра.

6. Откройте диаграмму типа агента Turbine, которого мы сейчас создали, и так же измените Масштаб (1 м = 4 пикс.), как мы делали ранее для агента MC.

Добавьте транспорт

1. Перетащите элемент Агент  из палитры Агент на диаграмму типа агента  Main.

2. Снова выберите опцию Популяция агентов. Щелкните Далее на шаге 2 (Я хочу создать новый тип агента). На следующей странице мастера (шаг 3) введите в поле Имя нового типа: Transport, то же введите в поле Имя популяции: transport. Щелкните Далее.

3. Это пустая популяция, которой не нужна анимация. Мы будем использовать этот тип агента, чтобы задать логику модели.Выберите Нет для типа анимации, пропустите шаг создания параметров, выберите опцию Я хочу добавить агентов позже, во время выполнения модели, а пока оставить популяцию пустой и щелкните Готово.

4. Когда тип агента будет создан, измените его Масштаб на 4 пикселя в одном метре.

Добавьте в модель грузовики и вертолеты

1. Перетащите элемент Агент  из палитры Агент на диаграмму типа агента  Main.

2. Снова выберите опцию Популяция агентов. Щелкните Далее на шаге 2 (Я хочу создать новый тип агента). На следующей странице мастера (шаг 3) введите в поле Имя нового типа: Truck, пусть имя популяции автоматически заполнится как trucks. Щелкните Далее.

3. Выберите фигуру 3D анимации Грузовик из секции Автодорожный транспорт на следующем шаге. Нам не нужно добавлять сейчас параметры в мастере. Всего в популяции будет 5 агентов, а настройки среды уже будут заполнены.

4. После того, как создадите тип агента Truck, выделите Truck в дереве элементов модели и перейдите в панель Свойства. Сначала откройте секцию свойств Движение. Мы считаем, что грузовики в среднем движутся со скоростью 55 миль в час.

5. Откройте секцию свойств Специфические и задайте типу агента Truck наследовать конфигурацию типа агента Transport, выбрав его в параметре Расширяет тип агента: Transport.

6. Теперь тип агента Truck полностью задан. Нам необходимо добавить еще одну популяцию для вертолетов. Вернитесь на Main и снова перетащите элемент Агент  из палитры Агент и выберите Популяция агентов на первом шаге.

7. Введите имя нового типа Helicopter, оставьте имя популяции helicopters. Вы можете найти фигуру 3D анимации Вертолет в секции Военного назначения. Мы хотим использовать 2 вертолета для обслуживания турбин. Эта популяция живет в той же среде, что и все остальные.

8. Helicopter также Расширяет тип агента: Transport. Мы предполагаем, что вертолеты движутся со скоростью, равной 160 миль в час.

9. Мы не будем менять масштаб агентов Truck и Helicopter. Вы можете проверить объект Масштаб этих агентов: его свойства тоже наследуются от типа агента Transport.

Добавьте запросы на обслуживание

1. Перетащите элемент Агент  из палитры Агент на диаграмму типа агента  Main.

2. Выберите опцию Просто создать тип агента. Нам нужен тип агента, чтобы задать логику модели специальными параметрами, которые мы создадим на его диаграмме.

3. Введите имя типа ServiceRequest в соответствующем поле и щелкните Далее. Выберите Нет для типа анимации и перейдите на следующий шаг.

4. На шаге 4 мы создадим в мастере параметр, а также список вариантов.   Список вариантов - это элемент, который позволяет задавать параметры агента, которые имеют ограниченный выбор вариантов. В нашем случае, нам необходимо различать грузовики и вертолеты в общем транспортном парке. Назовите параметр type и выберите его Тип: Список вариантов. Так как в этой модели мы еще не создавали списков вариантов, по умолчанию мастер предложит Вам Создать новый список вариантов: введите имя TransportType. Добавьте варианты в таблицу, по одному в каждой строке: AUTO, AVIA.

5. Щелкните Готово. Список вариантов не имеет отдельного значка, который можно выбрать щелчком в графическом редакторе. Вы можете найти секцию Список вариантов в дереве модели:

6. После того, как Вы щелкните Готово, AnyLogic откроет диаграмму типа агента ServiceRequest. Здесь Вы можете увидеть параметр type, который мы создали в мастере. Добавьте еще один Параметр  из палитры Агент. Назовите его turbine и выберите его Тип из выпадающего списка: Turbine. Теперь тип агента ServiceRequest полностью задан.

Все агенты появятся на диаграмме  Main. Вы можете заметить, что популяции отмечены [..]. Переместите агентов за рамку окна презентации, а центры всех фигур анимации поместите в начало координат.

Вы можете найти настройки среды в секции Пространство и сеть свойств типа агента Main:

Последнее, что нам необходимо сделать на этом шаге разработки модели: задать масштаб типа агента Main:

Запустите модель

1. Постройте свой проект, щелкнув кнопку Построить Модель  на панели управления. Если в модели есть какие-либо ошибки, то построение будет неудачным, и Вы увидите панель Ошибки, в которой будут перечислены все ошибки в модели. Вы можете открыть место ошибки двойным щелчком по ее описанию в списке, чтобы исправить ее. После того, как модель будет успешно построена, Вы можете запустить ее. Запуская эксперимент, Вы автоматически обновляете модель.

2. Выберите эксперимент, который хотите запустить, открыв выпадающий список рядом с кнопкой запуска модели Запуск  на панели управления. Ваш эксперимент называется  Maintenance/Simulation. Потом Вы сможете запускать этот эксперимент, просто щелкая кнопку Запуск , поскольку она будет запускать последний запущенный эксперимент.

3. Запустив модель, Вы увидите окно презентации. На ней отображается презентация, созданная для этого эксперимента. AnyLogic автоматически создает заголовок и кнопку запуска модели.

4. Щелкните кнопку Запустить.

5. Мы только начали разрабатывать модель. В данный момент мы можем видеть сервисный центр, турбины и разные типы транспорта, случайно расположенные в непрерывном пространстве.

Далее давайте зададим местоположение транспорта, грузовиков и вертолетов, в сервисном центре.

Задание 2. Задание транспортной базы

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

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

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

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

Поместите транспорт в сервисный центр

1. Перейдите на диаграмму  Main и откройте палитру Диаграмма действий в панели Палитра.

2. Перетащите элемент Диаграмма действий в графический редактор Main.

3. Назовите диаграмму setTransportBase. Эта диаграмма действий ничего не возвращает, то есть, ее тип - Действие. Далее, добавьте в диаграмму элемент Цикл For . Работая с элементами диаграммы действий, проверяйте, что вставляете элементы в нужное место:

4. Этот цикл for является Итератором по коллекции, где Коллекция - helicopters. Определите Элемент как Helicopter h.

5. Далее, вставьте элемент Код в этот цикл for.

6. Мы хотим, чтобы вертолеты изначально находились в сервисном центре, то есть, имели те же координаты, что и он:

7. Добавьте еще один блок, состоящий из Цикла For  с элементом Код  внутри в эту диаграмму действий и сконфигурируйте его размещать грузовики, так же как и вертолеты, в сервисном центре.

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

Итак, мы создали диаграмму действий под названием setTransportBase, которая представляет функцию, размещающую транспортные средства в сервисном центре. Там мы хотим разместить транспорт при старте модели.

Выделите Main в дереве модели (или сделайте щелчок мышью в пустое место в графическом редакторе этого типа агента) и перейдите в панель Свойства. Разверните секцию свойств Действия агента и задайте запуск нашей функции При запуске модели:

Снова запустите модель. Вы увидите, что теперь турбины распределены случайно, а транспортные средства находятся «в ангаре». Мы зададим движение транспорта и поведение других агентов в следующих шагах нашего учебного пособия.

Задание 3. Настройка логических процессов транспорта

На этом этапе мы зададим начальную конфигурацию типа агента Transport.

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

С помощью диаграмм состояний можно графически задать дискретные поведения объектов любой сложности, куда более разнообразные, чем элементарные состояния свободен/занят (idle/busy), открыт/закрыт (open/closed), исправен/неисправен (up/down) и т.п., предлагаемые большинством блочных инструментов моделирования.

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

Добавьте необходимые переменные

1. Перейдите в панель Проекты и откройте двойным щелчком тип агента Transport. Добавьте два элемента Переменная из палитры Агент.

2. Как Вы помните, мы хотим использовать два вида транспорта: грузовики и вертолеты, для обслуживания турбин. Мы используем переменную type, чтобы различать эти два вида транспорта. Переменная type должна быть типа TransportType, чтобы мы могли использовать варианты AUTO и AVIA.

3. Переменная request является переменной типа ServiceRequest:

Нарисуйте диаграмму состояний транспорта

1. Мы используем элементы палитры Диаграмма состояний, чтобы задать поведение этого типа агента. Перетащите элемент Начало диаграммысостояний  в графический редактор типа агента Transport. Этот элемент задает начало всей диаграммы. Добавьте Состояние , перетащив этот элемент из палитры, Диаграмма состояний, и поместите его в конец стрелки начала диаграммы состояний. Чтобы добавить переход, сделайте двойной щелчок по элементу Переход в палитре. Его иконка поменяется на , это значит, что элемент теперь в режиме рисования. Вы можете рисовать переходы, делая щелчки по состояниям. Удостоверьтесь, что элементы соединяются друг с другом. Когда они соединены, AnyLogic отображает зеленую точку в месте соединения.

2. На этом шаге мы создадим «пустую» диаграмму состояний, которая состоит из четырех состояний и трех переходов разных типов.

3. Состояния называются AtCenter (в сервисном центре), MovingToMC (движение к сервисному центру), Servicing (обслуживание турбины), MovingToTurbine (движение к турбине). Это, собственно, все действия и передвижения грузовиков и вертолетов в нашей модели. Пожалуйста, следуйте структуре диаграммы, представленной на рисунке ниже.

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

Задание 4. Настройка поведения сервисного центра

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

Задайте запросы на транспорт для сервисного центра

Агент может содержать переменные. Переменные обычно используются для моделирования изменяющихся характеристик объекта или для хранения результатов работы модели. AnyLogic поддерживает два типа переменных – простые переменные и коллекции.

Коллекция представляет собой группу объектов, известных как ее элементы. Некоторые коллекции позволяют хранение нескольких одинаковых элементов, некоторые - нет. Некоторые коллекции упорядочены, некоторые - нет. Коллекция используется для задания объекта данных, объединяющего в себе сразу несколько однотипных элементов. С помощью коллекций Вы можете хранить, извлекать и управлять агрегированными данными. Обычно коллекции представляют элементы данных, которые образуют группу, например, очередь (в этом случае элементы представляют собой людей, ожидающих в очереди) или автопарк (элементы задают автомобили), или телефонный справочник (коллекция хранит соответствие имен и телефонных номеров).

1. Откройте диаграмму MC. Добавьте два элемента Коллекция из палитры Агент.

2. Коллекции называются aviaRequests и autoRequests и обе имеют Класс коллекции LinkedList и Тип элементов ServiceRequest.

Задайте логику управления транспортным парком

1. Откройте диаграмму MC. Мы зададим нужные нам процессы с помощью элементов палитры Диаграммы действий.

2. Вначале перетащите элемент Диаграмма действий  из палитры в графический редактор.

3. Назовите диаграмму findTransport. Эта диаграмма действий Возвращает значение, и Типом возвращаемого значения является Transport. Аргументы диаграммы действий задаются ниже в таблице Аргументы: аргумент request Типа ServiceRequest:

4. Далее, вставьте элемент Цикл For в нашу диаграмму действий findTransport. Работая с элементами диаграммы действий, убедитесь, что вставляете элементы в правильное место:

5. Тип этого цикла for: Итератор по коллекции. Укажите поля Элемент и Коллекция как показано на рисунке ниже: необходимость в грузовике или вертолете определяется типом запроса на обслуживание. Вы можете изменить размер элемента для лучшего отображения содержимого.

6. Нам необходимо добавить Решение (If... Else) , которое будет проверять, имеется ли требуемый транспорт в наличии. Условие заявляет, что транспортное средство должно быть в состоянии AtCenter (в сервисном центре) той самой диаграммы состояний, которую мы создали на типе агента  Transport. Обратите внимание, что в графическом редакторе отображается содержимое параметра Метка:

7. Вставьте элемент Вернуть значение в ветку true, выходящую из решения. Пусть этот элемент возвращает t. В качестве последнего шага, выделите элемент диаграммы Вернуть значение, который возвращает значение и для всей диаграммы, и для ветки false и укажите Возвращаемое значение: null.

8. Эта диаграмма действий будет проверять, есть ли в наличии в сервисном центре запрашиваемый вид транспорта: грузовик или вертолет.

В AnyLogic иногда Вам необходимо вводить код в параметрах различных элементов модели. Важно понимать, где именно Вы «находитесь», вписывая код (какому типу агента принадлежит этот элемент), и как получить доступ к другим элементам из этого поля.

Элементы модели, принадлежащие тому же типу агента, доступны просто по именам.

Чтобы получить доступ к полю вложенного объекта, Вы должны поставить точку «.» после имени объекта и затем написать имя этого поля. Например, мы ссылались на функцию getX() сервисного центра  center при создании диаграммы действий на  Main: center.getX(). Если объект является реплицированным, то его имя является именем коллекции объектов, и Вам нужно указать, какой именно объект из этой коллекции Вам нужен.

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

Чтобы получить доступ к контейнеру текущего объекта (того агента, куда вложен текущий), укажите его имя. Обратите внимание на специальный элемент,  Ссылка на агента верхнего уровня, который присутствует на диаграмме каждого типа, чьи агенты живут в среде этого агента верхнего уровня (в нашей модели это тип агента Main). Ссылка называется по имени этого агента верхнего уровня и позволяет обращаться к нему по этому имени, чтобы получить доступ к элементам, находящимся на его диаграмме. Например, чтобы получить доступ к элементу trucks[..], который находится на диаграмме Main, из агента MC, мы пишем main.trucks, находясь на диаграмме MC.

Задание 5. Настройка поведения турбин

На этом этапе мы зададим поведение турбин с помощью диаграммы состояний: когда и как турби



Поделиться:


Последнее изменение этой страницы: 2021-05-12; просмотров: 142; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.213.128 (0.156 с.)