Часто задаваемые вопросы -> Что нужно сделать, чтобы...

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

Если вы столкнулись с какой-то проблемой или ошибкой, и не нашли ее решения ни в Справке AnyLogic, ни в разделе Часто задаваемые вопросы, то вы можете обратиться за помощью к Службе технической поддержки (воспользовавшись командой Обратиться за помощью...).



Общие вопросы

Презентация

Библиотека Моделирования Процессов

Системная динамика

Агенты

Диаграммы и наборы данных

Диаграммы состояний

Связь с базами данных

Производительность

Пешеходная библиотека

Библиотека Дорожного движения

Моделирование складов

Пользовательские библиотеки


Общие вопросы

Как изменить размер окна презентации запущенной модели?

По умолчанию размер окна презентации равен 1000*600 пикселей. Его можно изменить с помощью специальонго элемента - рамки, отборажающейся в графическом редакторе.


Как я могу задать значения параметров модели со страницы эксперимента перед запуском самой модели?

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

Чтобы добавить на презентацию эксперимента элементы управления, меняющие значения параметров модели

Давайте рассмотрим этот подход с помощью нашего примера модели "Wandering Elephants". В этой модели есть параметр NumberOfElephants, задающий количество слонов. Мы же хотим разрешить пользователю интерактивно задавать количество слонов перед запуском модели со страницы презентации эксперимента.

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

  1. Откройте диаграмму эксперимента Simulation.
  2. Добавьте переменную elephants типа int. Задайте Начальное значение переменной: 50.
    Поскольку эта переменная создается исключительно со вспомогательной целью, вы можете поместить ее за пределами рамки презентации эксперимента.
  3. Добавьте бегунок, с помощью которого вы будете изменять значение параметра. Введите elephants в поле бегунка Значение по умолчанию. Введите следующее Действие:
    elephants = (int)value;
  4. В панели свойств эксперимента, введите elephants в качестве начального значения параметра NumberOfElephants.
  5. Запустите эксперимент и измените значение параметра с помощью бегунка. Вы увидите, что модель будет проинициализирована заданным вами с помощью бегунка значением параметра.

Как я могу получить текущее значение модельного времени?

Текущее значение модельного (логического) времени можно получить, вызвав функцию time().


Моя модель останавливается по прошествии 100 единиц модельного времени. Могу ли я установить другое время останова?

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

По умолчанию модель будет работать 100 единиц модельного времени и затем остановится.


Как я могу найти элемент на диаграмме презентации?

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


Как узнать координаты положения мыши в графическом редакторе?

Координаты текущего расположения мыши над областью графического редактора отображаются в строке состояния AnyLogic:



Почему некоторые элементы палитры отображаются значком ? Что он означает?

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

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

Чтобы перейти в режим рисования, сделайте двойной щелчок мышью по элементу в палитре. Значок элемента при этом должен смениться на этот:


Теперь вы можете рисовать элемент в графическом редакторе. Стоит отметить, что есть две группы элементов, которые рисуются разными способами:


Как можно создать агентов динамически?

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

add_agentName(parameter1, parameter2, ...);

Каким способом я могу сослаться на агента верхнего уровня?

Предположим, что у вас есть тип агента Main, который выполняет роль среды для двух других агентов: agentA и agentB.

На диаграмме любого из этих агентов вы можете найти элемент Ссылка на агента верхнего уровня, который находится выше оси X. Поскольку агент верхнего уровня здесь - это Main, то и ссылка называется main. Поэтому вы можете ссылаться из одного агента на другой следующим образом: main.agentA (этот метод будет ссылаться на agentA из кода, заданного в агенте agentB).


Можно ли изменять значения Динамической переменной извне? Как?

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


Как запустить модель циклически?

Нужно просто добавить в модель событие, выполняющее следующее действие:

new Thread() {
public void run() {
    // останов модели
    getExperiment().stop();
    try {
        // задержка
        this.sleep(1000);
    } catch(Exception e) {};
    // повторный запуск
    getExperiment().run();
    getExperimentHost().setPresentable( getEngine().getRoot() );
}
}.start();


Как я могу удалить агентов популяции? Я хочу удалить всех агентов из моей модели.

Попробуйте вызвать следующий код (здесь мы полагаем, что имя вашей популяции people, замените его везде на имя вашей популяции):

while( people.size() > 0 ) {
remove_people( people(0) );
}

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

