AnyLogic
Развернуть
Размер шрифта

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

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

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

  1. Откройте диаграмму Main в графическом редакторе.
  2. Перетащите элемент Функция из палитры Агент на диаграмму Main.
  3. Назовите функцию setTransportBase. Эта функция ничего не возвращает, поэтому оставьте выбранной опцию Действие (не возвращает ничего).
  4. Разверните секцию свойств Тело функции и введите код Java как указано на изображении:

    for (Helicopter h : helicopters)
    {
      h.setLocation(center);
    }
    for (Truck t : trucks)
    {
      t.setLocation(center);
    }

Мы создали функцию, которая разместит транспорт в сервисном центре. Алгоритм этой функции содержит два цикла for.

Первый цикл выполняет итерирование по всем агентам, входящим в популяцию вертолетов. В строке инициализации цикла for используется следующий синтаксис: в круглых скобках вы сначала указываете имя типа агентов, находящихся в популяции (Helicopter). Затем h — имя локальной переменной, которую мы задаем на этом участке кода. Вы можете использовать любое другое допустимое имя (hel, a, item, и так далее). После этого необходимо указать helicopters — имя популяции агентов, итерирование по которой мы будем выполнять.

Поскольку иногда мы хотим совершить не одно, а несколько действий с каждым агентом популяции, необходимо сказать компилятору Java, какие именно выражения Java должны выполняться во время каждой итерации цикла. Для этого мы помещаем необходимые действия в фигурные скобки. В нашем случае это всего лишь одна строка кода: { h.setLocation(center) }

C помощью этого кода мы выполняем следующее: мы задаем местоположение для агента популяции, по которому выполняется итерирование в данный момент, используя ранее заданную локальную переменную h. Местоположение (в нашем случае это сервисный центр center) передается в качестве аргумента функции setLocation().

Второй цикл for выполняет то же самое для популяции trucks.

Теперь, чтобы функция заработала, ее нужно вызвать из кода.

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

setTransportBase();

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

Демо-модель: Maintenance - Phase 2 Открыть страницу модели в AnyLogic Cloud. Там можно запустить модель или скачать ее по ссылке Исходные файлы модели.
Как мы можем улучшить эту статью?