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

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

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

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

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

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

  • Диаграммы состояний описывают некоторые внутренние состояния конкретного объекта, его реакции на внешние события и спровоцированные этими событиями переходы из одного внутреннего состояния в другое. Таким объектом может быть что угодно: человек, физическое устройство, организация, проект и так далее. Простые состояния в диаграмме состояний всегда альтернативны другу: в каждый конкретный момент в диаграмме состояний активно только одно простое состояние.
  • Диаграммы процессов состоят из библиотечных блоков и описывают последовательность действий, которые совершаются над агентами-сущностями. Во время моделирования в разных блоках диаграммы процессов может находиться множество агентов, поэтому состояние диаграммы распределено по всей диаграмме целиком.
  • Диаграммы потоков и накопителей являются основополагающей частью моделей системной динамики. Состояние системы описывается значениями всех накопителей. В отличие от диаграммы состояний все накопители и потоки активны одновременно.
Как изменить размер окна презентации запущенной модели?

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

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

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

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

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

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

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

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

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

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

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

Координаты текущего расположения мыши над областью графического редактора отображаются в строке состояния 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 предоставляет уникальную возможность экспорта ваших имитационных моделей:

  • Вы можете экспортировать модель в AnyLogic Cloud. Это позволяет удаленным пользователям запускать опубликованные в сети интернет интерактивные модели в веб-браузере без необходимости устанавливать какое-либо программное обеспечение.
  • Вы также можете экспортировать модель AnyLogic как отдельное Java приложение. Это дает возможность пользователю автономно запускать модели AnyLogic, не имея установленной программы AnyLogic на своем компьютере. Вы можете разворачивать такие приложения на других компьютерах, в том числе и на серверах. Модели AnyLogic, экспортированные как отдельные Java приложения, могут взаимодействовать с базами данных, внешними файлами и другими приложениями. Эта возможность позволяет вам встраивать имитационные модели в более масштабные системы принятия решений.
Обратите внимание, что экспорт моделей в виде отдельных приложений доступен только в AnyLogic Professional.
Как можно изменить порядок отображения параметров в панели свойств моего вложенного агента?

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

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

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

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

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

run();
getExperimentHost().setPresentable( getEngine().getRoot() );
Можно ли открыть стороннее приложение (например, Блокнот) из модели AnyLogic? Как?

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

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

catch(java.io.IOException e) {
e.printStackTrace();
}
Как сделать так, чтобы при нажатии кнопки в окне Simulation отображался не агент верхнего уровня, а презентация другого типа агента?

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

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

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

Презентация

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В модели имеется тип агента 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().

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

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

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

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

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

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

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

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

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

Изучите приведенную здесь демонстрационную модель. Запрашиваемая вами функциональность может быть реализована в 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Читать содержимое файлов Excel
  • Считывать значения и формулы из определенных ячеек рабочих книг
  • Считывать данные в табличные функции Anylogic
  • Считывать данные в одномерные и двумерные массивы Anylogic
  • Создавать новые ячейки
  • Записывать значения в определенные ячейки и изменять типы этих ячеек
  • Записывать значения из наборов данных AnyLogic в рабочие книги Excel
  • Сохранять изменения в Excel файле

Посмотрите на приведенный ниже пример модели, демонстрирующий выполнение всех этих операций с помощью объекта Файл 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() выполняется код параметра Действие при отмене, так что вы можете выполнить какие-то дополнительные действия с эвакуируемыми пешеходами, например, изменить цвет их фигурок.

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

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

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

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

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

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

Могу ли я моделировать складскую логистику в AnyLogic?

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

There is a specific space markup element Storage you can use to draw rack storages, and Material Handling Library contains a set of three blocks (Store, Retrieve, and Storage System) designed to simplify modeling of storages with multiple locations and regular structure, such as warehouse storages.

Is it possible to have a storage with some initial stock?

Yes, you can do this using the approach shown in the given demo model:

Как мы можем улучшить эту статью?