Чтобы передать аргументы командной строки автономному приложению, вы должны просто указать список значений аргументов (в случае Windows вы просто пишете его в .bat файле приложения, после перечисления всех требуемых JAR файлов), например:

25 107.8 "useful text"

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

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

Этот метод возвращает массив аргументов командной строки, переданных автономному приложению. Чтобы получить, скажем, первое значение из массива, нужно вызвать getCommandLineArguments()[0], чтобы второе - getCommandLineArguments()[1], и т.д.

Пожалуйста, обратите внимание, что этот метод возвращает строковые значения типа String. Вы можете получить числа из строк String с помощью методов: Integer.parseInt(), Double.parseDouble()

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


Есть ли возможность распространения моделей AnyLogic среди пользователей так, чтобы они могли запускать эти модели без необходимости приобретения и установки AnyLogic?

AnyLogic предоставляет уникальную возможность экспорта ваших имитационных моделей:


Как можно изменить порядок отображения параметров в панели свойств моего вложенного агента?

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

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



 Можно ли добавить звуковые эффекты в мою модель?

Да, для этого вы можете воспользоваться сторонними Java библиотеками. Модель ниже демонстрирует как это можно сделать (необходимо правильно добавить внешний Jar файл). Звук воспроизводится, когда пользователь нажимает на кнопку в запущенной модели. Обратите внимание на то, что Java код, который воспроизводит звук, выполняется в отдельном Java потоке. Это позволяет одновременно выполнять моделирование и воспроизводить звук.

Демо модель: Model with Sound Effect


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

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

run();
getExperimentHost().setPresentable( getEngine().getRoot() );


Поддерживает ли AnyLogic импорт моделей из других инструментов моделирования?

Да, на данный момент AnyLogic поддерживает импорт моделей Vensim®. Вы можете просто открыть модель Vensim® (пункт меню Файл > Импорт > Из Vensim), и она будет автоматически преобразована (сконвертирована) в модель AnyLogic, аналогичную исходной модели Vensim®. После этого вы сможете продолжить работу над этой моделью уже в AnyLogic.


Можно ли открыть стороннее приложение (например, Блокнот) из модели AnyLogic? Как?

Да, открыть стороннее приложение можно. Следующий код, например, открывает текстовый файл file.txt в программе Windows Блокнот:

try {
String link = "file.txt";
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("c:\\Windows\\notepad.exe" + " " + link);
}

catch (java.io.IOException e) {
e.printStackTrace();
}


Как сделать так, чтобы при нажатии кнопки в окне Simulation отображался не агент верхнего уровня, а презентация другого типа агента?

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

getExperimentHost().setPresentable(((Main)getEngine().getRoot()).myClass);

Здесь агент верхнего уровня называется Main. В этого агента вложен тип агента myClass. По нажатию на кнопку будет показана презентация именно этого типа агента.


Презентация

Как я могу добавить фигуру на презентацию во время выполнения модели?

Вы можете динамически добавлять фигуры и элементы управления на презентации ваших типов агента прямо во время выполнения модели. Например, чтобы добавить фигуру myShape, нужно вызвать метод presentation.add(myShape).


Фигура вращается вокруг своего верхнего левого угла, но мне нужно, чтобы она вращалась вокруг своего центра. Как я могу сделать это?

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

Вначале вы должны будете добавить фигуру в новую группу (сделав щелчок правой кнопкой мыши по фигуре и выбрав Группировка > Создать группу из контекстного меню). Тем самым, вы создадите группу в центре фигуры и добавите фигуру в эту группу.

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

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


Можно ли во время выполнения модели изменить порядок расположения фигур при их наложении?

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


Как можно узнать координаты щелчка по презентации во время выполнения модели?

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

Это реализовано следующим образом: на диаграмме нарисован прямоугольник. Когда пользователь щелкает мышью по прямоугольнику, вызывается код, заданный в его свойстве Действие по щелчку. Координаты мыши доступны здесь как переменные clickx и clicky.

Демо модель: Getting Mouse Coordinates


Каким образом можно добавить активную URL-ссылку на презентацию модели?

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

getExperimentHost().openWebSite("www.anylogic.com");

При нажатии на эту кнопку будет запущен выбранный вами по умолчанию браузер, который откроет содержимое указанного веб сайта (в данном случае - сайта Компании AnyLogic).


Есть ли возможность добавления на презентацию полосы прокрутки?

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

Демо модель: Scrollable Presentation

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

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


Библиотека Моделирования Процессов

Как можно подсчитать количество агентов, прошедших через объект Библиотеки Моделирования Процессов?

Используйте для этого метод count() соответствующего выходного порта объекта. Например, если у вас есть объект source, и вы хотите узнать, сколько агентов покинуло его порт out, вам нужно будет написать source.out.count()

Чтобы узнать имя порта, обратитесь, пожалуйста, к Справочному руководству по Библиотеке Моделирования Процессов, откройте статью, описывающую этот конкретный объект, и посмотрите на приведенную в самом верху картинку значка объекта - там будут написаны и имена портов.


Как можно измерить время пребывания агента в (под)системе?

Библиотека Моделирования Процессов содержит два объекта (TimeMeasureStart и TimeMeasureEnd), позволяющих измерять время, проводимое агентами между двумя заданными точками в диаграмме процесса. С помощью этих объектов вы можете легко измерять время пребывания агента в (под)системе.

Демо модель: Measuring Length of Stay



Могу ли я изменить фигуру агента на время его пребывания в каком-то определенном объекте? Как?

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

В модели имеется тип агента Box. На диаграмму этого типа агента добавлены две разные фигуры анимации, которые расположены в одном месте, точно на пересечении осей координат: boxOpened и boxClosed.

По умолчанию для фигуры boxClosed видимость включена, а для фигуры boxOpened мы установим Видимость: нет.

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

Здесь мы выключаем видимость фигуры boxClosed: agent.closedBox.setVisible(false);
И следом делаем видимой фигуру openedBox: agent.openedBox.setVisible(true);

Чтобы иметь возможность доступа к фигурам анимации (и любым другим свойствам) типа агента Box в параметрах объектов диаграммы процесса, мы указываем тип агента Box как Нового агента, которого создает объект source.

Демо модель: Changing Agent Shape


Как получить доступ к агентам, находящимся в данный момент в объекте библиотеки?

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


Можно ли соединять порты объектов Библиотеки Моделирования Процессов динамически?

Вы можете динамически соединять/отсоединять библиотеки AnyLogic (к примеру, блоки Библиотеки Моделирования Процессов) с помощью функций портов блока: connect()/disconnect() или map()/unmap().

Эта демо модель показывает пример динамического соединения объектов Библиотеки Моделирования Процессов. Она содержит два отдельных участка диаграммы процесса, которые вы можете соединить щелчком по расположенной между ними кнопке. Чтобы понять реализацию подхода, вы можете посмотреть на поле Действие этой кнопки.

Демо модель: Connecting Library Objects Dynamically

Обратите внимание на то, что вы можете соединить порт выхода объекта А с портом входа объекта В, только если в объекте А до этого не было агента.

Вы также не сможете отсоединить порты, если агент(ы) уже прошел через это соединение

Можно ли изменить значение параметра объекта диаграммы процесса во время выполнения модели? Как?

Да, вы можете изменять значения всех параметров.

Чтобы изменить значение параметра, вам нужно вызвать автоматически создаваемый метод set_кодовоеИмяПараметра(), передавая ему в качестве аргумента значение, которое вы хотите присвоить параметру.

Например, чтобы изменить Вместимость объекта queue (задать значение 50), вы должны вызвать метод queue.set_capacity(50);

Вы можете спросить - а как можно узнать кодовое имя параметра, которое используется в имени метода? Так вот, программные или кодовые имена параметров библиотеки вы можете найти в Справочном руководстве по Библиотеке Моделирования Процессов. Например, чтобы найти программное имя для параметра Интенсивность прибытия объекта Source, откройте статью документации по объекту Source и найдите соответствующий раздел Интенсивность прибытия. В строке Синтаксис вы найдете нужное вам кодовое имя этого параметра:


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


Можно ли создать конвейер с динамически меняющейся скоростью?

Да, с помощью метода set_speed() объекта Conveyor (см. пример модели).

Демо модель: Conveyor with Dynamic Speed


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

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

Демо модель: Releasing Resource on Timeout

Пожалуйста, посмотрите на приведенную демо модель. Запрашиваемая вами функциональность может быть реализована в AnyLogic, но она требует использования дополнительных объектов. Мы создадим вспомогательного "родственного" агента для каждого поступающего агента, который будет захватывать ресурс, ждать ровно 60 секунд и затем освобождать его. Если исходный агент захочет освободить ресурс раньше, то он сообщит своему "родственному" агенту, чтобы он прекратил процесс и немедленно освободил ресурс. Идентификация двух "родственных" агентов осуществляется путем сравнения уникального идентификатора, хранящегося в поле id. Посмотрите на код в поле Действие при выходе объекта delayArbitrary, чтобы понять, как извлекается "родственный" агент.

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


Можно ли узнать в объекте Unbatch количество агентов, составляющих поступившего агента-партию?

Да, количество агентов, составляющих партию, доступно в параметре Действие при входе объекта Unbatch как batch.contents.size().


Системная динамика

Как получить доступ к наборам данных, автоматически создаваемым для динамических переменных?

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



Тип

Имя

Описание

Для скалярных переменных
DataSet _ds_variable Набор данных, созданный для скалярной переменной variable

Для массивов
DataSet[] _ds_array Плоский массив наборов данных, каждый из которых хранит значения определенного элемента массива array

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


Агенты

Какое количество агентов можно эффективно моделировать в AnyLogic?

AnyLogic может эффективно моделировать до нескольких миллионов агентов. Точное количество зависит от используемого вами программного и аппаратного обеспечения.

Чтобы оценить быстродействие агентной модели на вашем компьютере, пожалуйста, запустите модель Bass Diffusion Agent Based - она является неплохим тестом, позволяя оценить, как быстро выполняется модель с 1 миллионом агентов.

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

На самом деле, вряд ли имеет смысл задавать вопрос именно таким образом - куда более интересен ответ на вопрос “А сколько агентов мне действительно нужно моделировать?” Например, если вам нужно промоделировать население страны (примерно 100,000,000 человек), то нужно ли создавать 100 миллионов агентов? Ответ будет следующий: почти всегда - нет! Есть несколько техник, позволяющих сократить затраты на вычисления и при том гарантировать корректные результаты. Например, если все регионы страны имеют одни и те же условия, то вы можете моделировать только один регион численностью, скажем 5,000,000 человек, а затем экстраполировать полученные результаты на все население страны.


Можно ли создавать агентов динамически? Как?

Да, для этого нужно использовать метод add_имяАгента(), где имяАгента - имя популяции агентов (находящейся обычно на диаграмме типа агента Main), который отображается на диаграмме значком . Если вы хотите создавать агентов только динамически, начав моделирование с нулевой численности популяции и постепенно добавляя агентов, то в свойстве Начальное количество агентов популяции нужно будет написать 0.

Посмотрите на приведенный пример модели. В этой модели агенты создаются событием newAgent. В действии этого события вызывается метод add_people(), создающий новых агентов. Этот метод назван так потому, что имя популяции агентов в этой модели - people.

Демо модель: Event Generating New Agents


Можно ли сделать так, чтобы агент двигался вдоль заданного пути?

Да, для этого нужно использовать метод агента moveTo(x, y, path), который инициирует движение к точке с координатами (x,y) вдоль заданного пути (path).

Демо модель: Agent Moving Along Path


Можно ли переместить агента из одной среды в другую?

Прямое перемещение агентов из одной среды в другую не поддерживается в AnyLogic 6.

Но есть два "обходных" решения.

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

Если по каким-то причинам требуется наличие нескольких сред, то можно предложить другое решение:

  1. удалите агента из первой среды;
  2. создайте нового агента с теми же значениями параметров;
  3. добавьте его во вторую среду.

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


Есть ли в AnyLogic функции поиска агентов, находящихся в пределах заданных координат?

Встроенных функций такого рода в AnyLogic нет. В случае дискретного пространства вы можете найти агента, находящегося в
определенной ячейке, используя метод environment.getAgentAtCell(i,j). В остальных случаях следует использовать цикл для прохода по всем агентам.


Диаграммы и наборы данных

Как отобразить модельную дату и время в метках временной оси диаграмм?

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

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


Как добавить в модель диаграмму Ганта?

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

Демо модель: Gantt Chart


Как можно собрать статистику по нескольким прогонам модели?

Вам нужно добавить элемент Статистика на диаграмму эксперимента и заполнять этот объект сбора данных значениями кодом, который нужно будет ввести в полях Действие перед "прогоном" модели/Действие после "прогона" модели в секции дополнительных свойств эксперимента. В итоге, в этом объекте будут накапливаться значения, которые можно будет анализировать и/или экспортировать по завершении эксперимента.


Диаграммы состояний

Как я могу узнать, является ли в текущий момент времени состояние диаграммы состояний активным или нет?

Используйте функцию диаграммы состояний getState() или функцию агента inState()

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


Можно ли узнать время, оставшееся до срабатывания перехода?

Да, если ваш переход называется transitionA, то время, оставшееся до срабатывания этого перехода по таймауту, можно узнать так: transitionA.getRest().


Связь с базами данных

Как можно считать данные из конкретной ячейки рабочей книги Excel?

В AnyLogic входит элемент Файл Excel, предоставляющий возможность легкого доступа к файлам MS Excel 1997-2007 (.xls) из моделей AnyLogic. С помощью этого объекта вы можете:

Пожалуйста, посмотрите на приведенный ниже пример модели, демонстрирующий выполнение всех этих операций с помощью объекта Файл Excel.

Демо модель: Reading and Writing Excel Files


Производительность

Есть ли возможность отключения графического интерфейса для повышения скорости выполнения модели?

Да, в AnyLogic Professional для такого случая включен метод runFast().

В AnyLogic PLE и AnyLogic University Researcher можно использовать эксперимент варьирования параметров, включающий в себя одну итерацию. Он запускает модель с помощью метода runFast() и не выполняет отрисовку анимации.


Пешеходная библиотека

Как можно узнать координаты пешехода?

Координаты пешехода можно получить с помощью методов ped.getX(), ped.getY() и ped.getZ(). Вы можете вызывать эти функции, например, в действиях при входе, выходе пешеходов из объектов Пешеходной библиотеки и т.д.


Как промоделировать эвакуацию в результате происхождения чрезвычайного происшествия?

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

Почти у всех объектов диаграммы процесса Пешеходной библиотеки есть специальные методы cancel(ped) и cancelAll(). Используйте эти методы для эвакуации пешеходов.

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

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

Порт ccl обычно располагается на нижней границе значка объекта:


Чтобы задать альтернативное поведение для эвакуируемых пешеходов, вам нужно будет нарисовать еще одну диаграмму процесса и соединить порты ccl объектов основной диаграммы с входным портом объекта PedEnter этой альтернативной диаграммы процесса.

Более того, при вызове как cancel(ped), так и cancelAll() выполняется код параметра Действие при отмене, так что вы можете выполнить какие-то дополнительные действия с эвакуируемыми пешеходами, например, изменить цвет их фигурок.


Можно ли изменить фигуру анимации пешехода? Я хочу отображать его на анимации картинкой, а не просто кружком или крестиком.

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

Вы можете выбрать любую стандартную фигуру презентации АnyLogic, или же нарисовать нужную вам картинку с помощью нескольких стандартных фигур, объединив их в группу.

Вы можете также загрузить изображение из файла картинки любого общепринятого формата с помощью элемента Изображение.

Ну и самое главное - пешеходы теперь могут отображаться и на трехмерной анимации. Используйте расположенные на палитре 3D Объекты стандартные трехмерные изображения, или загружайте свои собственные с помощью элемента 3D Объект.

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

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

Демо модель: Subway Entrance Hall

Например, в приведенном выше примере модели создающиеся различными источниками пешеходы используют для анимации различные 3D объекты.


Мне нужно добавить в пешеходную модель турникеты. Какие объекты я должен использовать?

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

Этот объект может моделировать точку обслуживания одного из двух типов: Линейный и Точечный. Для задания турникетов больше подходит первый тип. Линейный сервис задается линией, вдоль которой должны передвигаться пешеходы. Пешеход начинает процедуру обслуживания в начальной точке линии и затем продвигается к ее конечной точке, из которой покидает сервис, что в точности соответствует случаю турникета.


Библиотека Дорожного движения

Можно ли создавать автомобили различных цветов и типов?

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

Обучающее видео: Creating cars of different colors

Моделирование складов

Можно ли моделировать складскую логистику с помощью AnyLogic?

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

Библиотека Моделирования Процессов AnyLogic содержит четыре объекта (Стеллаж, RackSystem, RackStore и RackPick), предназначенных для упрощения моделирования хранилищ с множеством ячеек хранения, имеющих периодическую структуру, таких, как зоны хранения складов, в рамках моделей, построенных с помощью объектов Библиотеки Моделирования Процессов для моделирования транспортных сетей.

Пример модели: Wholesale Warehouse


Пользовательские библиотеки

Где нужно добавлять комментарии к элементам библиотеки, чтобы они попали в Javadoc документацию?

Разрабатывая библиотеку в AnyLogic, я заметил, что есть возможность генерации Javadoc документации, и решил включить ее в состав библиотеки. Где именно я должен писать комментарии к элементам модели, чтобы они попали в Javadoc?

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